<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
 > type of r to NULL, which is a perfectly valid Modula-3 type, but <BR> > rather to an internal value named TypeUnknownBecauseOfAPriorError. <BR> > Then make all warning/error checks silently succeed when applied to <BR> > such unknown types, or anything else unknown in his way. <BR><BR>
 <BR>
The compiler does apparently do stuff like that in general.<BR>
Tony put in use of "ErrType.T".<BR>
 <BR>
 <BR>
 - Jay<BR><BR> <BR>> Date: Wed, 3 Feb 2010 13:13:48 -0600<BR>> From: rodney_bates@lcwb.coop<BR>> To: m3commit@elegosoft.com<BR>> Subject: Re: [M3commit] CVS Update: cm3 (Warning, type is NULL)<BR>> <BR>> <BR>> <BR>> Tony Hosking wrote:<BR>> > On 3 Feb 2010, at 06:43, Jay K wrote:<BR>> > <BR>> >> That is legal? What does it mean? What can you do it with t?<BR>> > <BR>> > It's a variable of type NULL. It can only hold the NIL reference. <BR>> > Agreed, it is not particularly useful.<BR>> > <BR>> > The warning is there to distinguish:<BR>> > <BR>> > VAR t: NULL<BR>> > <BR>> > which a programmer presumably intended to write, from<BR>> > <BR>> > VAR t:= complicated expression of type NULL (perhaps hidden through <BR>> > various type renaming)<BR>> > <BR>> > which the programmer possibly did not intend to write.<BR>> <BR>> IMO, the appropriate thing for the front end to do is not to set the<BR>> type of r to NULL, which is a perfectly valid Modula-3 type, but<BR>> rather to an internal value named TypeUnknownBecauseOfAPriorError.<BR>> Then make all warning/error checks silently succeed when applied to<BR>> such unknown types, or anything else unknown in his way.<BR>> <BR>> > <BR>> >> I compiled all of cm3 (at least what isn't filtered out on NT386) and <BR>> >> it didn't break anything.<BR>> >> <BR>> >> - Jay<BR>> >><BR>> >> <BR>> >> ------------------------------------------------------------------------<BR>> >> From: hosking@cs.purdue.edu <mailto:hosking@cs.purdue.edu><BR>> >> Date: Wed, 3 Feb 2010 00:52:34 -0500<BR>> >> To: jay.krell@cornell.edu <mailto:jay.krell@cornell.edu><BR>> >> CC: m3commit@elegosoft.com <mailto:m3commit@elegosoft.com><BR>> >> Subject: Re: [M3commit] CVS Update: cm3<BR>> >><BR>> >> Clearly the source code is not legal. It's just that your change <BR>> >> breaks legal code:<BR>> >><BR>> >> VAR t: NULL;<BR>> >><BR>> >> which should emit a warning but nothing else.<BR>> >><BR>> >> The problem lies elsewhere...<BR>> >><BR>> >><BR>> >> On 3 Feb 2010, at 00:22, Jay K wrote:<BR>> >><BR>> >> The backend should be able to cope with almost anything, I guess.<BR>> >> But is the source code really legal?<BR>> >> Shouldn't the front end error?<BR>> >> The front end should error on some things, obviously.<BR>> >> <BR>> >> Notice that all of the "internal errors" in this scenario are from<BR>> >> the front end. Just the assertion failure is not.<BR>> >> <BR>> >> <BR>> >> The front end doesn't handle its own stack correctly<BR>> >> here, the errors come from its CG.m3 module that wraps<BR>> >> the backend.<BR>> >> <BR>> >> If this code is truly illegal and has no valid meaning, I think<BR>> >> this is an ok change.<BR>> >> The NT386 backend I guess should be hardened against front end<BR>> >> bugs though.<BR>> >> <BR>> >> <BR>> >> - Jay<BR>> >><BR>> >> <BR>> >> ------------------------------------------------------------------------<BR>> >> From: hosking@cs.purdue.edu <mailto:hosking@cs.purdue.edu><BR>> >> Date: Tue, 2 Feb 2010 12:19:16 -0500<BR>> >> To: jkrell@elego.de <mailto:jkrell@elego.de><BR>> >> CC: m3commit@elegosoft.com <mailto:m3commit@elegosoft.com><BR>> >> Subject: Re: [M3commit] CVS Update: cm3<BR>> >><BR>> >> That's the wrong approach. A warning is not an error. The<BR>> >> backend should be able to cope with it...<BR>> >><BR>> >> Antony Hosking | Associate Professor | Computer Science | Purdue<BR>> >> University<BR>> >> 305 N. University Street | West Lafayette | IN 47907 | USA<BR>> >> Office +1 765 494 6001 | Mobile +1 765 427 5484<BR>> >><BR>> >><BR>> >><BR>> >><BR>> >> On 1 Feb 2010, at 20:17, Jay Krell wrote:<BR>> >><BR>> >> CVSROOT: /usr/cvs<BR>> >> Changes by: jkrell@birch. 10/02/01 20:17:28<BR>> >><BR>> >> Modified files:<BR>> >> cm3/m3-sys/m3front/src/values/: Variable.m3 <BR>> >><BR>> >> Log message:<BR>> >> test case e0\e029:<BR>> >><BR>> >> MODULE Main;<BR>> >> TYPE Rec = RECORD a: INTEGER END;<BR>> >> VAR r := Rec; (* warning: variable has type NULL *)<BR>> >> BEGIN<BR>> >> INC(r.a)<BR>> >> END Main.<BR>> >><BR>> >> followed by internal errors and an assertion failure in m3back<BR>> >><BR>> >> Change warning to error, and then it never gets to the<BR>> >> internal errors.<BR>> >><BR>> >><BR>> >><BR>> >><BR>> >><BR>> > <BR>                                       </body>
</html>