Complete missing functionality with $nameof / $extnameof / $qnameof

This commit is contained in:
Christoffer Lerno
2021-08-22 17:25:29 +02:00
committed by Christoffer Lerno
parent 7c7ee58b6b
commit fdcc189f41
8 changed files with 144 additions and 12 deletions

View 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

View 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.
}