[Vm-dev] VM Maker: VMMaker.oscog-eem.2494.mcz
commits at source.squeak.org
commits at source.squeak.org
Wed Dec 19 05:00:03 UTC 2018
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2494.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.2494
Author: eem
Time: 18 December 2018, 8:59:49.849545 pm
UUID: 58de0292-515b-421f-873a-167c18fb7c92
Ancestors: VMMaker.oscog-eem.2493
Fix a regression in VMMaker.oscog-eem.2493 when generating returns of variables or constants.
=============== Diff against VMMaker.oscog-eem.2493 ===============
Item was changed:
----- Method: SmartSyntaxPluginTMethod>>fixUpReturnOneStmt:on: (in category 'transforming') -----
fixUpReturnOneStmt: stmt on: sStream
| expr exprRetStmts "p t" |
stmt isReturn ifFalse: [^sStream nextPut: stmt].
expr := stmt expression.
(expr isSend
+ and: [self resultSendAlwaysFails: expr]) ifTrue:
- and: [self resultSendAlwaysFails: expr]) ifTrue:
["failure returns"
sStream nextPut: expr; nextPut: self nullReturnExpr.
^nil].
+ (expr isVariable and: ['nil' = expr name]) ifTrue:
- (expr isVariable and: ['nil' = expr name]) ifTrue:
["^ nil -- this is never right unless automatically generated"
sStream nextPut: stmt.
^nil].
+ (expr isVariable and: ['self' = expr name]) ifTrue:
- (expr isVariable and: ['self' = expr name]) ifTrue:
["^ self"
fullArgs isEmpty ifFalse:
[sStream nextPut: (self statementGuardedWithSuccess: (self popExpr: fullArgs size))].
sStream nextPut: self nullReturnExpr.
^nil].
(expr isVariable or: [expr isConstant]) ifTrue:
+ ["^ variable or ^ constant without guardchecking"
+ sStream
+ nextPut: (sStream isEmpty "No statements to cause failure, therefore no need for failure guard."
+ ifTrue:
+ [self pop: fullArgs size + 1 thenReturnExpr: expr]
+ ifFalse:
+ [self statementGuardedWithSuccess:
+ (self pop: fullArgs size + 1 thenReturnExpr: expr)]);
+ nextPut: self nullReturnExpr.
- ["^ variable or ^ constant or ^ expr without guardchecking"
- fullArgs isEmpty ifFalse:
- [sStream nextPut: (self statementGuardedWithSuccess: (self pop: fullArgs size + 1 thenReturnExpr: expr))].
- sStream nextPut: self nullReturnExpr.
^nil].
"^ expr with necessary guard checking"
"p := sStream position."
exprRetStmts := Array streamContents:
[:ersStream|
(self resultExpressionCanFail: expr)
ifTrue:
["t := 1."
ersStream
nextPut: (self assign: (self oopVariable: '_return_value') expression: expr);
nextPut: (self statementGuardedWithSuccess: (self pop: fullArgs size + 1
thenReturnExpr: (self oopVariable: '_return_value')))]
ifFalse:
["t := 2."
ersStream nextPut: (self pop: fullArgs size + 1 thenReturnExpr: expr)]].
sStream isEmpty "No statements to cause failure, therefore no need for an initial failure guard."
ifTrue: [sStream nextPutAll: exprRetStmts]
ifFalse:
["t := t + 2."
sStream nextPut: (self statementGuardedWithSuccess: exprRetStmts)].
sStream nextPut: self nullReturnExpr.
"Them := Dictionary new"
"(Them at: t ifAbsentPut: [Dictionary new])
at: self selector
put: (sStream originalContents copyFrom: p + 1 to: sStream position)"!
More information about the Vm-dev
mailing list