[Vm-dev] VM Maker: VMMaker.oscog-eem.1699.mcz
Esteban Lorenzano
estebanlm at gmail.com
Thu Feb 25 15:32:17 UTC 2016
Hi,
yes, this seems to be working. This produces this code:
static char _m[] = "SqueakFFIPrims";
void* IA32FFIPlugin_exports[][3] = {
{(void*)_m, "ffiLogCallsTo", (void*)ffiLogCallsTo},
...
{NULL, NULL, NULL}
};
Now, I wonder… why not just to change (in #emitExportsNamed:pluginName:on:):
aStream cr; nextPutAll: 'void* '; nextPutAll: exportsNamePrefix; nextPutAll: '_exports[][3] = {'; cr.
with this:
aStream cr; nextPutAll: 'void* '; nextPutAll: pluginName; nextPutAll: '_exports[][3] = {'; cr.
and avoid the need of the #define?
(also, I think is less confusing than trust on the define...)
cheers!
Esteban
> On 24 Feb 2016, at 17:17, commits at source.squeak.org wrote:
>
>
> Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
> http://source.squeak.org/VMMaker/VMMaker.oscog-eem.1699.mcz
>
> ==================== Summary ====================
>
> Name: VMMaker.oscog-eem.1699
> Author: eem
> Time: 24 February 2016, 9:16:10.818176 am
> UUID: 186ebd51-28ef-4e7f-8411-96b61577b777
> Ancestors: VMMaker.oscog-eem.1698
>
> Allow a plugin to override moduleName in generating its export table, via moduleExportsName.
>
> To this end eliminate the pluginName variable from VMPluginCodeGenerator and use pluginClass moduleName instead.
>
> Also use a shared variable to hold the moduleExportsName in the gnerated source.
>
> =============== Diff against VMMaker.oscog-eem.1698 ===============
>
> Item was changed:
> ----- Method: CCodeGenerator>>emitExportsNamed:pluginName:on: (in category 'C code generator') -----
> emitExportsNamed: exportsNamePrefix pluginName: pluginName on: aStream
> "Store all the exported primitives in the form used by the internal named prim system."
> | nilVMClass excludeDepth |
> (nilVMClass := vmClass isNil) ifTrue: "We need a vmClass temporarily to compute accessor depths."
> [vmClass := StackInterpreter].
> "Don't include the depth in the vm's named primitives if the vm is non-Spur."
> excludeDepth := exportsNamePrefix = 'vm'
> and: [pluginName isEmpty
> and: [vmClass objectMemoryClass hasSpurMemoryManagerAPI not]].
> + aStream cr; cr; nextPutAll: 'static char _m[] = "'; nextPutAll: pluginName; nextPutAll: '";'.
> + aStream cr; nextPutAll: 'void* '; nextPutAll: exportsNamePrefix; nextPutAll: '_exports[][3] = {'; cr.
> - aStream cr; cr; nextPutAll: 'void* '; nextPutAll: exportsNamePrefix; nextPutAll: '_exports[][3] = {'; cr.
> ((methods select: [:m| m export]) asSortedCollection: [:a :b| a selector caseSensitiveLessOrEqual: b selector]) do:
> [:method| | compileTimeOptionPragmas primName |
> (compileTimeOptionPragmas := method compileTimeOptionPragmas) notEmpty ifTrue:
> [method outputConditionalDefineFor: compileTimeOptionPragmas on: aStream].
> primName := self cFunctionNameFor: method selector.
> + aStream tab; nextPutAll: '{(void*)_m, "'; nextPutAll: primName.
> - aStream tab; nextPutAll: '{"'; nextPutAll: pluginName; nextPutAll: '", "'; nextPutAll: primName.
> excludeDepth ifFalse:
> [(self accessorDepthForSelector: primName asSymbol) ifNotNil:
> [:depth| "store the accessor depth in a hidden byte immediately after the primName"
> self assert: depth < 128.
> aStream
> nextPutAll: '\000\';
> nextPutAll: ((depth bitAnd: 255) printStringBase: 8 nDigits: 3)]].
> aStream nextPutAll: '", (void*)'; nextPutAll: primName; nextPutAll: '},'; cr.
> method terminateConditionalDefineFor: compileTimeOptionPragmas on: aStream].
> aStream tab; nextPutAll: '{NULL, NULL, NULL}'; cr; nextPutAll: '};'; cr.
> nilVMClass ifTrue:
> [vmClass := nil]!
>
> Item was added:
> + ----- Method: InterpreterPlugin class>>moduleExportsName (in category 'translation') -----
> + moduleExportsName
> + "Answer the name to include in receiver's internal plugin exports.
> + This is the value of the module: argument in named primitives.
> + By default answer the moduleName."
> +
> + ^self moduleName!
>
> Item was changed:
> ----- Method: SimulatorEventTransformer>>degenerateMouseEvent:for: (in category 'event transformation') -----
> degenerateMouseEvent: aMorphicEvent for: aClient
> "Convert the mouse event into low-level events for the VM simulator (aClient). Filter-out mouse moves,
> and generate a fake mouse move before each button press.
> See HandMorph>>generateMouseEvent"
> | translated |
> translated := aMorphicEvent position - aClient displayView bounds origin.
> modifiers := aMorphicEvent buttons >> 3. "Sad, but modifiers come in on mouse move events..."
>
> aMorphicEvent type == #mouseMove
> + ifTrue: "filter-out mouse moves unless buttons are pressed, so simulation doesn't get window leave events when we leave its window"
> - ifTrue: "filter-out mouse moves unless buttons are pressed, so simulation doersn't get window leave events when we leave its window"
> [buttons = 0 ifTrue: [^nil]]
> ifFalse:"If the buttons are going down, make sure to add a mouse move event to the current position before the buttons are pressed."
> [((buttons bitAnd: 7) = 0 and: [(aMorphicEvent buttons bitAnd: 7) ~= 0]) ifTrue:
> [aClient queueForwardedEvent:
> { 1.
> aMorphicEvent timeStamp.
> translated x.
> translated y.
> 0.
> buttons >> 3. "Thanks dtl"
> 0.
> self windowIndex }].
> buttons := aMorphicEvent buttons].
> aClient queueForwardedEvent:
> { 1.
> aMorphicEvent timeStamp.
> translated x.
> translated y.
> buttons bitAnd: 7. "thanks Ron T."
> buttons >> 3. "Thanks dtl"
> 0.
> self windowIndex }!
>
> Item was added:
> + ----- Method: ThreadedFFIPlugin class>>moduleExportsName (in category 'translation') -----
> + moduleExportsName
> + "To make the inclusion of the platform-specific plugin to work it can't use
> + its moduleName in the exports but must use the proper moduleName."
> +
> + ^ThreadedFFIPlugin moduleName!
>
> Item was changed:
> CCodeGenerator subclass: #VMPluginCodeGenerator
> + instanceVariableNames: 'pluginClass pluginFunctionsUsed inProgressSelectors inliningDone'
> - instanceVariableNames: 'pluginClass pluginName pluginFunctionsUsed inProgressSelectors inliningDone'
> classVariableNames: ''
> poolDictionaries: ''
> category: 'VMMaker-Translation to C'!
>
> !VMPluginCodeGenerator commentStamp: '<historical>' prior: 0!
> I generate code that can be loaded dynamically from external libraries (e.g., DSOs on Unix or DLLs on Windows)!
>
> Item was changed:
> ----- Method: VMPluginCodeGenerator>>emitExportsOn: (in category 'C code generator') -----
> emitExportsOn: aStream
> "Store all the exported primitives in the form used by the internal named prim system."
> aStream cr; cr; nextPutAll:'#ifdef SQUEAK_BUILTIN_PLUGIN'.
> + self emitExportsNamed: pluginClass moduleName
> + pluginName: pluginClass moduleExportsName
> + on: aStream.
> - self emitExportsNamed: pluginName pluginName: pluginName on: aStream.
> aStream cr; nextPutAll: '#else /* ifdef SQ_BUILTIN_PLUGIN */'; cr; cr.
> self emitAccessorDepthsOn: aStream.
> aStream cr; nextPutAll: '#endif /* ifdef SQ_BUILTIN_PLUGIN */'; cr!
>
> Item was changed:
> ----- Method: VMPluginCodeGenerator>>pluginClass: (in category 'public') -----
> pluginClass: aPluginClass
> "Set the plugin class and name when generating plugins.
> And for run-time use, answer the name string."
> | packageId |
> pluginClass := aPluginClass.
> - pluginName := pluginClass moduleName.
> packageId := self shortMonticelloDescriptionForClass: pluginClass.
> (packageId beginsWith: pluginClass name) ifTrue:
> [packageId := packageId allButFirst: pluginClass name size].
> + (packageId beginsWith: pluginClass moduleName) ifTrue:
> + [packageId := packageId allButFirst: pluginClass moduleName size].
> - (packageId beginsWith: pluginName) ifTrue:
> - [packageId := packageId allButFirst: pluginName size].
> ^self declareModuleName: pluginClass moduleNameAndVersion, packageId!
>
> Item was removed:
> - ----- Method: VMPluginCodeGenerator>>pluginName: (in category 'public') -----
> - pluginName: aString
> - "TPR - moved from CCodeGenerator"
> - "Set the plugin name when generating plugins."
> - pluginName := aString.!
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20160225/f2569bc8/attachment-0001.htm
More information about the Vm-dev
mailing list