Melvin Smith <[EMAIL PROTECTED]> wrote:
> 1) Currently typenames are not checked except with 'new <classname>'
As Dan layed out WRT PMC enums, we might have to defer type checking to runtime. That is for core PMCs we do strict type checking, other types get resolved at runtime.
All I care is that IMCC checks that it is a valid class if the class is named,
otherwise use 'pmc' to defer checking but at least use the correct register set.
Even given what Steve said about no aliases, I'm considering keeping an "object" alias to "pmc" for potential future cases where semantics may diverge.
> C<.local <type> identifier> and C<.param <type> identifier> both assume
> that anything for type other than (int|float|string) is a PMC.
Yep. Some remarks:
.local <type> ident
collides with the macro syntax for local labels. So when doing something here I'd resolve that conflict too and allow only:
.sym <type> ident # <type> ::= int|float|string|pmc
Since macros are the less common case I'll have a look to see which needs to change to resolve the conflict, macros or IMC.
I'm not sure but:
.newsym <type> ident
could be handy too, compiling to new Px, <.Type>
Ok.
And while at it, imcc should know of lexicals. E.g. when the register allocator is out of regs, spilling lexicals to an array isn't necessary - they already have a permanent store in the lexical pad.
The same thing goes for globals. I've been trying to get my head around both lately.
> 4) No implicit global labels with the label :== IDENTIFIER COLON syntax.
That's not easy. While its clear that a .sub is global there are more. PASM mode comes to my mind and some nasty one: imcc/t/syn/eval_3 ff.
I need to think on this one some more as well.
Thanks for the comments.
-Melvin