[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