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