<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"Palatino Linotype";
        panose-1:2 4 5 2 5 5 5 3 3 4;}
@font-face
        {font-family:新宋体;
        panose-1:2 1 6 9 3 1 1 1 1 1;}
@font-face
        {font-family:"\@新宋体";}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Palatino Linotype",serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Palatino Linotype",serif;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-family:"Palatino Linotype",serif">> Are you aware that the BITS 32 here has no effect on the size of the global variable?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Palatino Linotype",serif"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Palatino Linotype",serif">Yes.  I was looking for a bit set type that’s guaranteed to have the same representation as some integer type, such as BITS BITSIZE(INTEGER) FOR [0..-1 + BITSIZE(INTEGER)] for INTEGER. 
 But that guarantee doesn’t seem to exist, according to the language definition.  Seems like the correct way is to use Word interface (but then Long (the corresponding interface for LONGINT) doesn’t seem to be usable).<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Palatino Linotype",serif"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Palatino Linotype",serif">— JC<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Palatino Linotype",serif"><o:p> </o:p></span></p>
<p class="MsoNormal"><b>From:</b> Rodney M. Bates [mailto:notifications@github.com]
<br>
<b>Sent:</b> Wednesday, September 20, 2017 5:35<br>
<b>To:</b> modula3/cm3 <cm3@noreply.github.com><br>
<b>Cc:</b> jcchu <jcchu@acm.org>; Author <author@noreply.github.com><br>
<b>Subject:</b> Re: [modula3/cm3] Packed set literal generation issue (#21)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Fixed on github, commit 12f50b4cde746056b943bd8aaa105c3fcb46b1a8<br>
<br>
Deleted the assertion, which is neither true nor needed.<br>
<br>
But see below:<br>
<br>
On 09/16/2017 11:54 PM, jcchu wrote:<br>
> See the fragment below.<br>
><br>
> VAR r := SET OF [0..31] { 0 }; (* OK *)<br>
> s := BITS 32 FOR SET OF [0..31] { 0 }; (* -- assertion failure in “SetExpr.m3” *)<br>
<br>
Are you aware that the BITS 32 here has no effect on the size of the global variable?<br>
<br>
Quoting from 2.2.5, Packed types:<br>
<br>
TYPE T = BITS n FOR Base<br>
<br>
where Base is a type and n is an integer-valued constant expression.<br>
The values of type T are the same as the values of type Base, but variables of type T<br>
that occur in records, objects, or arrays<br>
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^<br>
will occupy exactly n bits and be packed adjacent to the preceding field or element.<br>
<br>
s is not inside a record, object, or array, so the BITS specification has no effect on<br>
the memory allocated by the compiler.<br>
<br>
There are, however some more obscure differences:<br>
<br>
1) Although T and BITS n FOR T are are assignable to each other,<br>
BITS n FOR T and BITS m FOR T, (n#m) have no subtype or assignability<br>
relationship, so to assign one to the other would require two assignment<br>
steps, with a T as the intermediate type.<br>
<br>
2) Anywhere type equality, as opposed to assignability, is required, T and<br>
BITS n FOR T will not match. For example, you cannot pass one of these to<br>
the other as a VAR parameter.<br>
<br>
<br>
<br>
<br>
<br>
><br>
> —<br>
> You are receiving this because you are subscribed to this thread.<br>
> Reply to this email directly, view it on GitHub <https://github.com/modula3/cm3/issues/21>, or mute the thread <https://github.com/notifications/unsubscribe-auth/AGVctFuGQY2yHbHNLupX6pnu4MVJDlXgks5sjKYMgaJpZM4PaCl5>.<br>
><br>
<br>
<o:p></o:p></p>
<p><span style="font-size:12.0pt;color:#666666">—<br>
You are receiving this because you authored the thread.<br>
Reply to this email directly, <a href="https://github.com/modula3/cm3/issues/21#issuecomment-330680504">
view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/AK3PNMFBPWWpfK3zQpmt8ebPZbPlaBQ6ks5skDOIgaJpZM4PaCl5">
mute the thread</a>.<span style="border:solid windowtext 1.0pt;padding:0cm"><img border="0" width="1" height="1" style="width:.0104in;height:.0104in" id="_x0000_i1025" src="cid:image001.jpg@01D33570.4EE36110" alt="Image removed by sender."></span><o:p></o:p></span></p>
</div>
</body>
</html>