[Issue 3952] pragma(msg,...) has bugs + alternative idea
https://issues.dlang.org/show_bug.cgi?id=3952 Dmitry Olshansky changed: What|Removed |Added Status|NEW |RESOLVED CC||dmitry.o...@gmail.com Resolution|--- |WORKSFORME --- Comment #14 from Dmitry Olshansky --- This is getting out of scope real quick. First the code: string foo0() { return "this is a test"; } string foo1() { return ""; } string foo2() { string result; return result; } string foo3() { return []; } pragma(msg, foo0()); pragma(msg, foo1()); pragma(msg, foo2()); pragma(msg, foo3()); //string hello = "red"; //pragma(msg, hello); pragma(msg, 12); void main() {} Now works as expected no [] literals. Except for static `hello`. __ctfeWrite is a separate issue so no point in doing it here. Lastly any bugs in pragma(msg, ...) are welcome as specific bugs. --
[Issue 3952] pragma(msg,...) has bugs + alternative idea
http://d.puremagic.com/issues/show_bug.cgi?id=3952 --- Comment #13 from bearophile_h...@eml.cc 2013-02-05 15:45:38 PST --- (In reply to comment #12) > Ok I can see now the Druntime pull was merged by accident. We're waiting for > https://github.com/D-Programming-Language/dmd/pull/692 Right. I don't know if this is supposed to work: __ctfeWriteln("hello"); void main() {} Regarding the bad __ctfeWriteln/__ctfeWrite names, I don't know what to do. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3952] pragma(msg,...) has bugs + alternative idea
http://d.puremagic.com/issues/show_bug.cgi?id=3952 --- Comment #12 from Andrej Mitrovic 2013-02-05 15:04:49 PST --- Ok I can see now the Druntime pull was merged by accident. We're waiting for https://github.com/D-Programming-Language/dmd/pull/692 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3952] pragma(msg,...) has bugs + alternative idea
http://d.puremagic.com/issues/show_bug.cgi?id=3952 --- Comment #11 from bearophile_h...@eml.cc 2013-02-05 14:57:11 PST --- (In reply to comment #10) > Is this resolved now? - - - - - - - - - - - - - - - - - This doesn't work: __ctfeWriteln("hello"); void main() {} It gives: temp.d(1): Error: unexpected ( in declarator temp.d(1): Error: basic type expected, not "hello" temp.d(1): Error: found '"hello"' when expecting ')' temp.d(1): Error: no identifier for declarator __ctfeWriteln(int) temp.d(1): Error: semicolon expected following function declaration temp.d(1): Error: Declaration expected, not ')' - - - - - - - - - - - - - - - - - While this gives no errors but prints nothing: int foo() { __ctfeWriteln(1); __ctfeWriteln("hello"); return 0; } enum x = foo(); void main() {} - - - - - - - - - - - - - - - - - I don't like the names __ctfeWriteln and __ctfeWrite, they are ugly. It's much better to call them ctWriteln and ctWrite. They are meant to be a clean and handy feature of the D language, not some temporary compiler-speciic hack. - - - - - - - - - - - - - - - - - I don't see the D docs about those two functions in the D site. They need to be documented. - - - - - - - - - - - - - - - - - So this is not resolved yet. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3952] pragma(msg,...) has bugs + alternative idea
http://d.puremagic.com/issues/show_bug.cgi?id=3952 Andrej Mitrovic changed: What|Removed |Added CC||andrej.mitrov...@gmail.com --- Comment #10 from Andrej Mitrovic 2013-02-05 13:54:53 PST --- Is this resolved now? -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3952] pragma(msg,...) has bugs + alternative idea
http://d.puremagic.com/issues/show_bug.cgi?id=3952 --- Comment #9 from github-bugzi...@puremagic.com 2012-02-20 13:52:07 PST --- Commits pushed to master at https://github.com/D-Programming-Language/druntime https://github.com/D-Programming-Language/druntime/commit/52494246e8f7ac08c3f5f40d379ced763e8103e3 fix Issue 3952 part 4: Add __ctfeWrite and __ctfeWriteln. This is the druntime part of the fix. https://github.com/D-Programming-Language/druntime/commit/58afd8b349567873777387119dc36a9e62e79457 Merge pull request #155 from kennytm/bug3952d_ctfeWriteln_again fix Issue 3952 part 4: Add __ctfeWrite and __ctfeWriteln. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3952] pragma(msg,...) has bugs + alternative idea
http://d.puremagic.com/issues/show_bug.cgi?id=3952 kenn...@gmail.com changed: What|Removed |Added Keywords||pull CC||kenn...@gmail.com Platform|x86 |All Version|2.041 |D2 OS/Version|Windows |All --- Comment #8 from kenn...@gmail.com 2012-02-19 07:34:07 PST --- DMD pull #692. https://github.com/D-Programming-Language/dmd/pull/692 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3952] pragma(msg,...) has bugs + alternative idea
http://d.puremagic.com/issues/show_bug.cgi?id=3952 --- Comment #7 from bearophile_h...@eml.cc 2011-07-25 10:47:25 PDT --- (In reply to comment #6) > OTOH, having both would be really nice. There are no plans to remove pragma(msg) :-) -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3952] pragma(msg,...) has bugs + alternative idea
http://d.puremagic.com/issues/show_bug.cgi?id=3952 --- Comment #6 from BCS 2011-07-25 10:13:37 PDT --- I don't have a github account so I'll comment here: There is use for ways to create output at runtime, CTFE time and static expansion time. For instance this function: int TemplateCTFE(T...)(int j) { for (int i = 0; i < j; i++) { foreach(t; T) { pragma(msg, t.stringof); } } } When called like this from a CTFE context: TemplateCTFE!(int, char, float)(5); will only print "int\nchar\float" once rather than 5 times. IMHO this static-expansion-time ouput is more valuable than a CTFE time output (that would output 15 line from that call). OTOH, having both would be really nice. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3952] pragma(msg,...) has bugs + alternative idea
http://d.puremagic.com/issues/show_bug.cgi?id=3952 --- Comment #5 from bearophile_h...@eml.cc 2011-07-25 08:35:25 PDT --- See also the discussion here: https://github.com/D-Programming-Language/dmd/pull/237 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3952] pragma(msg,...) has bugs + alternative idea
http://d.puremagic.com/issues/show_bug.cgi?id=3952 --- Comment #4 from bearophile_h...@eml.cc 2010-08-08 08:17:34 PDT --- I don't understand what you exactly mean, but similar problems can be solved by: if (__ctfe) ctputs("..."); Or: if (!__ctfe) ctputs("..."); -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3952] pragma(msg,...) has bugs + alternative idea
http://d.puremagic.com/issues/show_bug.cgi?id=3952 BCS changed: What|Removed |Added CC||shro8...@vandals.uidaho.edu --- Comment #3 from BCS 2010-08-08 07:23:18 PDT --- What about this case: auto Fn(T...)(T t) { foreach(Te; T) // compile time foreach { pragam(msg, "processing: " ~ Te.stringof) ... ctfe valid code } } void main() { Fn!(int, int, float)(1,2,3.14); // will be evaluated at _run time_ } // expected CT output: processing: int processing: int processing: float // expected runtime output: none -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3952] pragma(msg,...) has bugs + alternative idea
http://d.puremagic.com/issues/show_bug.cgi?id=3952 --- Comment #2 from bearophile_h...@eml.cc 2010-08-07 00:14:07 PDT --- Andrei has asked if just a pragma(msg) is enough for the error template constraints. In some situations it works. But to use pragma(msg) you have to guard it with a static if. So if the template constraint is a CTFE (that uses a normal 'if' instead of a 'static if') you can't use it. While ctputs() can be used, this shows the error message even if it's not required: bool isGoodFoo(int x) { if (x > 10) { return true; } else { pragma(msg, "no good"); // ctputs("no good"); return false; } } void foo(int N)() if (isGoodFoo(N)) { } void main() { foo!(20)(); } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3952] pragma(msg,...) has bugs + alternative idea
http://d.puremagic.com/issues/show_bug.cgi?id=3952 --- Comment #1 from bearophile_h...@eml.cc 2010-08-06 09:34:59 PDT --- In D1 there were no template constraints, so to test the template arguments I used to add some static asserts inside them. So a wrong template argument shows a error message written by me that explains why the instantiation has failed (unfortunately those error messages show the line number inside the template). When a template constraint is composed of some different parts in &&, it's less easy to understand what condition has failed, so I miss the error messages written by me. This is an example (that probably I will simplify), there are four conditions, and for a person that has not written this code, and is just using Phobos, it's not immediately obvious what part has failed: auto opBinary(string op, TOther)(TOther other) if (op == "~" && is(TOther == struct) && (!__traits(compiles, { void isTuple(U...)(Tuple!U){} isTuple(other); }) || distinctFieldNames!(T, TOther.TypesAndStrings)() )) { ... There is a simple solution. The simple template constraints often don't need extra error messages, so they can be left as they are now. Putting one or more error message inside a template constraints turns them into messy code, so in such cases it's better to move the tests elsewhere, in an external template/CTFE: template IsGoodFoo(T) { static if (...) { enum bool IsGoodFoo = true; } else { ctputs("this is an error message"); return false; } } void foo(T)(T x) if (IsGoodFoo!T) { ... So the ctputs() is usable for the template constraints error messages too. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---