Begin forwarded message:

From: pharo-project-owner@lists.gforge.inria.fr
Date: April 18, 2010 8:15:05 PM GMT+02:00
To: stephane.ducasse@gmail.com
Subject: Re: [Vm-dev] Re: [Pharo-project] we need help for rome

You are not allowed to post to this mailing list, and your message has
been automatically rejected.  If you think that your messages are
being rejected in error, contact the mailing list owner at
pharo-project-owner@lists.gforge.inria.fr.


From: stephane ducasse <stephane.ducasse@gmail.com>
Date: April 18, 2010 8:14:58 PM GMT+02:00
To: Squeak Virtual Machine Development Discussion <vm-dev@lists.squeakfoundation.org>
Cc: Pharo-project@lists.gforge.inria.fr
Subject: Re: [Vm-dev] Re: [Pharo-project] we need help for rome


Thanks Bert


I think only the first 4 inst vars are actually used by the plugin:

http://squeakvm.org/svn/squeak/trunk/platforms/unix/src/plugins/RomePlugin/RomePlugin.c
#define CanvasHandleIndex 0
#define CanvasTargetIndex 1
#define CanvasFlagsIndex 2
#define CanvasStrokeColorIndex 3
#define CanvasInstSize 8

how did you get that information? from the image side or C code?
Because I tried to see but unsure.


So on Linux, Rome does use the "right" size. John appears to have used a Sophie image to generate his Plugin, which makes this fail (though I could not find his Rome plugin in the Mac OS platform code so can't verify that theory).

Now I understand why alain could remove the instance variable when cleaning the image side.


The proper fix would be to modify RomePlugin class>>initializeInstVarIndices to not generate the indices, but simply hard-code only the used ones (setting CanvasInstSize to 4), and change the comparison John mentioned below to <=. Also remove the unused *Index class vars. Now that there are plugins in the wild, hard-coding the indices is a good idea anyway. During development, the flexible generator version was useful, but not anymore.


I browsed a bit the C code and I'm learning so may be my questions are not clever, but

- do we need the pango primitives for ROME?
Apparently Pango may use Cairo for fonts rendering but do Rome needs that?
So is it simpler to use fonts via pango than cairo.

- then what about FormInstSize?

(interpreterProxy->slotSizeOf(formOop)) < FormInstSize
does it mean

- the primitives we have access to are listed by
void* RomePlugin_exports[][3] = {

- how do we know that the plugin is somehow in sync with Cairo "latest" version?

Stef


- Bert -

On 18.04.2010, at 18:45, St�phane Ducasse wrote:

John

how can I know the order and the iv that are used by the plugin?

Stef

On Apr 17, 2010, at 4:09 AM, John M McIntosh wrote:

(a) In Sophie   
RomeCanvas subclass: #RomePluginCanvas
instanceVariableNames: 'handle target flags strokeColor stack font fontSize fontMatrix currentFillColor currentBackColor glyphAccuracy cachedGlyphBlt cachedClearBlt drawRunPositions drawRunGlyph drawRunPointY'
classVariableNames: 'CachedTarget FlagFill FlagStro

(b) In Pharo

RomeCanvas subclass: #RomePluginCanvas
instanceVariableNames: 'handle target flags strokeColor stack font fontSize fontMatrix'
classVariableNames: 'FlagFill FlagStroke Registry'
poolDictionaries: ''
category: 'Rome-PluginCanvas'

Comment warning:

INST VAR ORDER IS KNOWN TO PLUGIN! DO NOT REARRANGE!


So in the plugin we have...

if (interpreterProxy->slotSizeOf(canvasOop)) < CanvasInstSize)
fail().


where CanvasInstSize is 13

but as you see in (b) the number of instance slots for the canvas Oops is  8.

8 < 13, oops you fail.

So where did the instance vars   currentFillColor currentBackColor glyphAccuracy cachedGlyphBlt cachedClearBlt
go? On purpose gone, refactored, old code. etc....


On 2010-04-16, at 1:37 PM, St�phane Ducasse wrote:


On Apr 16, 2010, at 10:30 PM, John McIntosh wrote:

Well I'm just as puzzled as you since the primitive gets executed and you are using the same binary that was shipped with Sophie years back.

I like to hear that because I feel less idiot. :)