[Vm-dev] VM Maker: VMMaker.oscog-eem.2063.mcz
commits at source.squeak.org
commits at source.squeak.org
Sat Dec 31 22:37:55 UTC 2016
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2063.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.2063
Author: eem
Time: 31 December 2016, 2:37:08.922183 pm
UUID: 034eff8c-70b0-4106-b87e-a02a6a9aa506
Ancestors: VMMaker.oscog-eem.2062
SmartSyntaxPlugin Slang:
Avoid generating unreachable code when failing. Avoid an unnecessary test for failed if returning an expression which can't fail. Nuke an unused method.
=============== Diff against VMMaker.oscog-eem.2062 ===============
Item was removed:
- ----- Method: SmartSyntaxPluginTMethod>>checkSuccessExpr (in category 'private') -----
- checkSuccessExpr
- "Return the parse tree for an expression that aborts the primitive if the successFlag is not true."
-
- | expr |
- expr := 'interpreterProxy failed ifTrue: [^nil]'.
- ^ self statementsFor: expr varName: ''
- !
Item was changed:
----- Method: SmartSyntaxPluginTMethod>>fixUpReturnOneStmt:on: (in category 'transforming') -----
fixUpReturnOneStmt: stmt on: sStream
stmt isReturn ifFalse: [^sStream nextPut: stmt].
(stmt expression isSend
and: [#('primitiveFail' 'primitiveFailFor:') includes: stmt expression selector]) ifTrue:
["failure return"
sStream nextPut: stmt expression.
sStream nextPut: self nullReturnExpr.
^nil].
(stmt expression isVariable and: ['nil' = stmt expression name]) ifTrue:
["^ nil -- this is never right unless automatically generated"
sStream nextPut: stmt.
^nil].
(stmt expression isVariable and: ['self' = stmt expression name]) ifTrue:
["^ self"
self generateFailureGuardOn: sStream.
fullArgs isEmpty ifFalse:[ sStream nextPut: (self popExpr: fullArgs size)].
sStream nextPut: self nullReturnExpr.
^nil].
(stmt expression isVariable | stmt expression isConstant | suppressingFailureGuards) ifTrue:
["^ variable or ^ constant or ^ expr without guardchecking"
self generateFailureGuardOn: sStream.
sStream nextPut: (self pop: fullArgs size + 1 thenReturnExpr: stmt expression).
sStream nextPut: self nullReturnExpr.
^nil].
+ "^ expr with necessary guard checking"
- "^ expr with guardchecking"
self generateFailureGuardOn: sStream.
+ (self resultExpressionAlwaysFails: stmt expression)
+ ifTrue:
+ [sStream nextPut: stmt expression]
+ ifFalse:
+ [sStream nextPut: (self assign: (self oopVariable: '_return_value') expression: stmt expression).
+ (self resultExpressionCanFail: stmt expression) ifTrue:
+ [self generateFailureGuardOn: sStream].
+ sStream nextPut: (self pop: fullArgs size + 1 thenReturnExpr: (self oopVariable: '_return_value'))].
+ sStream nextPut: self nullReturnExpr!
- sStream nextPut: (self assign: (self oopVariable: '_return_value') expression: stmt expression).
- self generateFailureGuardOn: sStream.
- sStream nextPut: (self pop: fullArgs size + 1 thenReturnExpr: (self oopVariable: '_return_value')).
- sStream nextPut: self nullReturnExpr
- !
Item was removed:
- ----- Method: SmartSyntaxPluginTMethod>>oldReplaceSizeMessages (in category 'private') -----
- oldReplaceSizeMessages
- "Replace sends of the message 'size' with calls to sizeOfSTArrayFromCPrimitive."
-
- | argExpr |
- parseTree nodesDo: [:n |
- (n isSend and: [n selector = #size]) ifTrue: [
- argExpr := TSendNode new
- setSelector: #+
- receiver: n receiver
- arguments: (Array with: (TConstantNode new setValue: 1)).
- n
- setSelector: #sizeOfSTArrayFromCPrimitive:
- receiver: (TVariableNode new setName: 'interpreterProxy')
- arguments: (Array with: argExpr)]].
- !
Item was added:
+ ----- Method: SmartSyntaxPluginTMethod>>resultExpressionAlwaysFails: (in category 'private') -----
+ resultExpressionAlwaysFails: aTSendNode
+ ^aTSendNode selector == #success:
+ and: [aTSendNode args first isConstant
+ and: [aTSendNode args first value == false]]!
Item was added:
+ ----- Method: SmartSyntaxPluginTMethod>>resultExpressionCanFail: (in category 'private') -----
+ resultExpressionCanFail: aTSendNode
+ "Neither asSmallIntegerObj nor asBooleanObj can fail."
+ ^(#(asSmallIntegerObj asBooleanObj) includes: aTSendNode selector) not!
More information about the Vm-dev
mailing list