[Vm-dev] VM Maker: VMMaker.oscog-eem.1358.mcz
commits at source.squeak.org
commits at source.squeak.org
Tue Jun 16 23:05:02 UTC 2015
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.1358.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.1358
Author: eem
Time: 16 June 2015, 4:02:48.322 pm
UUID: 9b5a5fe3-2c6a-46d1-ab86-007b3d28be17
Ancestors: VMMaker.oscog-eem.1357
Fix Slang for sends that return the result of a
message send of a method containing value
expansions. The old code would return the value
of the first statement of each block expanded
in a value expansion, instead of the last.
=============== Diff against VMMaker.oscog-eem.1357 ===============
Item was changed:
----- Method: TReturnNode>>emitCCodeOn:level:generator: (in category 'C code generation') -----
emitCCodeOn: aStream level: level generator: aCodeGen
(expression isSwitch
or: [expression isCaseStmt]) ifTrue:
[^expression emitCCodeOn: aStream addToEndOfCases: self level: level generator: aCodeGen].
+ (expression isSend and: [expression isValueExpansion]) ifTrue:
+ [^self emitValueExpansionOn: aStream level: level generator: aCodeGen].
+
+ 'void' = aCodeGen currentMethod returnType ifTrue: "If the function is void, don't say 'return x' instead say ' x; return' "
+ [expression isLeaf ifFalse:
+ [expression emitCCodeAsArgumentOn: aStream level: level generator: aCodeGen.
+ aStream nextPut: $;; crtab: level].
+ aStream nextPutAll: 'return'.
+ ^self].
+ aStream nextPutAll: 'return '.
+ expression emitCCodeAsArgumentOn: aStream level: level generator: aCodeGen!
- ('void' = aCodeGen currentMethod returnType) ifTrue: [
- "If the function is void, don't say 'return x' instead say ' x; return' "
- expression isLeaf ifFalse: [
- expression emitCCodeAsArgumentOn: aStream level: level generator: aCodeGen.
- aStream nextPut: $;; crtab: level.
- ].
- aStream nextPutAll: 'return'.
- ] ifFalse: [
- aStream nextPutAll: 'return'.
- aStream space.
- expression emitCCodeAsArgumentOn: aStream level: level generator: aCodeGen
- ].!
Item was added:
+ ----- Method: TReturnNode>>emitValueExpansionOn:level:generator: (in category 'C code generation') -----
+ emitValueExpansionOn: aStream level: level generator: aCodeGen
+ | stmtList lastStmt copy |
+ self assert: (expression isSend and: [expression isValueExpansion]).
+ stmtList := expression receiver.
+ lastStmt := stmtList statements last.
+ lastStmt isReturn ifTrue:
+ [^expression emitCCodeOn: aStream level: level generator: aCodeGen].
+ copy := stmtList copy.
+ copy statements
+ at: stmtList statements size
+ put: (TReturnNode new setExpression: lastStmt).
+ copy emitCCodeOn: aStream level: level generator: aCodeGen!
More information about the Vm-dev
mailing list