[Vm-dev] VM Maker: VMMaker.oscog-eem.1518.mcz

commits at source.squeak.org commits at source.squeak.org
Fri Nov 13 22:47:47 UTC 2015


Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.1518.mcz

==================== Summary ====================

Name: VMMaker.oscog-eem.1518
Author: eem
Time: 13 November 2015, 2:45:55.557 pm
UUID: f6074a8b-be78-48cd-a00b-26606f77d06b
Ancestors: VMMaker.oscog-eem.1517

Include exported api variables (between Cogit and CoInterpreter) for better type checking and fewer warnings.

=============== Diff against VMMaker.oscog-eem.1517 ===============

Item was changed:
  Object subclass: #CCodeGenerator
+ 	instanceVariableNames: 'vmClass structClasses translationDict asArgumentTranslationDict inlineList constants variables variableDeclarations scopeStack methods macros apiMethods apiVariables kernelReturnTypes currentMethod headerFiles globalVariableUsage useSymbolicConstants generateDeadCode requiredSelectors logger suppressAsmLabels asmLabelCounts pools selectorTranslations optionsDictionary breakSrcInlineSelectors breakDestInlineSelectors breakOnInline vmMaker'
- 	instanceVariableNames: 'vmClass structClasses translationDict asArgumentTranslationDict inlineList constants variables variableDeclarations scopeStack methods macros apiMethods kernelReturnTypes currentMethod headerFiles globalVariableUsage useSymbolicConstants generateDeadCode requiredSelectors logger suppressAsmLabels asmLabelCounts pools selectorTranslations optionsDictionary breakSrcInlineSelectors breakDestInlineSelectors breakOnInline vmMaker'
  	classVariableNames: 'NoRegParmsInAssertVMs'
  	poolDictionaries: 'VMBasicConstants'
  	category: 'VMMaker-Translation to C'!
  
  !CCodeGenerator commentStamp: 'tpr 5/2/2003 14:30' prior: 0!
  This class oversees the translation of a subset of Smalltalk to C, allowing the comforts of Smalltalk during development and the efficiency and portability of C for the resulting interpreter.  
  See VMMaker for more useful info!

Item was removed:
- ----- Method: CCodeGenerator>>apiMethods: (in category 'accessing') -----
- apiMethods: aDictionary
- 	apiMethods := aDictionary!

Item was added:
+ ----- Method: CCodeGenerator>>includeAPIFrom: (in category 'accessing') -----
+ includeAPIFrom: aCCodeGenerator
+ 	apiMethods := aCCodeGenerator selectAPIMethods.
+ 	apiVariables := aCCodeGenerator selectAPIVariables!

Item was added:
+ ----- Method: CCodeGenerator>>selectAPIVariables (in category 'accessing') -----
+ selectAPIVariables
+ 	^variableDeclarations reject: [:decl| decl includesSubString: 'static ']!

Item was changed:
  ----- Method: CCodeGenerator>>typeOfVariable: (in category 'C code generator') -----
  typeOfVariable: varName "<String>"
  	self assert: varName isString.
  	scopeStack reverseDo:
  		[:dict|
  		(dict includesKey: varName) ifTrue:
  			[^self
  				extractTypeFor: varName
  				fromDeclaration: (dict at: varName)]].
  	^self
  		extractTypeFor: varName
+ 		fromDeclaration: (variableDeclarations
+ 							at: varName
+ 							ifAbsent:
+ 								[apiVariables
+ 									ifNotNil: [apiVariables at: varName ifAbsent: [^nil]]
+ 									ifNil: [^nil]])!
- 		fromDeclaration: (variableDeclarations at: varName ifAbsent: [^nil])!

Item was changed:
  ----- Method: VMMaker>>buildCodeGeneratorForCogit:includeAPIMethods:initializeClasses: (in category 'generate sources') -----
  buildCodeGeneratorForCogit: cogitClass includeAPIMethods: getAPIMethods initializeClasses: initializeClasses
  	"Answer the code generator for translating the cogit."
  
+ 	| cg cogitClasses |
- 	| cg cogitClasses apicg |
  	cg := self createCogitCodeGenerator.
  
  	cg vmClass: cogitClass.
  	initializeClasses ifTrue:
  		[{ cogitClass. self interpreterClass. self interpreterClass objectMemoryClass } do:
  			[:cgc|
  			(cgc respondsTo: #initializeWithOptions:)
  				ifTrue: [cgc initializeWithOptions: optionsDictionary]
  				ifFalse: [cgc initialize]]].
  
  	cogitClasses := OrderedCollection withAll: (cogitClass withAllSuperclasses copyUpThrough: VMClass) reverse.
  	cogitClasses addAllLast: ((cogitClass ancilliaryClasses: optionsDictionary) reject: [:class| class isStructClass]).
  	cogitClasses do: [:cgc| cg addClass: cgc].
  	cg addStructClasses: (cg structClassesForTranslationClasses: cogitClasses).
  
  	getAPIMethods ifTrue:
+ 		[cg includeAPIFrom: (self
+ 								buildCodeGeneratorForInterpreter: self interpreterClass
+ 								includeAPIMethods: false
+ 								initializeClasses: false)].
- 		[apicg := self
- 					buildCodeGeneratorForInterpreter: self interpreterClass
- 					includeAPIMethods: false
- 					initializeClasses: false.
- 		 cg apiMethods: apicg selectAPIMethods].
  
  	cg removeConstant: #VMBIGENDIAN. "this should be defined in platforms/??/vm/sqConfig.h"
  
  	^cg!

Item was changed:
  ----- Method: VMMaker>>buildCodeGeneratorForInterpreter:includeAPIMethods:initializeClasses: (in category 'generate sources') -----
  buildCodeGeneratorForInterpreter: interpreterClass includeAPIMethods: getAPIMethods initializeClasses: initializeClasses
  	"Answer the code generator for translating the interpreter."
  
+ 	| cg interpreterClasses |
- 	| cg interpreterClasses apicg |
  	initializeClasses ifTrue:
  		[interpreterClass initializeWithOptions: optionsDictionary.
  		 interpreterClass hasCogit ifTrue:
  			[interpreterClass cogitClass initializeWithOptions: optionsDictionary]].
  
  	(cg := self createCodeGenerator) vmClass: interpreterClass.
  
  	"Construct interpreterClasses as all classes from interpreterClass &
  	 objectMemoryClass up to VMClass in superclass to subclass order."
  	interpreterClasses := OrderedCollection new.
  	{interpreterClass. interpreterClass objectMemoryClass} do:
  		[:vmClass| | theClass |
  		 theClass := vmClass.
  		 [theClass ~~ VMClass] whileTrue:
  			[interpreterClasses addFirst: theClass.
  			 theClass := theClass superclass]].
  	interpreterClasses
  		addFirst: VMClass;
  		addAllLast: (cg nonStructClassesForTranslationClasses: interpreterClasses).
  
  	initializeClasses ifTrue:
  		[interpreterClasses do:
  			[:ic|
  			(ic respondsTo: #initializeWithOptions:)
  				ifTrue: [ic initializeWithOptions: optionsDictionary]
  				ifFalse: [ic initialize]].
  		 (cg structClassesForTranslationClasses: interpreterClasses) do:
  			[:structClass| structClass initialize]].
  
  	cg addStructClasses: (cg structClassesForTranslationClasses: interpreterClasses).
  
  	interpreterClasses do: [:ic| cg addClass: ic].
  
  	getAPIMethods ifTrue:
  		[interpreterClass cogitClass ifNotNil:
  			[:cogitClass|
+ 			 cg includeAPIFrom: (self
+ 									buildCodeGeneratorForCogit: cogitClass
+ 									includeAPIMethods: false
+ 									initializeClasses: false)]].
- 			 apicg := self
- 						buildCodeGeneratorForCogit: cogitClass
- 						includeAPIMethods: false
- 						initializeClasses: false.
- 			 cg apiMethods: apicg selectAPIMethods]].
  
  	cg removeConstant: #VMBIGENDIAN. "this should be defined in platforms/??/vm/sqConfig.h"
  
  	^cg!



More information about the Vm-dev mailing list