digitalmars.D.bugs - [Issue 10663] New: Mixin int not converting
- d-bugmail puremagic.com (63/63) Jul 17 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10663
- d-bugmail puremagic.com (11/11) Jul 17 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10663
- d-bugmail puremagic.com (19/26) Jul 17 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10663
http://d.puremagic.com/issues/show_bug.cgi?id=10663 Summary: Mixin int not converting Product: D Version: D2 Platform: x86_64 OS/Version: Linux Status: NEW Severity: trivial Priority: P2 Component: Phobos AssignedTo: nobody puremagic.com ReportedBy: alienballance gmail.com 17:10:51 PDT --- I know i should minimise it more, but i'm too tired already. And dpaste just stopped working :( DMD v2.063.2 [CODE] import std.conv; struct StateRunning{} struct StateDisposer{} template Declaration(uint idx, T) { enum Declaration = "const("~T.stringof~")* _s"~idx~";"; //text("const(",T.stringof,")* _s",idx,";"); } template DeclarationMulti(T...) { template Loop(string ret,size_t i,Args...) { static if( Args.length == 0 ) { enum Loop = ret; } else { enum Loop = Loop!(ret~Declaration!(i,Args[0])~"\n", i+1, Args[1..$]); } } enum DeclarationMulti = Loop!("",0,T); } struct State(T...) { mixin(DeclarationMulti!(T)); void test(T args) { foreach( i, arg; args ) { mixin("_s"~to!string(i)) = &arg; } } } void main(string[] args) { StateRunning r; StateDisposer d; State!(StateRunning,StateDisposer) s; s.test(r,d); } [/CODE] -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jul 17 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10663 17:12:05 PDT --- That's the error: src/main.d(43): Error: semicolon expected, not 'EOF' src/main.d(48): Error: undefined identifier _s0, did you mean variable _s? src/main.d(48): Error: undefined identifier _s1, did you mean variable _s? src/main.d(57): Error: template instance nawia.main.State!(StateRunning, StateDisposer) error instantiating -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jul 17 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10663 Kenji Hara <k.hara.pg gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |INVALID [snip] Problem is in Declaration template.template Declaration(uint idx, T) { enum Declaration = "const("~T.stringof~")* _s"~idx~";"; // here //text("const(",T.stringof,")* _s",idx,";"); }It concatenates string ~ uint ~ string. When uint idx is 0, Declaration!(0, T) generates "const(StateRunning)* _s\0;" There's null character. Then, in mixin statement, dmd lexer extract null character as EOF token, and reports "semicolon expected, not 'EOF'" error. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jul 17 2013