"This script prepares Smalltalk classes and adds additional methods. Use object.rb for classes that may not be changed due to object security policy." |methods clsDbeHalt| methods := Dictionary new. clsDbeHalt := AbstractException subclass: 'DBEHalt' instVarNames: #(wrappedException) classVars: #() classInstVars: #() poolDictionaries: #() inDictionary: 'Globals' category: 'User Classes' options: #(). clsDbeHalt compile: 'wrappedException: anException wrappedException := anException.'. clsDbeHalt compile: 'wrappedException ^ wrappedException'. clsDbeHalt compile: 'initialize gsResumable := true.'. clsDbeHalt class compile: 'signalFor: anException ^ self new wrappedException: anException; signal.'. AbstractException compile: 'signalNotTrappable "Signal trappable exception for database explorer." gsTrappable := false. DBEHalt signalFor: self.'. RubyProc compile: 'callAndRescue: rescueBlock "Evaluate block for database explorer. Catches all kinds of exceptions." ^ [rescueBlock value: {false. block value}] on: AbstractException do: [:exc | |cc| rescueBlock value: {true. exc}].'. "This won't work for meta classes but it allows us to define the primitive on Class (Ruby)." Metaclass3 compile: 'subclasses ^ ClassOrganizer cachedOrganizer subclassesOf: self'. "Dictionary (different from RubyHash)" "methods at: Dictionary put: 'asDatabaseView: depth ranges: ranges params: params |view| view := super @ruby1:to_database_view: depth _: ranges _: params view at: #basetype put: #dictionary.'. methods keysAndValuesDo: [:behavior :method | behavior compileMethod: method category: '*maglev-database-explorer' environmentId: 0. behavior @ruby1:primitive: 'to_database_view' _: 'asDatabaseView:ranges:params:']."