« Return to Thread: [squeak-dev] Anyone know the following about Slang?

Re: [squeak-dev] Anyone know the following about Slang?

by Eliot Miranda-2 :: Rate this Message:

Reply to Author | View in Thread



On Thu, Jul 3, 2008 at 5:48 PM, Igor Stasenko <siguctua@...> wrote:
2008/7/4 Eliot Miranda <eliot.miranda@...>:
> Hi All,
>
>     does anyone know (or even better has anyone fixed it) how hard it is to
> make Slang inline methods that contain simple type declarations?
>
> I would like to eliminate compile-time integer/pointer mismatch errors in
> the new StackInterpreter I'm writing.  I'd like to say things like:
>
> callerSPOf: theFP
> "Answer the SP of the caller provided theFP is not a base frame.
> This points to the hottest item on the frame's stack."
> self var: #theFP type: 'char *'.
> self returnTypeC: 'char *'.
> self assert: (self isBaseFrame: theFP) not.
> ^theFP + FoxCallerSavedIP + ((self frameNumArgs: theFP) + 2 * BytesPerWord)
> but Slang refuses to inline anything that has C declarations.  I'm guessing
> that the issue is moving the type information from the method to its inlined
> form.  It took me half a day to discover where Slang refuses to inline
> (should have looked in the obvious place CCodeGenerator>>collectInlineList,
> instead of in the inlining code :/ ).  So I'm afraid to waste the time
> trying to find out where the restriction bites.  Anyone know how to fix this
> or better still have a fix?
>

Doesn't 'self inline: true' helps?

No.  Slang refuses to inline anything containing a C declaration (retrnTypeC:, var:type: cCode:inSmalltalk: etc)
 

Or, can't you circumvent that by coercing a value to corresponding
type at call site? Like:

newSP := self cCoerce: (self callerSPOf: blabla) to: 'char *'.

That's worse than the disease :)  There are many more uses than definitions.  So I want the uses to look clean and I'll tolerate noisy definition.  There are also argument types to consider.  localIP has type char * for example, so where it is used as an argument I want the argument type to be char * or void *, etc.

 
And don't touch the return type of function.

> best
> Eliot
>
>
>
>



--
Best regards,
Igor Stasenko AKA sig.




 « Return to Thread: [squeak-dev] Anyone know the following about Slang?

LightInTheBox - Buy quality products at wholesale price!