digitalmars.D.bugs - [Issue 7838] New: Give some error messages for wrong ranges
- d-bugmail puremagic.com (37/37) Apr 05 2012 http://d.puremagic.com/issues/show_bug.cgi?id=7838
- d-bugmail puremagic.com (13/13) Apr 05 2012 http://d.puremagic.com/issues/show_bug.cgi?id=7838
- d-bugmail puremagic.com (31/36) Apr 06 2012 http://d.puremagic.com/issues/show_bug.cgi?id=7838
- d-bugmail puremagic.com (9/9) Apr 06 2012 http://d.puremagic.com/issues/show_bug.cgi?id=7838
- d-bugmail puremagic.com (8/10) Apr 06 2012 http://d.puremagic.com/issues/show_bug.cgi?id=7838
http://d.puremagic.com/issues/show_bug.cgi?id=7838 Summary: Give some error messages for wrong ranges Product: D Version: D2 Platform: x86 OS/Version: Windows Status: NEW Keywords: diagnostic Severity: enhancement Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: bearophile_hugs eml.cc --- Comment #0 from bearophile_hugs eml.cc 2012-04-05 17:55:22 PDT --- I'd like DMD to give some error messages for wrong definitions of ranges, like in this case: struct Powers { int m; BigInt n; this(int m_) { this.m = m_; } const bool empty = false; BigInt front() { return n ^^ m; } void popFront() { n += 1; } } It looks correct, but it's wrong. ElementType!Powers is void. The correct code (a property was missing): struct Powers { int m; BigInt n; this(int m_) { this.m = m_; } const bool empty = false; property BigInt front() { return n ^^ m; } void popFront() { n += 1; } } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 05 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7838 Matt Peterson <revcompgeek gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |revcompgeek gmail.com --- Comment #1 from Matt Peterson <revcompgeek gmail.com> 2012-04-05 19:42:00 PDT --- My understanding is that you would usually put a static assert with isInputRange, or a more specific template from std.range immediately after the struct. How is DMD supposed to know that that struct is suppose to be a range otherwise? -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 05 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7838 --- Comment #2 from bearophile_hugs eml.cc 2012-04-06 10:09:17 PDT --- (In reply to comment #1)My understanding is that you would usually put a static assert with isInputRange, or a more specific template from std.range immediately after the struct.This is an example program: import std.range, std.bigint; struct Powers { int m; BigInt n; this(int m_) { this.m = m_; } const bool empty = false; BigInt front() { return n ^^ m; } void popFront() { n += 1; } } static assert(isInputRange!Powers); void main() {} If I compile it with DMD 2.059beta: ...>dmd -property -run temp.d temp.d(10): Error: static assert (isInputRange!(Powers)) is false So it gives me no hint where the problem is. A built-in error message is supposed to be more precise. As alternative, maybe there is a way to add focused error messages inside a isInputRangeVerify template to be used to verify that an input range is correct, that uses pragma(msg) or better ctWriteln.How is DMD supposed to know that that struct is suppose to be a range otherwise?I see, it's a problem. So here we are talking more about a probabilistic compiler tip. If the class/struct contains a popFront and front and empty methods then the programmer probably meants it to be a range. Thank you for your answer. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 06 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7838 --- Comment #3 from Matt Peterson <revcompgeek gmail.com> 2012-04-06 10:47:21 PDT --- Yeah, I think the best solution is to add verifyInputRange etc. templates to std.range, where each criteria is checked by a separate static assert. It's just a little ugly because there will end up being nearly duplicate templates for all the different range types. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 06 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7838 --- Comment #4 from bearophile_hugs eml.cc 2012-04-06 11:06:31 PDT --- (In reply to comment #3)It's just a little ugly because there will end up being nearly duplicate templates for all the different range types.I think putting such test code inside DMD itself doesn't reduce the overall complexity a lot... -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 06 2012