<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'><div>In the C backend I have a notion of "weak struct types" <span style="font-size: 12pt; ">and "strong struct types".</span></div><div><br></div><div><br></div><div>"Strong" types have fields with types and names corresponding to the <span style="font-size: 12pt; ">original Modula-3. i.e. they debug well.</span></div><div><br></div><div><br></div><div>"Weak" types have just arrays of characters (in a struct), sized/aligned to what the front end <span style="font-size: 12pt; ">asked for. i.e. they debug poorly.</span></div><div><br></div><div><br></div><div><br></div><div>Originally I had only weak types.</div><div>Ideally I have no weak types.</div><div>I'm down to very few weak types now.</div><div>I'd like to finish eliminating weak types.</div><div><br></div><div><br></div><div><br></div><div>A quick investigation shows weak types come from open arrays and jmpbufs.</div><div>Open array temporaries from SUBARRAY specifically.</div><div><br></div><div><br></div><div><br></div><div>Can we fix this?</div><div><br></div><div><br></div><div><br></div><div>We have:</div><div>m3front/src/types/OpenArrayType.m3:</div><div><br></div><div>PROCEDURE DeclareTemp (t: Type.T): CG.Var =</div><div>  VAR</div><div>    p    := Reduce (t);</div><div>    size := Target.Address.pack + OpenDepth (p) * Target.Integer.pack;</div><div>  BEGIN</div><div>    RETURN CG.Declare_temp (size, Target.Address.align,</div><div>                            CG.Type.Struct, in_memory := TRUE);</div><div>  END DeclareTemp;</div><div><br></div><div><br></div><div>PROCEDURE Compiler (p: P) =</div><div>  VAR size := Target.Address.pack + OpenDepth (p) * Target.Integer.pack;</div><div>  BEGIN</div><div>    Type.Compile (p.element);</div><div>    CG.Declare_open_array (Type.GlobalUID(p), Type.GlobalUID(p.element), size);</div><div>  END Compiler;</div><div><br></div><div><br></div><div>DeclareTemp is used in SUBARRAY expressions -- truly temporaries,</div><div>not variables authored by anyone in Modula-3.</div><div><br></div><div><br></div><div>Can this be easily fixed?</div><div><br></div><div><br></div><div>Thanks,</div><div> - Jay</div><br>                                         </div></body>
</html>