<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'>Here is what it looks like:<br><br><br>INTERFACE VBT;<br><br>TYPE VBT_T = OBJECT METHODS<br>init(op: PaintOp_T := PaintOp_TransparentSwap;<br>     txt: Pixmap_T := Pixmap_Gray;<br>     READONLY delta := Point_T{0});<br>END;<br><br>TYPE Pixmap_T = RECORD Pixmap_T_field: INTEGER END;<br>CONST Pixmap_Gray = Pixmap_T{1};<br><br>TYPE PaintOp_T = RECORD PaintOp_T_field:INTEGER END;<br>CONST PaintOp_Swap = PaintOp_T{2};<br>CONST PaintOp_TransparentSwap = PaintOp_T{3};<br><br>TYPE Point_T = RECORD Point_T_field: INTEGER END;<br><br>END VBT.<br><br><br><br>INTERFACE HighlightVBT;<br><br>IMPORT VBT;<br>TYPE HighlightVBT_T <: VBT.VBT_T;<br><br>END HighlightVBT.<br><br><br><br>MODULE Main;<br>IMPORT HighlightVBT;<br><br>PROCEDURE Main() =<br>BEGIN<br>    NEW(HighlightVBT.HighlightVBT_T).init();<br>    NEW(HighlightVBT.HighlightVBT_T).init();<br>END Main;<br><br><br>BEGIN<br>    Main();<br>END Main.<br><br><br><br>unit Main does not receive declare_record for <br>  PaintOp_T<br>  Pixmap_T<br>  and maybe Point_T<br><br>It is somewhat obvious why.<br>VBT is not directly imported by Main.<br><br><br>Point_T is passed by reference, so the backend can inject<br>a simple forward declaration:<br>struct T123; typedef struct T123 T123;<br><br><br>But PaintOp_T and Pixmap_T are passed by value<br>and it is desirable to have them fully defined, so I can use C's pass by struct by value feature.<br><br><br><br>Furthermore, multiple calls to init() generate multiple<br>instances of Point_T{0}.<br><br><br>Anyone interested in fixing it? I'll debug it probably..<br><br><br> - Jay<br><br><br><br><br><div><div id="SkyDrivePlaceholder"></div><hr id="stopSpelling">From: jay.krell@cornell.edu<br>To: m3devel@elegosoft.com<br>Date: Tue, 16 Apr 2013 01:28:16 +0000<br>Subject: [M3devel] frontend misses a few types<br><br>

<style><!--
.ExternalClass .ecxhmmessage P {
padding:0px;
}

.ExternalClass body.ecxhmmessage {
font-size:12pt;
font-family:Calibri;
}

--></style>
<div dir="ltr">It'd be great to fix this in the frontend.<br><br><br>jbook2:p255 jay$ rm -rf AMD64_DARWIN && /dev2/cm3/m3-sys/cm3/AMD64_DARWIN/cm3 -keep<br>--- building in AMD64_DARWIN ---<br><br>ReadWish /cm3/pkg/libm3/AMD64_DARWIN/libm3.a ffffffffe90634a6<br>new source -> compiling VBT.i3<br>new source -> compiling HighlightVBT.i3<br>new source -> compiling HighlightVBT.m3<br>new source -> compiling Main.m3<br>warning: pop_struct: unknown typeid:T79A5AEBB<br>warning: pop_struct: unknown typeid:T23E73F69<br> -> linking pgm<br>./pgm >stdout.pgm.raw 2>stderr.pgm.raw<br>jbook2:p255 jay$ pwd<br>/dev2/cm3/m3-sys/m3tests/src/p2/p255<br><br><br>Also, in this example, each call creates another copy of the default parameter in the module globals.<br>That should be optimized in the frontend.<br>The test case here is really small.<br><br><br> - Jay<br><br><br><div><div id="ecxSkyDrivePlaceholder"></div>> Date: Tue, 16 Apr 2013 03:21:25 +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.   13/04/16 03:21:25<br>> <br>> Added files:<br>>       cm3/m3-sys/m3tests/src/p2/p255/: HighlightVBT.i3 HighlightVBT.m3 <br>>                                          Main.m3 VBT.i3 m3makefile <br>> <br>> Log message:<br>>     This test case demonstrates a problem<br>>     where the frontend doesn't describe all the types<br>>         to the backend. And also where it doesn't single-instance<br>>         constants that it could/should.<br>>   <br>>  It is adapted from Trestle and a little of libm3.<br>>         It is reduced very much.<br>> <br></div>                                     </div></div>                                        </div></body>
</html>