digitalmars.D.bugs - [Issue 3050] New: Allow exception in CTFE (patch)
- d-bugmail puremagic.com (47/47) Jun 03 2009 http://d.puremagic.com/issues/show_bug.cgi?id=3050
- d-bugmail puremagic.com (29/29) Jun 04 2009 http://d.puremagic.com/issues/show_bug.cgi?id=3050
- Robert Fraser (3/55) Jun 04 2009 Since scope() is defined in terms of try/finally, would it be much
- Shin Fujishiro (2/4) Jun 04 2009 Nope. I forgot about those. :) Thanks!
- d-bugmail puremagic.com (9/9) Jun 04 2009 http://d.puremagic.com/issues/show_bug.cgi?id=3050
- Denis Koroskin (2/2) Jun 05 2009 Just wow! I wonder what else can D community do since DMD has full sourc...
- d-bugmail puremagic.com (6/6) Jul 14 2009 http://d.puremagic.com/issues/show_bug.cgi?id=3050
- d-bugmail puremagic.com (7/7) Sep 17 2011 http://d.puremagic.com/issues/show_bug.cgi?id=3050
- d-bugmail puremagic.com (14/14) Nov 05 2011 http://d.puremagic.com/issues/show_bug.cgi?id=3050
http://d.puremagic.com/issues/show_bug.cgi?id=3050
Summary: Allow exception in CTFE (patch)
Product: D
Version: 2.030
Platform: x86
OS/Version: All
Status: NEW
Keywords: patch
Severity: enhancement
Priority: P2
Component: DMD
AssignedTo: bugzilla digitalmars.com
ReportedBy: rsinfu gmail.com
Created an attachment (id=389)
--> (http://d.puremagic.com/issues/attachment.cgi?id=389)
Patch (DMD 2.030)
The proposed patch implements support for throw/try/catch/finally in CTFE.
Throw statement is, however, somewhat limited; new expression is not allowed,
except for new Exception("msg").
Example and output:
--------------------
int thrower(string s)
{
// The interpretor emulates throw new Exception("msg")
throw new Exception("exception " ~ s);
return 0;
}
int catcher()
{
try
{
return thrower("abc");
}
catch (Exception e)
{
throw e;
}
return 0;
}
enum a = catcher("abc");
--------------------
test.d(21): Error: uncaught exception from catcher(): "exception abc"
test.d(21): Error: cannot evaluate catcher() at compile time
--------------------
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jun 03 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3050
---
Created an attachment (id=391)
--> (http://d.puremagic.com/issues/attachment.cgi?id=391)
Additional patch
Please apply this patch in addition to the first one. The first one allowed
this problematic code:
--------------------
Exception foo()
{
Exception r;
try
{
throw new Exception("error");
}
catch (Exception e)
{
r = e;
}
return r;
}
enum Exception e = foo();
--------------------
This patch fix the first patch so that a CTFE exception object cannot be used
as a usual object. The only allowed use of a CTFE exception object is this:
catch (Exception e) { throw e; }
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jun 04 2009
d-bugmail puremagic.com wrote:
http://d.puremagic.com/issues/show_bug.cgi?id=3050
Summary: Allow exception in CTFE (patch)
Product: D
Version: 2.030
Platform: x86
OS/Version: All
Status: NEW
Keywords: patch
Severity: enhancement
Priority: P2
Component: DMD
AssignedTo: bugzilla digitalmars.com
ReportedBy: rsinfu gmail.com
Created an attachment (id=389)
--> (http://d.puremagic.com/issues/attachment.cgi?id=389)
Patch (DMD 2.030)
The proposed patch implements support for throw/try/catch/finally in CTFE.
Throw statement is, however, somewhat limited; new expression is not allowed,
except for new Exception("msg").
Example and output:
--------------------
int thrower(string s)
{
// The interpretor emulates throw new Exception("msg")
throw new Exception("exception " ~ s);
return 0;
}
int catcher()
{
try
{
return thrower("abc");
}
catch (Exception e)
{
throw e;
}
return 0;
}
enum a = catcher("abc");
--------------------
test.d(21): Error: uncaught exception from catcher(): "exception abc"
test.d(21): Error: cannot evaluate catcher() at compile time
--------------------
Since scope() is defined in terms of try/finally, would it be much
harder to get scope(success/failure/exit) working in CTFE?
Jun 04 2009
Robert Fraser <fraserofthenight gmail.com> wrote:Since scope() is defined in terms of try/finally, would it be much harder to get scope(success/failure/exit) working in CTFE?Nope. I forgot about those. :) Thanks!
Jun 04 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3050 --- Created an attachment (id=392) --> (http://d.puremagic.com/issues/attachment.cgi?id=392) Patch: scope(success/failure/exit) Supplemental patch to get scope guard statement working in CTFE. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 04 2009
Just wow! I wonder what else can D community do since DMD has full source code available now.
Jun 05 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3050 03:02:14 PDT --- Wow! -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jul 14 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3050 I have modified his patch based on git master. https://github.com/9rnsr/dmd/commits/ctfeException -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Sep 17 2011
http://d.puremagic.com/issues/show_bug.cgi?id=3050
Don <clugdbug yahoo.com.au> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
CC| |clugdbug yahoo.com.au
Resolution| |FIXED
More than two years later, CTFE exceptions are fully implemented. I did use
some ideas from the patch.
https://github.com/D-Programming-Language/dmd/commit/c0b26683e4e668581424e611105599ce8ab52592
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Nov 05 2011









d-bugmail puremagic.com 