Eliot Miranda uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-eem.501.mcz
==================== Summary ====================
Name: Kernel-eem.501 Author: eem Time: 25 September 2010, 7:55:34.708 pm UUID: 5b55eae3-594b-4416-9d47-5a4ebaabb238 Ancestors: Kernel-ul.500
Add mirror primitives which can be used for accurate execution simulation (a.k.a. debugging) of proxies.
=============== Diff against Kernel-ul.500 ===============
Item was added: + ----- Method: ContextPart>>object:basicAt: (in category 'mirror primitives') ----- + object: anObject basicAt: index + "Answer the value of an indexable element in the argument anObject without sending + it a message. Fail if the argument index is not an Integer or is out of bounds, or if + anObject is not indexable. This mimics the action of the VM when it indexes an object. + Used to simulate the execution machinery by, for example, the debugger. + Primitive. See Object documentation whatIsAPrimitive." + + <primitive: 60> + index isInteger ifTrue: [self errorSubscriptBounds: index]. + index isNumber + ifTrue: [^self object: anObject basicAt: index asInteger] + ifFalse: [self errorNonIntegerIndex]!
Item was added: + ----- Method: ContextPart>>object:basicAt:put: (in category 'mirror primitives') ----- + object: anObject basicAt: index put: value + "Store the last argument + value in the indexable element of the argument anObject indicated by index without sending + anObject a message. Fail if the argument index is not an Integer or is out of bounds, or if + anObject is not indexable, or if value is an inappropriate value for anObject's indexable slots. + This mimics the action of the VM when it indexes an object. + Used to simulate the execution machinery by, for example, the debugger. + Primitive. See Object documentation whatIsAPrimitive." + + <primitive: 61> + index isInteger + ifTrue: [(index >= 1 and: [index <= (self objectSize: anObject)]) + ifTrue: [self errorImproperStore] + ifFalse: [self errorSubscriptBounds: index]]. + index isNumber + ifTrue: [^self object: anObject basicAt: index asInteger put: value] + ifFalse: [self errorNonIntegerIndex]!
Item was added: + ----- Method: ContextPart>>object:eqeq: (in category 'mirror primitives') ----- + object: anObject eqeq: anOtherObject + "Answer whether the first and second arguments are the same object (have the + same object pointer) without sending a message to the first argument. This + mimics the action of the VM when it compares two object pointers. Used to + simulate the execution machinery by, for example, the debugger. + Primitive. See Object documentation whatIsAPrimitive." + + <primitive: 110> + self primitiveFailed!
Item was added: + ----- Method: ContextPart>>object:instVarAt: (in category 'mirror primitives') ----- + object: anObject instVarAt: anIndex + "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 for the + debugger. See Object documentation whatIsAPrimitive." + + <primitive: 73> + "Access beyond fixed variables." + ^self object: anObject basicAt: anIndex - (self objectClass: anObject) instSize!
Item was added: + ----- Method: ContextPart>>object:instVarAt:put: (in category 'mirror primitives') ----- + object: anObject instVarAt: anIndex put: aValue + "Primitive. Store a value into a fixed variable in the argument anObject. + 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 for the + debugger. See Object documentation whatIsAPrimitive." + + <primitive: 74> + "Access beyond fixed fields" + ^self object: anObject basicAt: anIndex - (self objectClass: anObject) instSize put: aValue!
Item was added: + ----- Method: ContextPart>>object:perform:withArguments:inClass: (in category 'mirror primitives') ----- + object: anObject perform: selector withArguments: argArray inClass: lookupClass + "Send the selector, aSymbol, to anObject with arguments in argArray. + Fail if the number of arguments expected by the selector + does not match the size of argArray, or if lookupClass + cannot be found among the anObject's superclasses. + Primitive. Essential for the debugger." + + <primitive: 100 error: error> + (selector isMemberOf: Symbol) ifFalse: + [^self error: 'selector argument must be a Symbol']. + (argArray isMemberOf: Array) ifFalse: + [^self error: 'argArray must be an Array']. + (selector numArgs = argArray size) + ifFalse: [^self error: 'incorrect number of arguments']. + ((self objectClass: anObject) == lookupClass + or: [(self objectClass: anObject) inheritsFrom: lookupClass]) ifFalse: + [^self error: 'lookupClass is not in anObject''s inheritance chain']. + self primitiveFailed!
packages@lists.squeakfoundation.org