[M3commit] [modula3/cm3] 496e9b: Fix compiler-generated FINALLY procedure using par...
Jay K
jay.krell at cornell.edu
Sun Aug 2 11:23:12 CEST 2015
Eh, these finally procedures cause other problems..I have code to alloca a jmpbuf per try in a procedure..and it is broken by finally generating procedures in a custom way..
so I have to move shared code to something called...ProcedureOrFinallyProcedure?that otherwise was just in Procedure.
- Jay
From: jay.krell at cornell.edu
To: rodney.m.bates at acm.org; m3commit at elegosoft.com
Subject: RE: [M3commit] [modula3/cm3] 496e9b: Fix compiler-generated FINALLY procedure using par...
Date: Sun, 2 Aug 2015 02:20:51 +0000
Rodney, Do you have a test case that was broken before and fixed afterward?
If possible, though not required, check something into m3-sys/m3tests?
I don't mean to imply the code was correct before. I don't know, at all.
Thank you, - Jay
Date: Sat, 1 Aug 2015 17:36:54 -0700
From: rodney.m.bates at acm.org
To: m3commit at elegosoft.com
Subject: [M3commit] [modula3/cm3] 496e9b: Fix compiler-generated FINALLY procedure using par...
Branch: refs/heads/master
Home: https://github.com/modula3/cm3
Commit: 496e9be1dcdcf87bda8e72239fc90132591b4cf4
https://github.com/modula3/cm3/commit/496e9be1dcdcf87bda8e72239fc90132591b4cf4
Author: Rodney Bates <rodney.m.bates at acm.org>
Date: 2015-08-01 (Sat, 01 Aug 2015)
Changed paths:
M m3-sys/m3front/src/misc/CG.m3
Log Message:
-----------
Fix compiler-generated FINALLY procedure using parent procedure's temporary.
Changes to be committed:
modified: m3-sys/m3front/src/misc/CG.m3
CG was not stacking global variables used for keeping track of temporaries
when entering nested procedures. In the case of a compiler-generated
nested procedure for the finally part of a TRY--FINALLY block, this
meant the finally code could use a temporary allocated by the parent,
though not in use at the time. This violated the comment in M3CG_Ops.i3:
declare_temp (s: ByteSize; a: Alignment; t: Type;
in_memory: BOOLEAN): Var;
(* declares an anonymous local variable. Temps are declared
and freed between their containing procedure's begin_procedure and
end_procedure calls. Temps are never referenced by nested procedures. *)
In cases of nested procedures explicitly declared in source code, this
didn't matter because they are located ahead of any of the parent
procedure's executable code, when it has no allocated temps, and they
free their own temps at their end, restoring the previous state.
_______________________________________________
M3commit mailing list
M3commit at elegosoft.com
https://mail.elegosoft.com/cgi-bin/mailman/listinfo/m3commit
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://m3lists.elegosoft.com/pipermail/m3commit/attachments/20150802/0c367bcb/attachment-0002.html>
More information about the M3commit
mailing list