[Nickle] references in structured values
Keith Packard
keithp at keithp.com
Thu May 20 23:05:12 PDT 2004
Around 1 o'clock on May 16, Bart Massey wrote:
> I'm having some issues with references in structured values
> (arrays and structs). I guess x.m is implicitly
> dereferenced at some point before its address is taken.
> This seems bad: you sometimes want to initialize these things
> by passing their address. Am I confused?
Yes, you have been confused by ref typed variables. But, there's also a
bug...
Remember that a ref type (&int) is semantically equivalent to a pointer
type (*int); the only difference is that the compiler 'sugars' all
variables of that type:
int i; int i;
int j; int j;
&int r; *int p;
*&int pr; **int pp;
&r = &i; p = &i;
r = 12; *p = 12;
pr = & &r; pp = &p;
*pr = &j; *pp = &j;
Except that 'pr = & & r;' doesn't work. That's because the type of '&r'
is &int, and so the type of '& (&r)' is *also* '&int' because of the
sugaring rules above. I've fixed this by changing the type of the
expression '&r' from '&int' to '*int' which means the compile skips the
sugar when computing the outer & operator.
I think that's right.
-keith
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
Url : /pipermail/nickle/attachments/20040520/8d21f530/attachment.pgp
More information about the Nickle
mailing list