1 // PERMUTE_ARGS: 2 // EXTRA_SOURCES: imports/testkwd_file.d 3 module testkeyword; 4 import imports.testkwd; 5 6 /****************************************/ 7 // calee test 8 9 static assert(getCalleeFile() == thatFile); 10 static assert(getCalleeLine() == thatLine); 11 static assert(getCalleeMod() == thatMod); 12 static assert(getCalleeFunc() == thatFunc); 13 static assert(getCalleeFunc2() == thatFunc2); 14 15 void testCallee() 16 { 17 static assert(getCalleeFile() == thatFile); 18 static assert(getCalleeLine() == thatLine); 19 static assert(getCalleeMod() == thatMod); 20 static assert(getCalleeFunc() == thatFunc); 21 static assert(getCalleeFunc2() == thatFunc2); 22 } 23 24 /****************************************/ 25 // caller test 26 27 version(Windows) enum sep = "\\"; else enum sep = "/"; 28 29 enum thisFile = "runnable"~sep~"testkeyword.d"; 30 enum thisMod = "testkeyword"; 31 32 static assert(getFuncArgFile() == thisFile); 33 static assert(getFuncArgLine() == 33); 34 static assert(getFuncArgMod() == thisMod); 35 static assert(getFuncArgFunc() == ""); 36 static assert(getFuncArgFunc2() == ""); 37 38 static assert(getFuncTiargFile() == thisFile); 39 static assert(getFuncTiargLine() == 39); 40 static assert(getFuncTiargMod() == thisMod); 41 static assert(getFuncTiargFunc() == ""); 42 static assert(getFuncTiargFunc2() == ""); 43 44 static assert(getInstTiargFile!() == thisFile); 45 static assert(getInstTiargLine!() == 45); 46 static assert(getInstTiargMod!() == thisMod); 47 static assert(getInstTiargFunc!() == ""); 48 static assert(getInstTiargFunc2!() == ""); 49 50 void main(string[] args) nothrow 51 { 52 enum thisFunc = "testkeyword.main"; 53 enum thisFunc2 = "void testkeyword.main(string[] args) nothrow"; 54 55 static assert(getFuncArgFile() == thisFile); 56 static assert(getFuncArgLine() == 56); 57 static assert(getFuncArgMod() == thisMod); 58 static assert(getFuncArgFunc() == thisFunc); 59 static assert(getFuncArgFunc2() == thisFunc2); 60 61 static assert(getFuncTiargFile() == thisFile); 62 static assert(getFuncTiargLine() == 62); 63 static assert(getFuncTiargMod() == thisMod); 64 static assert(getFuncTiargFunc() == thisFunc); 65 static assert(getFuncTiargFunc2() == thisFunc2); 66 67 static assert(getInstTiargFile!() == thisFile); 68 static assert(getInstTiargLine!() == 68); 69 static assert(getInstTiargMod!() == thisMod); 70 static assert(getInstTiargFunc!() == thisFunc); 71 static assert(getInstTiargFunc2!() == thisFunc2); 72 73 void nested(int x, float y) nothrow 74 { 75 enum thisFunc = "testkeyword.main.nested"; 76 enum thisFunc2 = "void testkeyword.main.nested(int x, float y) nothrow"; 77 78 static assert(getFuncArgFile() == thisFile); 79 static assert(getFuncArgLine() == 79); 80 static assert(getFuncArgMod() == thisMod); 81 static assert(getFuncArgFunc() == thisFunc); 82 static assert(getFuncArgFunc2() == thisFunc2); 83 84 static assert(getFuncTiargFile() == thisFile); 85 static assert(getFuncTiargLine() == 85); 86 static assert(getFuncTiargMod() == thisMod); 87 static assert(getFuncTiargFunc() == thisFunc); 88 static assert(getFuncTiargFunc2() == thisFunc2); 89 90 static assert(getInstTiargFile!() == thisFile); 91 static assert(getInstTiargLine!() == 91); 92 static assert(getInstTiargMod!() == thisMod); 93 static assert(getInstTiargFunc!() == thisFunc); 94 static assert(getInstTiargFunc2!() == thisFunc2); 95 } 96 nested(1, 1.0); 97 98 auto funcLiteral = (int x, int y) 99 { 100 enum thisFunc = "testkeyword.main.__lambda3"; 101 enum thisFunc2 = "testkeyword.main.__lambda3(int x, int y)"; 102 103 static assert(getFuncArgFile() == thisFile); 104 static assert(getFuncArgLine() == 104); 105 static assert(getFuncArgMod() == thisMod); 106 static assert(getFuncArgFunc() == thisFunc); 107 static assert(getFuncArgFunc2() == thisFunc2); 108 109 static assert(getFuncTiargFile() == thisFile); 110 static assert(getFuncTiargLine() == 110); 111 static assert(getFuncTiargMod() == thisMod); 112 static assert(getFuncTiargFunc() == thisFunc); 113 static assert(getFuncTiargFunc2() == thisFunc2); 114 115 static assert(getInstTiargFile!() == thisFile); 116 static assert(getInstTiargLine!() == 116); 117 static assert(getInstTiargMod!() == thisMod); 118 static assert(getInstTiargFunc!() == thisFunc); 119 static assert(getInstTiargFunc2!() == thisFunc2); 120 }; 121 funcLiteral(1, 2); 122 123 static struct S 124 { 125 void func(string cs, T1, alias T2, T...)(int x) const 126 { 127 enum thisFunc = `testkeyword.main.S.func!("foo", int, symbol, int[], float[]).func`; 128 enum thisFunc2 = `void testkeyword.main.S.func!("foo", int, symbol, int[], float[]).func(int x) const`; 129 130 static assert(getFuncArgFile() == thisFile); 131 static assert(getFuncArgLine() == 131); 132 static assert(getFuncArgMod() == thisMod); 133 static assert(getFuncArgFunc() == thisFunc); 134 static assert(getFuncArgFunc2() == thisFunc2); 135 136 static assert(getFuncTiargFile() == thisFile); 137 static assert(getFuncTiargLine() == 137); 138 static assert(getFuncTiargMod() == thisMod); 139 static assert(getFuncTiargFunc() == thisFunc); 140 static assert(getFuncTiargFunc2() == thisFunc2); 141 142 static assert(getInstTiargFile!() == thisFile); 143 static assert(getInstTiargLine!() == 143); 144 static assert(getInstTiargMod!() == thisMod); 145 static assert(getInstTiargFunc!() == thisFunc); 146 static assert(getInstTiargFunc2!() == thisFunc2); 147 } 148 } 149 static int symbol; 150 S s; 151 s.func!("foo", int, symbol, int[], float[])(1); 152 }