<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>Thank you.<br><br>> Date: Sun, 28 Oct 2012 11:00:26 -0500<br>> From: rodney_bates@lcwb.coop<br>> To: m3devel@elegosoft.com<br>> Subject: Re: [M3devel] unable to put M3CG.TypeUID into a record<br>> <br>> I do like this idea.  It took me a while to catch on to the rule that<br>> a field of packed type not only must occupy exactly the stated bit<br>> count, but also must not have any compiler-added padding ahead of it.<br>> While this is just what is needed for programmer-control of record<br>> layout, it seems that almost everyone keeps missing it and getting<br>> tripped up by it.<br>> <br>> After having trouble with record layouts that became illegal after<br>> changes in non-packed fields, I have made it a convention not to<br>> put BITS--FOR in a type declaration, but only use it as an anonymous<br>> type expression for a record field or array element.  The named type in<br>> the type declaration will likely be used in several contexts, with differing<br>> packing contexts.  The packing really needs to be independently thought<br>> about for each record field and array element.<br>> <br>> On 10/26/2012 04:31 AM, Jay K wrote:<br>> > This is one reasonable way to fix it:<br>> ><br>> > Index: M3CG.i3<br>> > ===================================================================<br>> > RCS file: /usr/cvs/cm3/m3-sys/m3middle/src/M3CG.i3,v<br>> > retrieving revision 1.10<br>> > diff -u -r1.10 M3CG.i3<br>> > --- M3CG.i36 Sep 2012 02:03:06 -00001.10<br>> > +++ M3CG.i326 Oct 2012 09:30:31 -0000<br>> > @@ -98,9 +98,9 @@<br>> >     Always : Frequency = LAST (Frequency);<br>> >   TYPE<br>> > -  Int32 = [-16_7fffffff-1 .. 16_7fffffff];<br>> > -  TypeUID = BITS 32 FOR Int32;<br>> > +  TypeUID = [-16_7fffffff-1 .. 16_7fffffff];<br>> >     (* a 32-bit unique id (fingerprint) for each type.  *)<br>> > +  assert_TypeUID_fits_in_32bits = BITS 32 FOR TypeUID;<br>> >   TYPE<br>> >     Label = INTEGER;<br>> > Index: M3CG_MultiPass.i3<br>> ><br>> ><br>> >   - Jay<br>> ><br>> ><br>> > ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<br>>  --<br>> > From: jay.krell@cornell.edu<br>> > To: m3devel@elegosoft.com<br>> > Date: Fri, 26 Oct 2012 09:27:36 +0000<br>> > Subject: [M3devel] unable to put M3CG.TypeUID into a record<br>> ><br>> > I still really don't like how M3CG.TypeUID is defined.<br>> ><br>> > Asserting that a type fits in 32bits<br>> > should not preclude putting it into a RECORD.<br>> ><br>> > Currently you cannot put M3CG.TypeUID into a record.<br>> ><br>> > The following does not work:<br>> ><br>> > RECORD whatever = typeid: M3CG.TypeUID; END;<br>> ><br>> > That seems really absurd to me.<br>> ><br>> >   - Jay<br>> ><br>> ><br>> >  > Date: Fri, 26 Oct 2012 11:22:55 +0000<br>> >  > To: m3commit@elegosoft.com<br>> >  > From: jkrell@elego.de<br>> >  > Subject: [M3commit] CVS Update: cm3<br>> >  ><br>> >  > CVSROOT: /usr/cvs<br>> >  > Changes by: jkrell@birch. 12/10/26 11:22:55<br>> >  ><br>> >  > Modified files:<br>> >  > cm3/m3-sys/m3back/src/: M3C.m3<br>> >  ><br>> >  > Log message:<br>> >  > continue to hack around bogus packing of M3CG.TypeUID<br>> >  ><br>> <br>                                       </div></body>
</html>