Mercurial > projects > qtd
diff d2/qtd/meta/Compiletime.d @ 357:9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Q_CLASSINFO implementation
Now Qtd can be built on Windows
author | Max Samukha <maxter@spambox.com> |
---|---|
date | Wed, 02 Jun 2010 19:38:05 +0300 |
parents | 59d847a814e3 |
children | a084e2df3776 |
line wrap: on
line diff
--- a/d2/qtd/meta/Compiletime.d Tue May 25 20:14:04 2010 +0300 +++ b/d2/qtd/meta/Compiletime.d Wed Jun 02 19:38:05 2010 +0300 @@ -13,17 +13,8 @@ import std.string : startsWith; -/* -uint startsWith(string s, string pattern) -{ - if (pattern.length <= s.length && s[0..pattern.length] == pattern) - return pattern.length; - - return 0; -} -*/ - - +/** + */ enum standardNamespace = "qtd"; template Alias(A...) if (A.length == 1) @@ -43,12 +34,6 @@ alias A tuple; } -// returns the type of a template parameter if there is one -template templateParam(U : V!(U), alias V) -{ - alias U templateParam; -} - /** Returns a tuple with T repeated count times. @@ -497,14 +482,14 @@ version (QtdUnittest) { - mixin template MyAttribute(alias symbol, A...) + mixin template QtdCustomAttribute(alias symbol, A...) { - mixin Attribute!(symbol, "MyAttribute", AttributeOptions.allowMultiple, A); + mixin Attribute!(symbol, "QtdCustomAttribute", AttributeOptions.allowMultiple, A); } - mixin template ClassInfo(string name, alias value) + mixin template QtdCustomInnerAttribute(string name, alias value) { - mixin InnerAttribute!("ClassInfo", AttributeOptions.allowMultiple, name, value); + mixin InnerAttribute!("QtdCustomInnerAttribute", AttributeOptions.allowMultiple, name, value); } unittest @@ -513,45 +498,49 @@ { // inner C attributes mixin InnerAttribute!("Inner", 33); // generic - mixin ClassInfo!("version", 123); - mixin ClassInfo!("author", "James Bond"); + mixin QtdCustomInnerAttribute!("version", 123); + mixin QtdCustomInnerAttribute!("author", "James Bond"); void foo() {}; // foo attributes mixin Attribute!(foo, "SomeAttribute", 42); - mixin MyAttribute!(foo, 1, 2); - mixin MyAttribute!(foo, 3, 4); + mixin QtdCustomAttribute!(foo, 1, 2); + mixin QtdCustomAttribute!(foo, 3, 4); alias GetAttributes!(typeof(this), "Inner") innerAttrs; static assert(innerAttrs[0].tuple[0] == "Inner"); } // outer C attribute - mixin MyAttribute!(C, 24); + mixin QtdCustomAttribute!(C, 24); alias GetAttributes!(C, "Inner") innerAttrs; static assert(innerAttrs[0].tuple[0] == "Inner" && innerAttrs[0].tuple[2] == 33); - alias GetAttributes!(C, "ClassInfo") ciAttrs; + alias GetAttributes!(C, "QtdCustomInnerAttribute") ciAttrs; static assert(ciAttrs[0].tuple[2] == "version" && ciAttrs[0].tuple[3] == 123); + /+ Fails on Windows but passes on Linux alias GetAttributes!(C.foo, "SomeAttribute") someAttr; static assert(someAttr.length == 1); static assert(someAttr[0].tuple[0] == "SomeAttribute"); - alias GetAttributes!(C.foo, "MyAttribute") myAttrs; + alias GetAttributes!(C.foo, "QtdCustomAttribute") myAttrs; //COMPILER BUG: cannot 'alias myAttrs[0].tuple myAttrs_0'; - static assert(myAttrs[0].tuple[0] == "MyAttribute"); + + static assert(myAttrs[0].tuple[0] == "QtdCustomAttribute"); static assert(myAttrs[0].tuple[2] == 1 && myAttrs[0].tuple[3] == 2); - static assert(myAttrs[1].tuple[0] == "MyAttribute"); + static assert(myAttrs[1].tuple[0] == "QtdCustomAttribute"); static assert(myAttrs[1].tuple[2] == 3 && myAttrs[1].tuple[3] == 4); + +/ /+ BUG: Fails: local declarations cannot be accessed as parent.localDecl - alias GetAttributes!(C, "MyAttribute") myAttrs2; - static assert(myAttrs2[0].tuple[0] == "MyAttribute"); + alias GetAttributes!(C, "QtdCustomAttribute") myAttrs2; + static assert(myAttrs2[0].tuple[0] == "QtdCustomAttribute"); static assert(myAttrs2[0].tuple[1] == 24); +/ + } } \ No newline at end of file