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

Eliot Miranda eliot.miranda at gmail.com
Fri Jul 4 01:00:03 UTC 2008


On Thu, Jul 3, 2008 at 5:48 PM, Igor Stasenko <siguctua at gmail.com> wrote:

> 2008/7/4 Eliot Miranda <eliot.miranda at gmail.com>:
> > 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.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20080703/997e2ab5/attachment.htm


More information about the Squeak-dev mailing list