The Trunk: Kernel-eem.501.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: Kernel-eem.501.mcz

commits-2
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!


Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Kernel-eem.501.mcz

Levente Uzonyi-2
On Sun, 26 Sep 2010, [hidden email] wrote:

> 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.

#objectSize: seems to be missing.


Levente

>
> =============== 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!
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Kernel-eem.501.mcz

Eliot Miranda-2


On Sat, Sep 25, 2010 at 8:27 PM, Levente Uzonyi <[hidden email]> wrote:
On Sun, 26 Sep 2010, [hidden email] wrote:

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.

#objectSize: seems to be missing.

Superb catch.  In trying to collect the mirror primitives and only the mirror primitives I stupidly did SystemNavigation new browseAllSelect: [:m| m beginsWith: 'object:'] and so missed this.

Thanks!



Levente


=============== 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!