[M3devel] reference to globals in globals?

Jay K jay.krell at cornell.edu
Wed Aug 15 05:04:50 CEST 2012


Isn't it safe to take the address of a global?


I have something like this:


CONST UID_INTEGER = 1234;
CONST UID_FLOAT = 4567;
  ... several more ...


TYPE CType = OBJECT .. END;


VAR t_int: CType := ...;
VAR t_float: CType := ...;
  ... several more ...


MapTypeIdToType(UID_INTEGER, t_int);
MapTypeIdToType(UID_FLOAT, FLOAT);
  ... several more ...


but what I really want is more like:


TYPE RECORD = BuiltinUid_t = 
  typeid: INTEGER;
  ctype: REF CType;
END;


CONST BuiltinUids = ARRAY OF BuiltinUids {
  BuiltinUids{UID_INTEGER, &t_int},
  BuiltinUids{UID_FLOAT, &t_float},
  ... several more ...
};


FOR i := FIRST(BuiltinUids) TO LAST(BuiltinUids) DO
  MapTypeIdToType(BuiltinUids[i].typeid, BuiltinUids[i].ctype);
END;


Heck, even if these weren't global, is it that unreasonble,
from the programmer's point of view, for the language/compiler
to do some pointer escape analysis and let me take the address
of a local, as long as I don't store it somewhere that outlives
the local?


You can see this particular pattern currently in
m3-sys/m3cc/gcc/gcc/m3cg/parse.c


and I'm pretty busy now working on m3-sys/m3back/src/M3C.m3
where I encounter this.


Working in safe languages can be frustrating...


Thank you,
 - Jay
 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://m3lists.elegosoft.com/pipermail/m3devel/attachments/20120815/e6a4be2b/attachment-0001.html>


More information about the M3devel mailing list