mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Complete missing functionality with $nameof / $extnameof / $qnameof
This commit is contained in:
committed by
Christoffer Lerno
parent
7c7ee58b6b
commit
fdcc189f41
68
test/test_suite/compile_time_introspection/nameof.c3t
Normal file
68
test/test_suite/compile_time_introspection/nameof.c3t
Normal file
@@ -0,0 +1,68 @@
|
||||
// #target: x64-darwin
|
||||
module mymodule;
|
||||
|
||||
extern func void printf(char *, ...);
|
||||
|
||||
struct Foo { }
|
||||
|
||||
int b;
|
||||
|
||||
func void main()
|
||||
{
|
||||
printf("%s\n", $qnameof(Foo));
|
||||
printf("%s\n", $qnameof("Foo"));
|
||||
printf("%s\n", $nameof(Foo));
|
||||
printf("%s\n", $nameof("mymodule::Foo"));
|
||||
printf("%s\n", $extnameof(Foo));
|
||||
printf("%s\n", $extnameof("Foo"));
|
||||
|
||||
printf("%s\n", $qnameof(b));
|
||||
printf("%s\n", $qnameof("b"));
|
||||
printf("%s\n", $nameof(b));
|
||||
printf("%s\n", $nameof("mymodule::b"));
|
||||
printf("%s\n", $extnameof(b));
|
||||
printf("%s\n", $extnameof("b"));
|
||||
|
||||
int a;
|
||||
|
||||
printf("%s\n", $qnameof(a));
|
||||
printf("%s\n", $qnameof("a"));
|
||||
printf("%s\n", $nameof(a));
|
||||
printf("%s\n", $nameof("a"));
|
||||
|
||||
}
|
||||
|
||||
// #expect: mymodule.ll
|
||||
|
||||
@.str = private constant [4 x i8] c"%s\0A\00", align 1
|
||||
@.str.1 = private constant [14 x i8] c"mymodule::Foo\00", align 1
|
||||
@.str.2 = private constant [4 x i8] c"%s\0A\00", align 1
|
||||
@.str.3 = private constant [14 x i8] c"mymodule::Foo\00", align 1
|
||||
@.str.4 = private constant [4 x i8] c"%s\0A\00", align 1
|
||||
@.str.5 = private constant [4 x i8] c"Foo\00", align 1
|
||||
@.str.6 = private constant [4 x i8] c"%s\0A\00", align 1
|
||||
@.str.7 = private constant [4 x i8] c"Foo\00", align 1
|
||||
@.str.8 = private constant [4 x i8] c"%s\0A\00", align 1
|
||||
@.str.9 = private constant [13 x i8] c"mymodule.Foo\00", align 1
|
||||
@.str.10 = private constant [4 x i8] c"%s\0A\00", align 1
|
||||
@.str.11 = private constant [13 x i8] c"mymodule.Foo\00", align 1
|
||||
@.str.12 = private constant [4 x i8] c"%s\0A\00", align 1
|
||||
@.str.13 = private constant [12 x i8] c"mymodule::b\00", align 1
|
||||
@.str.14 = private constant [4 x i8] c"%s\0A\00", align 1
|
||||
@.str.15 = private constant [12 x i8] c"mymodule::b\00", align 1
|
||||
@.str.16 = private constant [4 x i8] c"%s\0A\00", align 1
|
||||
@.str.17 = private constant [2 x i8] c"b\00", align 1
|
||||
@.str.18 = private constant [4 x i8] c"%s\0A\00", align 1
|
||||
@.str.19 = private constant [2 x i8] c"b\00", align 1
|
||||
@.str.20 = private constant [4 x i8] c"%s\0A\00", align 1
|
||||
@.str.21 = private constant [11 x i8] c"mymodule.b\00", align 1
|
||||
@.str.22 = private constant [4 x i8] c"%s\0A\00", align 1
|
||||
@.str.23 = private constant [11 x i8] c"mymodule.b\00", align 1
|
||||
@.str.24 = private constant [4 x i8] c"%s\0A\00", align 1
|
||||
@.str.25 = private constant [2 x i8] c"a\00", align 1
|
||||
@.str.26 = private constant [4 x i8] c"%s\0A\00", align 1
|
||||
@.str.27 = private constant [2 x i8] c"a\00", align 1
|
||||
@.str.28 = private constant [4 x i8] c"%s\0A\00", align 1
|
||||
@.str.29 = private constant [2 x i8] c"a\00", align 1
|
||||
@.str.30 = private constant [4 x i8] c"%s\0A\00", align 1
|
||||
@.str.31 = private constant [2 x i8] c"a\00", align 1
|
||||
15
test/test_suite/compile_time_introspection/nameof_err.c3
Normal file
15
test/test_suite/compile_time_introspection/nameof_err.c3
Normal file
@@ -0,0 +1,15 @@
|
||||
func void main()
|
||||
{
|
||||
int a;
|
||||
$extnameof(a); // #error: 'a' does not have an external name.
|
||||
}
|
||||
func void main2()
|
||||
{
|
||||
int a;
|
||||
$extnameof("a"); // #error: 'a' does not have an external name.
|
||||
}
|
||||
|
||||
func void main3()
|
||||
{
|
||||
$extnameof("int"); // #error: Only user defined types have an external name.
|
||||
}
|
||||
Reference in New Issue
Block a user