[Issue 5373] Regression (2.051) CTFE and std.string.replace() causes "Bad binary function q{a == b}..

2011-09-02 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=5373


Walter Bright  changed:

   What|Removed |Added

 Status|REOPENED|RESOLVED
 CC||bugzi...@digitalmars.com
 Resolution||FIXED


--- Comment #12 from Walter Bright  2011-09-02 
14:02:34 PDT ---
https://github.com/D-Programming-Language/dmd/commit/842db08516f0606ea9b278d179f8f7c51776f805

https://github.com/D-Programming-Language/dmd/commit/ff1965347d6ff2b0c3ebb71ff7c06254aba38c66

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 5373] Regression (2.051) CTFE and std.string.replace() causes "Bad binary function q{a == b}..

2011-09-01 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=5373


Don  changed:

   What|Removed |Added

 CC||clugd...@yahoo.com.au


--- Comment #11 from Don  2011-09-01 04:51:58 PDT ---
(In reply to comment #10)
> replace is broken again in 2.054.
> I get the "Bad binary function q{a == b}" with my code but this example 
> doesn't
> even get so far:
> Error: argument to mixin must be a string, not (['i','n','t',' ','a',';'])

That's bug 2156, which is completely different to this one. It has nothing to
do with CTFE.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 5373] Regression (2.051) CTFE and std.string.replace() causes "Bad binary function q{a == b}..

2011-08-08 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=5373


Trass3r  changed:

   What|Removed |Added

 Status|RESOLVED|REOPENED
 Resolution|FIXED   |


--- Comment #10 from Trass3r  2011-08-08 13:30:08 PDT ---
replace is broken again in 2.054.
I get the "Bad binary function q{a == b}" with my code but this example doesn't
even get so far:
Error: argument to mixin must be a string, not (['i','n','t',' ','a',';'])

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 5373] Regression (2.051) CTFE and std.string.replace() causes "Bad binary function q{a == b}..

2011-07-12 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=5373


Trass3r  changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution||FIXED


--- Comment #9 from Trass3r  2011-07-12 05:21:13 PDT ---
I think we can close this one now.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 5373] Regression (2.051) CTFE and std.string.replace() causes "Bad binary function q{a == b}..

2011-02-21 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=5373



--- Comment #8 from Trass3r  2011-02-21 08:16:16 PST ---
Well, as of 2.052 replace() has moved to std.array and can't be called at
compile-time anymore at all cause of Appender using pointers.

I've opened a new report: http://d.puremagic.com/issues/show_bug.cgi?id=5632

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 5373] Regression (2.051) CTFE and std.string.replace() causes "Bad binary function q{a == b}..

2011-02-03 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=5373


Rob Jacques  changed:

   What|Removed |Added

   Keywords|rejects-valid   |patch
   Priority|P2  |P3
  Component|DMD |Phobos
   Severity|normal  |regression


--- Comment #7 from Rob Jacques  2011-02-03 16:38:01 PST ---
(In reply to comment #6)
> Well the other bug report was purely about phobos.
> The question is if this is just a workaround for an issue that actually needs
> to be addressed in dmd.

_Not_ a Phobos bug? *sigh* Here's the bug in all it's detail:

//Reduction 1
import std.string;
pragma(msg, replace(int.stringof,"int","real"));

//Reduction 2
pragma(msg, indexOf("int","real")  );

//Reduction 3
pragma(msg, is(typeof(startsWith!"a == b"("int","real")))  );

//Reduction 4
bool startsWith2(alias pred = "a == b", R, E)
(R doesThisStart, E withThis)
if (is(typeof(binaryFun!pred(doesThisStart.front, withThis
{
return true;
}
pragma(msg, is(typeof(startsWith2!"a == b"("int","real")))  );

//Final Reduction
pragma(msg, is(typeof(binaryFun!"a == b"("int".front, "real"))) );

So what's happening here is that DMD is trying to execute replace at
compile-time. Replace calls indexOf, which calls startsWith. Now startsWith has
three overload sets which differ by their template constraints. So DMD
evaluates each constraint in turn. Which then causes in invalid binaryFun call,
which triggers a static assert. And static assert stops compilation then and
there. As this is per spec (AssignExpression is evaluated at compile time, and
converted to a boolean value. If the value is true, the static assert is
ignored. If the value is false, an error diagnostic is issued and the compile
fails. 
Unlike AssertExpressions, StaticAsserts are always checked and evaluted by the
compiler unless they appear in an unsatisfied conditional.) This isn't a
regression in DMD; it's a regression in Phobos due to better conformance of DMD
to the spec. Now, there does appear to be an inconsistency between static
assert's behavior during CTFE vs Non-CTFE, but that's more of an issue with the
Non-CTFE behavior vs the CTFE behavior.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 5373] Regression (2.051) CTFE and std.string.replace() causes "Bad binary function q{a == b}..

2011-02-03 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=5373



--- Comment #6 from Trass3r  2011-02-03 15:16:34 PST ---
Well the other bug report was purely about phobos.
The question is if this is just a workaround for an issue that actually needs
to be addressed in dmd.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 5373] Regression (2.051) CTFE and std.string.replace() causes "Bad binary function q{a == b}..

2011-02-03 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=5373



--- Comment #5 from Rob Jacques  2011-02-03 15:00:16 PST ---
This is the patch from Issue 5406. It appear to solve both issue's test cases.

template binaryFunImpl(alias fun, string parm1Name, string parm2Name) {
static if (is(typeof(fun) : string)) {
enum testAsExpression = "{ ElementType1 "
~parm1Name~"; ElementType2 "
~parm2Name~"; return ("~fun~");}()";

typeof(mixin(testAsExpression))
result(ElementType1, ElementType2)(ElementType1 __a, ElementType2 __b)
if(__traits(compiles, mixin(testAsExpression)))
{
mixin("alias __a "~parm1Name~";");
mixin("alias __b "~parm2Name~";");
mixin("return (" ~ fun ~ ");");
}
} else {
alias fun result;
}
}

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 5373] Regression (2.051) CTFE and std.string.replace() causes "Bad binary function q{a == b}..

2011-02-03 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=5373


Rob Jacques  changed:

   What|Removed |Added

 CC||sandf...@jhu.edu


--- Comment #4 from Rob Jacques  2011-02-03 14:58:36 PST ---
*** Issue 5406 has been marked as a duplicate of this issue. ***

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 5373] Regression (2.051) CTFE and std.string.replace() causes "Bad binary function q{a == b}..

2011-01-19 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=5373



--- Comment #3 from Trass3r  2011-01-19 12:42:42 PST ---
Yeah it was introduced with 2.051.
The release date in the changelog is wrong.
2.051 probably contains dmd r810 and the bug was introduced in r809.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 5373] Regression (2.051) CTFE and std.string.replace() causes "Bad binary function q{a == b}..

2011-01-19 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=5373



--- Comment #2 from Trass3r  2011-01-19 12:14:40 PST ---
Ok I tested different revisions of dmd with phobos etc. of 2.050
Seems like r809 introduced it. Can anybody confirm?

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 5373] Regression (2.051) CTFE and std.string.replace() causes "Bad binary function q{a == b}..

2011-01-19 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=5373


Trass3r  changed:

   What|Removed |Added

   Keywords||rejects-valid
 CC||mrmoc...@gmx.de
   Platform|Other   |All
 OS/Version|Mac OS X|All


--- Comment #1 from Trass3r  2011-01-19 11:26:36 PST ---
Very interesting that you got code like that as well.
I also use replace in a mixin inside a class in cl4d.

This error was introduced in 2.051 I think.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---