Created
December 14, 2017 21:04
-
-
Save anonymous/0a48808969600a84a683c03df57b5a29 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Targeting 'x86_64-unknown-linux-gnu' (CPU 'x86-64' with features '+cx16') | |
Building type: real | |
Building type: uint | |
Building type: ulong | |
CodeGenerator::emit(object) | |
* resetting 2028 Dsymbols | |
* *** Initializing D runtime declarations *** | |
* * building runtime module | |
* * Building type: extern (C) void(void*, void*) | |
* * * DtoFunctionType(extern (C) void(void*, void*)) | |
* * * * Building type: void | |
* * * * Building type: void* | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (i8*, i8*) | |
* * Building type: extern (C) void(void*, void*, uint) | |
* * * DtoFunctionType(extern (C) void(void*, void*, uint)) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (i8*, i8*, i32) | |
* * Building type: extern (C) void(char[], uint) | |
* * * DtoFunctionType(extern (C) void(char[], uint)) | |
* * * * Building type: char[] | |
* * * * * Building type: char | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void ({ i64, i8* }, i32) | |
* * Building type: extern (C) void(char[], char[], uint) | |
* * * DtoFunctionType(extern (C) void(char[], char[], uint)) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void ({ i64, i8* }, { i64, i8* }, i32) | |
* * Building type: extern (C) void(immutable ModuleInfo*, uint) | |
* * * DtoFunctionType(extern (C) void(immutable ModuleInfo*, uint)) | |
* * * * Building type: ModuleInfo* | |
* * * * * Building type: ModuleInfo | |
* * * * * * Building struct type object.ModuleInfo @ object.d(32) | |
* * * * * * * Field priority for _flags: 1 | |
* * * * * * * Field priority for _index: 1 | |
* * * * * * * final struct type: %object.ModuleInfo = type { i32, i32 } | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (%object.ModuleInfo*, i32) | |
* * Building type: extern (C) void*(ulong) | |
* * * DtoFunctionType(extern (C) void*(ulong)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i8* (i64) | |
* * Building type: extern (C) void*(TypeInfo) | |
* * * DtoFunctionType(extern (C) void*(TypeInfo)) | |
* * * * Building type: object.TypeInfo | |
* * * * * Building class type object.TypeInfo @ object.d(261) | |
* * * * * * Instance size: 16 | |
* * * * * * class type: %object.TypeInfo = type { [19 x i8*]*, i8* } | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i8* (%object.TypeInfo*) | |
* * Building type: extern (C) void[](const TypeInfo, ulong) | |
* * * DtoFunctionType(extern (C) void[](const TypeInfo, ulong)) | |
* * * * Building type: void[] | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo*, i64) | |
* * Building type: extern (C) void[](const TypeInfo, ulong[]) | |
* * * DtoFunctionType(extern (C) void[](const TypeInfo, ulong[])) | |
* * * * Building type: ulong[] | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo*, { i64, i64* }) | |
* * Building type: extern (C) void[](const TypeInfo, ulong, void[]*) | |
* * * DtoFunctionType(extern (C) void[](const TypeInfo, ulong, void[]*)) | |
* * * * Building type: void[]* | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo*, i64, { i64, i8* }*) | |
* * Building type: extern (C) void[](const TypeInfo, ref void[], ulong) | |
* * * DtoFunctionType(extern (C) void[](const TypeInfo, ref void[], ulong)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo*, { i64, i8* }*, i64) | |
* * Building type: extern (C) void[](const TypeInfo, ref void[], void[]) | |
* * * DtoFunctionType(extern (C) void[](const TypeInfo, ref void[], void[])) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo*, { i64, i8* }*, { i64, i8* }) | |
* * Building type: extern (C) void[](ref void[], dchar) | |
* * * DtoFunctionType(extern (C) void[](ref void[], dchar)) | |
* * * * Building type: dchar | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } ({ i64, i8* }*, i32) | |
* * Building type: extern (C) void[](const TypeInfo, void[], void[]) | |
* * * DtoFunctionType(extern (C) void[](const TypeInfo, void[], void[])) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo*, { i64, i8* }, { i64, i8* }) | |
* * Building type: extern (C) void[](const TypeInfo, void[][]) | |
* * * DtoFunctionType(extern (C) void[](const TypeInfo, void[][])) | |
* * * * Building type: void[][] | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo*, { i64, { i64, i8* }* }) | |
* * Building type: extern (C) Object(const TypeInfo_Class) | |
* * * DtoFunctionType(extern (C) Object(const TypeInfo_Class)) | |
* * * * Building type: object.Object | |
* * * * * Building class type object.Object @ object.d(186) | |
* * * * * * Instance size: 16 | |
* * * * * * class type: %object.Object = type { [5 x i8*]*, i8* } | |
* * * * Building type: object.TypeInfo_Class | |
* * * * * Building class type object.TypeInfo_Class @ object.d(373) | |
* * * * * * Instance size: 152 | |
* * * * * * Field priority for m_init: 1 | |
* * * * * * Field priority for name: 1 | |
* * * * * * Field priority for vtbl: 1 | |
* * * * * * Field priority for interfaces: 1 | |
* * * * * * Field priority for base: 1 | |
* * * * * * Field priority for destructor: 1 | |
* * * * * * Field priority for classInvariant: 1 | |
* * * * * * Field priority for m_flags: 1 | |
* * * * * * Field priority for deallocator: 1 | |
* * * * * * Field priority for m_offTi: 1 | |
* * * * * * Field priority for defaultConstructor: 1 | |
* * * * * * Field priority for m_RTInfo: 1 | |
* * * * * * Building type: byte[] | |
* * * * * * * Building type: byte | |
* * * * * * Building type: string | |
* * * * * * Building type: void*[] | |
* * * * * * Building type: Interface[] | |
* * * * * * * Building type: Interface | |
* * * * * * * * Building struct type object.Interface @ object.d(248) | |
* * * * * * * * * Field priority for classinfo: 1 | |
* * * * * * * * * Field priority for vtbl: 1 | |
* * * * * * * * * Field priority for offset: 1 | |
* * * * * * * * * final struct type: %object.Interface = type { %object.TypeInfo_Class*, { i64, i8** }, i64 } | |
* * * * * * Building type: void function(Object) | |
* * * * * * * Building type: void(Object) | |
* * * * * * * * DtoFunctionType(void(Object)) | |
* * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * Final function type: void (%object.Object*) | |
* * * * * * Building type: ClassFlags | |
* * * * * * Building type: ClassFlags | |
* * * * * * Building type: OffsetTypeInfo[] | |
* * * * * * * Building type: OffsetTypeInfo | |
* * * * * * * * Building struct type object.OffsetTypeInfo @ object.d(255) | |
* * * * * * * * * Field priority for offset: 1 | |
* * * * * * * * * Field priority for ti: 1 | |
* * * * * * * * * final struct type: %object.OffsetTypeInfo = type { i64, %object.TypeInfo* } | |
* * * * * * Building type: void function(Object) | |
* * * * * * * Building type: void(Object) | |
* * * * * * * * DtoFunctionType(void(Object)) | |
* * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * Final function type: void (%object.Object*) | |
* * * * * * Building type: immutable(void)* | |
* * * * * * class type: %object.TypeInfo_Class = type { [20 x i8*]*, i8*, { i64, i8* }, { i64, i8* }, { i64, i8** }, { i64, %object.Interface* }, %object.TypeInfo_Class*, i8*, void (%object.Object*)*, i32, [4 x i8], i8*, { i64, %object.OffsetTypeInfo* }, void (%object.Object*)*, i8* } | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: %object.Object* (%object.TypeInfo_Class*) | |
* * Building type: extern (C) Object(const TypeInfo_Class) | |
* * * DtoFunctionType(extern (C) Object(const TypeInfo_Class)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: %object.Object* (%object.TypeInfo_Class*) | |
* * Building type: extern (C) void*(TypeInfo) | |
* * * DtoFunctionType(extern (C) void*(TypeInfo)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i8* (%object.TypeInfo*) | |
* * Building type: extern (C) void(void[]*, const TypeInfo_Struct) | |
* * * DtoFunctionType(extern (C) void(void[]*, const TypeInfo_Struct)) | |
* * * * Building type: object.TypeInfo_Struct | |
* * * * * Building class type object.TypeInfo_Struct @ object.d(588) | |
* * * * * * Instance size: 136 | |
* * * * * * Field priority for name: 1 | |
* * * * * * Field priority for m_init: 1 | |
* * * * * * Field priority for xtoHash: 1 | |
* * * * * * Field priority for xopEquals: 1 | |
* * * * * * Field priority for xopCmp: 1 | |
* * * * * * Field priority for xtoString: 1 | |
* * * * * * Field priority for m_flags: 1 | |
* * * * * * Field priority for xdtor: 1 | |
* * * * * * Field priority for xdtorti: 1 | |
* * * * * * Field priority for xpostblit: 1 | |
* * * * * * Field priority for m_align: 1 | |
* * * * * * Field priority for m_arg1: 1 | |
* * * * * * Field priority for m_arg2: 1 | |
* * * * * * Field priority for m_RTInfo: 1 | |
* * * * * * Building type: void function(void*) | |
* * * * * * * Building type: void(void*) | |
* * * * * * * * DtoFunctionType(void(void*)) | |
* * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * Final function type: void (i8*) | |
* * * * * * Building type: void function(void*, const(TypeInfo_Struct) ti) | |
* * * * * * * Building type: void(void*, const(TypeInfo_Struct) ti) | |
* * * * * * * * DtoFunctionType(void(void*, const(TypeInfo_Struct) ti)) | |
* * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * Final function type: void (%object.TypeInfo_Struct*, i8*) | |
* * * * * * Building type: ulong function(const(void*)) pure nothrow @safe | |
* * * * * * * Building type: pure nothrow @safe ulong(const(void*)) | |
* * * * * * * * DtoFunctionType(pure nothrow @safe ulong(const(void*))) | |
* * * * * * * * * Building type: const(void)* | |
* * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * Final function type: i64 (i8*) | |
* * * * * * Building type: bool function(const(void*), const(void*)) pure nothrow @safe | |
* * * * * * * Building type: pure nothrow @safe bool(const(void*), const(void*)) | |
* * * * * * * * DtoFunctionType(pure nothrow @safe bool(const(void*), const(void*))) | |
* * * * * * * * * Building type: bool | |
* * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * Final function type: i1 (i8*, i8*) | |
* * * * * * Building type: int function(const(void*), const(void*)) pure nothrow @safe | |
* * * * * * * Building type: pure nothrow @safe int(const(void*), const(void*)) | |
* * * * * * * * DtoFunctionType(pure nothrow @safe int(const(void*), const(void*))) | |
* * * * * * * * * Building type: int | |
* * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * Final function type: i32 (i8*, i8*) | |
* * * * * * Building type: string function(const(void*)) pure nothrow @safe | |
* * * * * * * Building type: pure nothrow @safe string(const(void*)) | |
* * * * * * * * DtoFunctionType(pure nothrow @safe string(const(void*))) | |
* * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * Final function type: { i64, i8* } (i8*) | |
* * * * * * Building type: StructFlags | |
* * * * * * Building type: StructFlags | |
* * * * * * Building type: void function(void*) | |
* * * * * * * Building type: void(void*) | |
* * * * * * * * DtoFunctionType(void(void*)) | |
* * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * Final function type: void (i8*) | |
* * * * * * class type: %object.TypeInfo_Struct = type { [19 x i8*]*, i8*, { i64, i8* }, { i64, i8* }, i64 (i8*)*, i1 (i8*, i8*)*, i32 (i8*, i8*)*, { i64, i8* } (i8*)*, i32, [4 x i8], void (i8*)*, void (i8*)*, i32, [4 x i8], %object.TypeInfo*, %object.TypeInfo*, i8* } | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void ({ i64, i8* }*, %object.TypeInfo_Struct*) | |
* * Building type: extern (C) void(void**) | |
* * * DtoFunctionType(extern (C) void(void**)) | |
* * * * Building type: void** | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (i8**) | |
* * Building type: extern (C) void(void*) | |
* * * DtoFunctionType(extern (C) void(void*)) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (i8*) | |
* * Building type: extern (C) void(Object*) | |
* * * DtoFunctionType(extern (C) void(Object*)) | |
* * * * Building type: Object* | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (%object.Object**) | |
* * Building type: extern (C) void(void**, TypeInfo_Struct) | |
* * * DtoFunctionType(extern (C) void(void**, TypeInfo_Struct)) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (i8**, %object.TypeInfo_Struct*) | |
* * Building type: extern (C) void(void*, ulong, void*, ulong) | |
* * * DtoFunctionType(extern (C) void(void*, ulong, void*, ulong)) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (i8*, i64, i8*, i64) | |
* * Building type: extern (C) ulong(char[], int delegate(void*)) | |
* * * DtoFunctionType(extern (C) ulong(char[], int delegate(void*))) | |
* * * * Building type: int delegate(void*) | |
* * * * * DtoFunctionType(int(void*)) | |
* * * * * * x86-64 ABI: Transforming return type | |
* * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * Final function type: i32 (i8*, i8*) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 ({ i64, i8* }, { i8*, i32 (i8*, i8*)* }) | |
* * Building type: extern (C) ulong(wchar[], int delegate(void*)) | |
* * * DtoFunctionType(extern (C) ulong(wchar[], int delegate(void*))) | |
* * * * Building type: wchar[] | |
* * * * * Building type: wchar | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 ({ i64, i16* }, { i8*, i32 (i8*, i8*)* }) | |
* * Building type: extern (C) ulong(dchar[], int delegate(void*)) | |
* * * DtoFunctionType(extern (C) ulong(dchar[], int delegate(void*))) | |
* * * * Building type: dchar[] | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 ({ i64, i32* }, { i8*, i32 (i8*, i8*)* }) | |
* * Building type: extern (C) ulong(char[], int delegate(void*, void*)) | |
* * * DtoFunctionType(extern (C) ulong(char[], int delegate(void*, void*))) | |
* * * * Building type: int delegate(void*, void*) | |
* * * * * DtoFunctionType(int(void*, void*)) | |
* * * * * * x86-64 ABI: Transforming return type | |
* * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * Final function type: i32 (i8*, i8*, i8*) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 ({ i64, i8* }, { i8*, i32 (i8*, i8*, i8*)* }) | |
* * Building type: extern (C) ulong(wchar[], int delegate(void*, void*)) | |
* * * DtoFunctionType(extern (C) ulong(wchar[], int delegate(void*, void*))) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 ({ i64, i16* }, { i8*, i32 (i8*, i8*, i8*)* }) | |
* * Building type: extern (C) ulong(dchar[], int delegate(void*, void*)) | |
* * * DtoFunctionType(extern (C) ulong(dchar[], int delegate(void*, void*))) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 ({ i64, i32* }, { i8*, i32 (i8*, i8*, i8*)* }) | |
* * Building type: extern (C) ulong(ulong, ulong, ulong) | |
* * * DtoFunctionType(extern (C) ulong(ulong, ulong, ulong)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (i64, i64, i64) | |
* * Building type: extern (C) void[](TypeInfo, void[], void[], void*) | |
* * * DtoFunctionType(extern (C) void[](TypeInfo, void[], void[], void*)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo*, { i64, i8* }, { i64, i8* }, i8*) | |
* * Building type: extern (C) void[](TypeInfo, void[], void[]) | |
* * * DtoFunctionType(extern (C) void[](TypeInfo, void[], void[])) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo*, { i64, i8* }, { i64, i8* }) | |
* * Building type: extern (C) void*(void*, void*, int, TypeInfo) | |
* * * DtoFunctionType(extern (C) void*(void*, void*, int, TypeInfo)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i8* (i8*, i8*, i32, %object.TypeInfo*) | |
* * Building type: extern (C) void*(void*, TypeInfo_Class) | |
* * * DtoFunctionType(extern (C) void*(void*, TypeInfo_Class)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i8* (i8*, %object.TypeInfo_Class*) | |
* * Building type: extern (C) void*(Object, TypeInfo_Class) | |
* * * DtoFunctionType(extern (C) void*(Object, TypeInfo_Class)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i8* (%object.Object*, %object.TypeInfo_Class*) | |
* * Building type: extern (C) char[](char[]) | |
* * * DtoFunctionType(extern (C) char[](char[])) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } ({ i64, i8* }) | |
* * Building type: extern (C) wchar[](wchar[]) | |
* * * DtoFunctionType(extern (C) wchar[](wchar[])) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i16* } ({ i64, i16* }) | |
* * Building type: extern (C) wchar[](void[], ulong) | |
* * * DtoFunctionType(extern (C) wchar[](void[], ulong)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i16* } ({ i64, i8* }, i64) | |
* * Building type: extern (C) int(void[], void[], TypeInfo) | |
* * * DtoFunctionType(extern (C) int(void[], void[], TypeInfo)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 ({ i64, i8* }, { i64, i8* }, %object.TypeInfo*) | |
* * Building type: extern (C) int(void[], void[]) | |
* * * DtoFunctionType(extern (C) int(void[], void[])) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 ({ i64, i8* }, { i64, i8* }) | |
* * Building type: extern (C) void[](void[], TypeInfo) | |
* * * DtoFunctionType(extern (C) void[](void[], TypeInfo)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } ({ i64, i8* }, %object.TypeInfo*) | |
* * Building type: extern (C) ulong(in void*) | |
* * * DtoFunctionType(extern (C) ulong(in void*)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (i8*) | |
* * Building type: extern (C) void*(void**, const TypeInfo_AssociativeArray, in ulong, in void*) | |
* * * DtoFunctionType(extern (C) void*(void**, const TypeInfo_AssociativeArray, in ulong, in void*)) | |
* * * * Building type: object.TypeInfo_AssociativeArray | |
* * * * * Building class type object.TypeInfo_AssociativeArray @ object.d(475) | |
* * * * * * Instance size: 32 | |
* * * * * * Field priority for value: 1 | |
* * * * * * Field priority for key: 1 | |
* * * * * * class type: %object.TypeInfo_AssociativeArray = type { [19 x i8*]*, i8*, %object.TypeInfo*, %object.TypeInfo* } | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i8* (i8**, %object.TypeInfo_AssociativeArray*, i64, i8*) | |
* * Building type: extern (C) void*(out void*, in TypeInfo, in void*) | |
* * * DtoFunctionType(extern (C) void*(out void*, in TypeInfo, in void*)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i8* (i8**, %object.TypeInfo*, i8*) | |
* * Building type: extern (C) bool(void*, in TypeInfo, in void*) | |
* * * DtoFunctionType(extern (C) bool(void*, in TypeInfo, in void*)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i1 (i8*, %object.TypeInfo*, i8*) | |
* * Building type: extern (C) void[](out void*, in ulong, in ulong, const TypeInfo) | |
* * * DtoFunctionType(extern (C) void[](out void*, in ulong, in ulong, const TypeInfo)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (i8**, i64, i64, %object.TypeInfo*) | |
* * Building type: extern (C) void*(void**, in TypeInfo) | |
* * * DtoFunctionType(extern (C) void*(void**, in TypeInfo)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i8* (i8**, %object.TypeInfo*) | |
* * Building type: extern (C) void[](out void*, in ulong, const TypeInfo) | |
* * * DtoFunctionType(extern (C) void[](out void*, in ulong, const TypeInfo)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (i8**, i64, %object.TypeInfo*) | |
* * Building type: extern (C) int(void*, in ulong, int delegate(void*)) | |
* * * DtoFunctionType(extern (C) int(void*, in ulong, int delegate(void*))) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (i8*, i64, { i8*, i32 (i8*, i8*)* }) | |
* * Building type: extern (C) int(void*, in ulong, int delegate(void*, void*)) | |
* * * DtoFunctionType(extern (C) int(void*, in ulong, int delegate(void*, void*))) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (i8*, i64, { i8*, i32 (i8*, i8*, i8*)* }) | |
* * Building type: extern (C) int(in TypeInfo, in void*, in void*) | |
* * * DtoFunctionType(extern (C) int(in TypeInfo, in void*, in void*)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo*, i8*, i8*) | |
* * Building type: extern (C) void*(const TypeInfo_AssociativeArray, void[], void[]) | |
* * * DtoFunctionType(extern (C) void*(const TypeInfo_AssociativeArray, void[], void[])) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i8* (%object.TypeInfo_AssociativeArray*, { i64, i8* }, { i64, i8* }) | |
* * Building type: extern (C) void() | |
* * * DtoFunctionType(extern (C) void()) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void () | |
* * Building type: extern (C) void(Throwable) | |
* * * DtoFunctionType(extern (C) void(Throwable)) | |
* * * * Building type: object.Throwable | |
* * * * * Building class type object.Throwable @ object.d(1369) | |
* * * * * * Instance size: 72 | |
* * * * * * Field priority for msg: 1 | |
* * * * * * Field priority for file: 1 | |
* * * * * * Field priority for line: 1 | |
* * * * * * Field priority for info: 1 | |
* * * * * * Field priority for next: 1 | |
* * * * * * Building type: object.Throwable.TraceInfo | |
* * * * * * * Building class type object.Throwable.TraceInfo @ object.d(1411) | |
* * * * * * * * Instance size: 8 | |
* * * * * * * * class type: %object.Throwable.TraceInfo = type { [4 x i8*]* } | |
* * * * * * class type: %object.Throwable = type { [6 x i8*]*, i8*, { i64, i8* }, { i64, i8* }, i64, %object.Throwable.TraceInfo*, %object.Throwable* } | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (%object.Throwable*) | |
* * Building type: extern (C) int(char[][], char[]) | |
* * * DtoFunctionType(extern (C) int(char[][], char[])) | |
* * * * Building type: char[][] | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 ({ i64, { i64, i8* }* }, { i64, i8* }) | |
* * Building type: extern (C) int(wchar[][], wchar[]) | |
* * * DtoFunctionType(extern (C) int(wchar[][], wchar[])) | |
* * * * Building type: wchar[][] | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 ({ i64, { i64, i16* }* }, { i64, i16* }) | |
* * Building type: extern (C) int(dchar[][], dchar[]) | |
* * * DtoFunctionType(extern (C) int(dchar[][], dchar[])) | |
* * * * Building type: dchar[][] | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 ({ i64, { i64, i32* }* }, { i64, i32* }) | |
* * Building type: extern (C) int(int, int, ulong, void*, void*) | |
* * * DtoFunctionType(extern (C) int(int, int, ulong, void*, void*)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (i32, i32, i64, i8*, i8*) | |
* * Building type: extern (C) void(void*) | |
* * * DtoFunctionType(extern (C) void(void*)) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (i8*) | |
* * Building type: extern (C) Throwable(void*) | |
* * * DtoFunctionType(extern (C) Throwable(void*)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: %object.Throwable* (i8*) | |
* * Building type: extern (C) void*(void*) | |
* * * DtoFunctionType(extern (C) void*(void*)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i8* (i8*) | |
* * Building type: void(Object) | |
* * * DtoFunctionType(void(Object)) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (%object.Object*) | |
* * Building type: extern (C) void(void*) | |
* * * DtoFunctionType(extern (C) void(void*)) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (i8*) | |
* * Building type: extern (C) int(void*, void*, ulong) | |
* * * DtoFunctionType(extern (C) int(void*, void*, ulong)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (i8*, i8*, i64) | |
* Ignoring Dsymbol::codegen for object.object | |
* Ignoring Dsymbol::codegen for object.utils | |
* Ignoring Dsymbol::codegen for object.string | |
* Ignoring Dsymbol::codegen for object.size_t | |
* Ignoring Dsymbol::codegen for object.hash_t | |
* Ignoring EnumDeclaration::codegen: 'object.__anonymous' | |
* StructDeclaration::codegen: 'object.ModuleInfo' | |
* * Resolving struct type: ModuleInfo (object.d(32)) | |
* * VarDeclaration::codegen(): 'object.ModuleInfo._flags' | |
* * * DtoResolveVariable(object.ModuleInfo._flags) | |
* * VarDeclaration::codegen(): 'object.ModuleInfo._index' | |
* * * DtoResolveVariable(object.ModuleInfo._index) | |
* * DtoDefineFunction(object.ModuleInfo.this): object.d(36) | |
* * * isMember = this is: ModuleInfo | |
* * * DtoFunctionType(ref ModuleInfo()) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: %object.ModuleInfo* (%object.ModuleInfo*) | |
* * * DtoResolveFunction(object.ModuleInfo.this): object.d(36) | |
* * * * DtoDeclareFunction(object.ModuleInfo.this): object.d(36) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: ModuleInfo | |
* * * * * DtoFunctionType(ref ModuleInfo()) | |
* * * * * func = | |
declare %object.ModuleInfo* @_D6object10ModuleInfo6__ctorMFNcZSQBgQBc(%object.ModuleInfo*) | |
* * DtoDefineFunction(object.ModuleInfo.__postblit): object.d(37) | |
* * * isMember = this is: ModuleInfo | |
* * * DtoFunctionType(const void()) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (%object.ModuleInfo*) | |
* * * DtoResolveFunction(object.ModuleInfo.__postblit): object.d(37) | |
* * * * DtoDeclareFunction(object.ModuleInfo.__postblit): object.d(37) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: ModuleInfo | |
* * * * * DtoFunctionType(const void()) | |
* * * * * func = | |
declare void @_D6object10ModuleInfo10__postblitMxFZv(%object.ModuleInfo*) | |
* * DtoDefineFunction(object.ModuleInfo.addrOf): object.d(40) | |
* * * isMember = this is: ModuleInfo | |
* * * DtoFunctionType(const pure nothrow void*(int flag)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i8* (%object.ModuleInfo*, i32) | |
* * * DtoResolveFunction(object.ModuleInfo.addrOf): object.d(40) | |
* * * * DtoDeclareFunction(object.ModuleInfo.addrOf): object.d(40) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: ModuleInfo | |
* * * * * DtoFunctionType(const pure nothrow void*(int flag)) | |
* * * * * func = | |
declare i8* @_D6object10ModuleInfo6addrOfMxFNaNbiZPv(%object.ModuleInfo*, i32) | |
* * * Doing function body for: addrOf | |
* * * DtoCreateNestedContext for object.ModuleInfo.addrOf | |
* * * * DtoCreateNestedContextType for object.ModuleInfo.addrOf | |
* * * CompoundStatement::toIR(): | |
* * * * ScopeStatement::toIR(): object.d(41) | |
* * * * * CompoundStatement::toIR(): object.d(41) | |
* * * * * * ExpStatement::toIR(): object.d(42) | |
* * * * * * * AssertExp::toElem: assert(flag >= 8 && flag <= 4096) | |
* * * * * * * * LogicalExp::toElem: flag >= 8 && flag <= 4096 @ bool | |
* * * * * * * * * CmpExp::toElem: flag >= 8 @ bool | |
* * * * * * * * * * VarExp::toElem: flag @ int | |
* * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int') | |
* * * * * * * * * * * * function param | |
* * * * * * * * * * * * type: int | |
* * * * * * * * * * IntegerExp::toElem: 8 @ int | |
* * * * * * * * * * * IntegerExp::toConstElem: 8 @ int | |
* * * * * * * * * * * * value = i32 8 | |
* * * * * * * * * * type 1: %5 = load i32, i32* %3 | |
* * * * * * * * * * type 2: i32 8 | |
* * * * * * * * * CmpExp::toElem: flag <= 4096 @ bool | |
* * * * * * * * * * VarExp::toElem: flag @ int | |
* * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int') | |
* * * * * * * * * * * * function param | |
* * * * * * * * * * * * type: int | |
* * * * * * * * * * IntegerExp::toElem: 4096 @ int | |
* * * * * * * * * * * IntegerExp::toConstElem: 4096 @ int | |
* * * * * * * * * * * * value = i32 4096 | |
* * * * * * * * * * type 1: %8 = load i32, i32* %3 | |
* * * * * * * * * * type 2: i32 4096 | |
* * * * * * ExpStatement::toIR(): object.d(43) | |
* * * * * * * AssertExp::toElem: assert(!(flag & flag - 1) && !(flag & ~(flag - 1) << 1)) | |
* * * * * * * * LogicalExp::toElem: !(flag & flag - 1) && !(flag & ~(flag - 1) << 1) @ bool | |
* * * * * * * * * NotExp::toElem: !(flag & flag - 1) @ bool | |
* * * * * * * * * * AndExp::toElem: flag & flag - 1 @ int | |
* * * * * * * * * * * VarExp::toElem: flag @ int | |
* * * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int') | |
* * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * type: int | |
* * * * * * * * * * * MinExp::toElem: flag - 1 @ int | |
* * * * * * * * * * * * VarExp::toElem: flag @ int | |
* * * * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int') | |
* * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * type: int | |
* * * * * * * * * * * * IntegerExp::toElem: 1 @ int | |
* * * * * * * * * * * * * IntegerExp::toConstElem: 1 @ int | |
* * * * * * * * * * * * * * value = i32 1 | |
* * * * * * * * * * Casting from 'int' to 'bool' | |
* * * * * * * * * NotExp::toElem: !(flag & ~(flag - 1) << 1) @ bool | |
* * * * * * * * * * AndExp::toElem: flag & ~(flag - 1) << 1 @ int | |
* * * * * * * * * * * VarExp::toElem: flag @ int | |
* * * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int') | |
* * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * type: int | |
* * * * * * * * * * * ShlExp::toElem: ~(flag - 1) << 1 @ int | |
* * * * * * * * * * * * ComExp::toElem: ~(flag - 1) @ int | |
* * * * * * * * * * * * * MinExp::toElem: flag - 1 @ int | |
* * * * * * * * * * * * * * VarExp::toElem: flag @ int | |
* * * * * * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int') | |
* * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * type: int | |
* * * * * * * * * * * * * * IntegerExp::toElem: 1 @ int | |
* * * * * * * * * * * * * * * IntegerExp::toConstElem: 1 @ int | |
* * * * * * * * * * * * * * * * value = i32 1 | |
* * * * * * * * * * * * IntegerExp::toElem: 1 @ int | |
* * * * * * * * * * * * * IntegerExp::toConstElem: 1 @ int | |
* * * * * * * * * * * * * * value = i32 1 | |
* * * * * * * * * * Casting from 'int' to 'bool' | |
* * * * CompoundStatement::toIR(): object.d(45) | |
* * * * * ExpStatement::toIR(): object.d(46) | |
* * * * * * DeclarationExp::toElem: (void* p = cast(void*)&this + 8L;) | T=void | |
* * * * * * * DtoDeclarationExp: p | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = void*) | |
* * * * * * * * * llvm value for decl: %4 = alloca i8*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: p = cast(void*)&this + 8L | (void*)(void* = void*) | |
* * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * AddExp::toElem: cast(void*)&this + 8L @ void* | |
* * * * * * * * * * * CastExp::toElem: cast(void*)&this @ void* | |
* * * * * * * * * * * * AddrExp::toElem: &this @ const(ModuleInfo)* | |
* * * * * * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * * is nothing special | |
* * * * * * * * * * * * * lval: %object.ModuleInfo* %0 | |
* * * * * * * * * * * * * Building type: const(ModuleInfo)* | |
* * * * * * * * * * * * Casting from 'const(ModuleInfo)*' to 'void*' | |
* * * * * * * * * * * * * src: %object.ModuleInfo* %0 | |
* * * * * * * * * * * * * to type: i8* | |
* * * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %4 = alloca i8*, align 8 | |
* * * * * * * * * * * rhs: %33 = getelementptr i8, i8* %32, i64 8 | |
* * * * * IfStatement::toIR(): object.d(48) | |
* * * * * * AndExp::toElem: this.flags() & 8u @ uint | |
* * * * * * * CallExp::toElem: this.flags() @ uint | |
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint() | |
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * * isMember = this is: ModuleInfo | |
* * * * * * * * * DtoFunctionType(const pure nothrow @property uint()) | |
* * * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * Final function type: i32 (%object.ModuleInfo*) | |
* * * * * * * * * DtoResolveFunction(object.ModuleInfo.flags): object.d(106) | |
* * * * * * * * * * DtoDeclareFunction(object.ModuleInfo.flags): object.d(106) | |
* * * * * * * * * * * Enter defineAsExternallyAvailable | |
* * * * * * * * * * * * Cross-module inlining fully disabled. | |
* * * * * * * * * * * isMember = this is: ModuleInfo | |
* * * * * * * * * * * DtoFunctionType(const pure nothrow @property uint()) | |
* * * * * * * * * * * func = | |
declare i32 @_D6object10ModuleInfo5flagsMxFNaNbNdZk(%object.ModuleInfo*) | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * Building type: const pure nothrow @property uint() | |
* * * * * * * * * * DtoFunctionType(const pure nothrow @property uint()) | |
* * * * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * * Final function type: i32 () | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * Function type: const pure nothrow @property uint() | |
* * * * * * * IntegerExp::toElem: 8u @ uint | |
* * * * * * * * IntegerExp::toConstElem: 8u @ uint | |
* * * * * * * * * value = i32 8 | |
* * * * * * if conditional: %35 = and i32 %34, 8 | |
* * * * * * Casting from 'uint' to 'bool' | |
* * * * * * ScopeStatement::toIR(): object.d(48) | |
* * * * * * * CompoundStatement::toIR(): object.d(48) | |
* * * * * * * * IfStatement::toIR(): object.d(49) | |
* * * * * * * * * EqualExp::toElem: flag == 8 @ bool | |
* * * * * * * * * * VarExp::toElem: flag @ int | |
* * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int') | |
* * * * * * * * * * * * function param | |
* * * * * * * * * * * * type: int | |
* * * * * * * * * * IntegerExp::toElem: 8 @ int | |
* * * * * * * * * * * IntegerExp::toConstElem: 8 @ int | |
* * * * * * * * * * * * value = i32 8 | |
* * * * * * * * * * integral or pointer or interface | |
* * * * * * * * * * lv: %38 = load i32, i32* %3 | |
* * * * * * * * * * rv: i32 8 | |
* * * * * * * * * ReturnStatement::toIR(): object.d(50) | |
* * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * ExpStatement::toIR(): object.d(51) | |
* * * * * * * * * AddAssignExp::toElem: p += 8L @ void* | |
* * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %4 = alloca i8*, align 8 | |
* * * * * * * * * * * rhs: %46 = getelementptr i8, i8* %45, i64 8 | |
* * * * * IfStatement::toIR(): object.d(53) | |
* * * * * * AndExp::toElem: this.flags() & 16u @ uint | |
* * * * * * * CallExp::toElem: this.flags() @ uint | |
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint() | |
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * Function type: const pure nothrow @property uint() | |
* * * * * * * IntegerExp::toElem: 16u @ uint | |
* * * * * * * * IntegerExp::toConstElem: 16u @ uint | |
* * * * * * * * * value = i32 16 | |
* * * * * * if conditional: %49 = and i32 %48, 16 | |
* * * * * * Casting from 'uint' to 'bool' | |
* * * * * * ScopeStatement::toIR(): object.d(53) | |
* * * * * * * CompoundStatement::toIR(): object.d(53) | |
* * * * * * * * IfStatement::toIR(): object.d(54) | |
* * * * * * * * * EqualExp::toElem: flag == 16 @ bool | |
* * * * * * * * * * VarExp::toElem: flag @ int | |
* * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int') | |
* * * * * * * * * * * * function param | |
* * * * * * * * * * * * type: int | |
* * * * * * * * * * IntegerExp::toElem: 16 @ int | |
* * * * * * * * * * * IntegerExp::toConstElem: 16 @ int | |
* * * * * * * * * * * * value = i32 16 | |
* * * * * * * * * * integral or pointer or interface | |
* * * * * * * * * * lv: %52 = load i32, i32* %3 | |
* * * * * * * * * * rv: i32 16 | |
* * * * * * * * * ReturnStatement::toIR(): object.d(55) | |
* * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * ExpStatement::toIR(): object.d(56) | |
* * * * * * * * * AddAssignExp::toElem: p += 8L @ void* | |
* * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %4 = alloca i8*, align 8 | |
* * * * * * * * * * * rhs: %60 = getelementptr i8, i8* %59, i64 8 | |
* * * * * IfStatement::toIR(): object.d(58) | |
* * * * * * AndExp::toElem: this.flags() & 32u @ uint | |
* * * * * * * CallExp::toElem: this.flags() @ uint | |
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint() | |
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * Function type: const pure nothrow @property uint() | |
* * * * * * * IntegerExp::toElem: 32u @ uint | |
* * * * * * * * IntegerExp::toConstElem: 32u @ uint | |
* * * * * * * * * value = i32 32 | |
* * * * * * if conditional: %63 = and i32 %62, 32 | |
* * * * * * Casting from 'uint' to 'bool' | |
* * * * * * ScopeStatement::toIR(): object.d(58) | |
* * * * * * * CompoundStatement::toIR(): object.d(58) | |
* * * * * * * * IfStatement::toIR(): object.d(59) | |
* * * * * * * * * EqualExp::toElem: flag == 32 @ bool | |
* * * * * * * * * * VarExp::toElem: flag @ int | |
* * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int') | |
* * * * * * * * * * * * function param | |
* * * * * * * * * * * * type: int | |
* * * * * * * * * * IntegerExp::toElem: 32 @ int | |
* * * * * * * * * * * IntegerExp::toConstElem: 32 @ int | |
* * * * * * * * * * * * value = i32 32 | |
* * * * * * * * * * integral or pointer or interface | |
* * * * * * * * * * lv: %66 = load i32, i32* %3 | |
* * * * * * * * * * rv: i32 32 | |
* * * * * * * * * ReturnStatement::toIR(): object.d(60) | |
* * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * ExpStatement::toIR(): object.d(61) | |
* * * * * * * * * AddAssignExp::toElem: p += 8L @ void* | |
* * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %4 = alloca i8*, align 8 | |
* * * * * * * * * * * rhs: %74 = getelementptr i8, i8* %73, i64 8 | |
* * * * * IfStatement::toIR(): object.d(63) | |
* * * * * * AndExp::toElem: this.flags() & 64u @ uint | |
* * * * * * * CallExp::toElem: this.flags() @ uint | |
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint() | |
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * Function type: const pure nothrow @property uint() | |
* * * * * * * IntegerExp::toElem: 64u @ uint | |
* * * * * * * * IntegerExp::toConstElem: 64u @ uint | |
* * * * * * * * * value = i32 64 | |
* * * * * * if conditional: %77 = and i32 %76, 64 | |
* * * * * * Casting from 'uint' to 'bool' | |
* * * * * * ScopeStatement::toIR(): object.d(63) | |
* * * * * * * CompoundStatement::toIR(): object.d(63) | |
* * * * * * * * IfStatement::toIR(): object.d(64) | |
* * * * * * * * * EqualExp::toElem: flag == 64 @ bool | |
* * * * * * * * * * VarExp::toElem: flag @ int | |
* * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int') | |
* * * * * * * * * * * * function param | |
* * * * * * * * * * * * type: int | |
* * * * * * * * * * IntegerExp::toElem: 64 @ int | |
* * * * * * * * * * * IntegerExp::toConstElem: 64 @ int | |
* * * * * * * * * * * * value = i32 64 | |
* * * * * * * * * * integral or pointer or interface | |
* * * * * * * * * * lv: %80 = load i32, i32* %3 | |
* * * * * * * * * * rv: i32 64 | |
* * * * * * * * * ReturnStatement::toIR(): object.d(65) | |
* * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * ExpStatement::toIR(): object.d(66) | |
* * * * * * * * * AddAssignExp::toElem: p += 8L @ void* | |
* * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %4 = alloca i8*, align 8 | |
* * * * * * * * * * * rhs: %88 = getelementptr i8, i8* %87, i64 8 | |
* * * * * IfStatement::toIR(): object.d(68) | |
* * * * * * AndExp::toElem: this.flags() & 128u @ uint | |
* * * * * * * CallExp::toElem: this.flags() @ uint | |
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint() | |
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * Function type: const pure nothrow @property uint() | |
* * * * * * * IntegerExp::toElem: 128u @ uint | |
* * * * * * * * IntegerExp::toConstElem: 128u @ uint | |
* * * * * * * * * value = i32 128 | |
* * * * * * if conditional: %91 = and i32 %90, 128 | |
* * * * * * Casting from 'uint' to 'bool' | |
* * * * * * ScopeStatement::toIR(): object.d(68) | |
* * * * * * * CompoundStatement::toIR(): object.d(68) | |
* * * * * * * * IfStatement::toIR(): object.d(69) | |
* * * * * * * * * EqualExp::toElem: flag == 128 @ bool | |
* * * * * * * * * * VarExp::toElem: flag @ int | |
* * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int') | |
* * * * * * * * * * * * function param | |
* * * * * * * * * * * * type: int | |
* * * * * * * * * * IntegerExp::toElem: 128 @ int | |
* * * * * * * * * * * IntegerExp::toConstElem: 128 @ int | |
* * * * * * * * * * * * value = i32 128 | |
* * * * * * * * * * integral or pointer or interface | |
* * * * * * * * * * lv: %94 = load i32, i32* %3 | |
* * * * * * * * * * rv: i32 128 | |
* * * * * * * * * ReturnStatement::toIR(): object.d(70) | |
* * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * ExpStatement::toIR(): object.d(71) | |
* * * * * * * * * AddAssignExp::toElem: p += 8L @ void* | |
* * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %4 = alloca i8*, align 8 | |
* * * * * * * * * * * rhs: %102 = getelementptr i8, i8* %101, i64 8 | |
* * * * * IfStatement::toIR(): object.d(73) | |
* * * * * * AndExp::toElem: this.flags() & 256u @ uint | |
* * * * * * * CallExp::toElem: this.flags() @ uint | |
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint() | |
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * Function type: const pure nothrow @property uint() | |
* * * * * * * IntegerExp::toElem: 256u @ uint | |
* * * * * * * * IntegerExp::toConstElem: 256u @ uint | |
* * * * * * * * * value = i32 256 | |
* * * * * * if conditional: %105 = and i32 %104, 256 | |
* * * * * * Casting from 'uint' to 'bool' | |
* * * * * * ScopeStatement::toIR(): object.d(73) | |
* * * * * * * CompoundStatement::toIR(): object.d(73) | |
* * * * * * * * IfStatement::toIR(): object.d(74) | |
* * * * * * * * * EqualExp::toElem: flag == 256 @ bool | |
* * * * * * * * * * VarExp::toElem: flag @ int | |
* * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int') | |
* * * * * * * * * * * * function param | |
* * * * * * * * * * * * type: int | |
* * * * * * * * * * IntegerExp::toElem: 256 @ int | |
* * * * * * * * * * * IntegerExp::toConstElem: 256 @ int | |
* * * * * * * * * * * * value = i32 256 | |
* * * * * * * * * * integral or pointer or interface | |
* * * * * * * * * * lv: %108 = load i32, i32* %3 | |
* * * * * * * * * * rv: i32 256 | |
* * * * * * * * * ReturnStatement::toIR(): object.d(75) | |
* * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * ExpStatement::toIR(): object.d(76) | |
* * * * * * * * * AddAssignExp::toElem: p += 8L @ void* | |
* * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %4 = alloca i8*, align 8 | |
* * * * * * * * * * * rhs: %116 = getelementptr i8, i8* %115, i64 8 | |
* * * * * IfStatement::toIR(): object.d(78) | |
* * * * * * AndExp::toElem: this.flags() & 512u @ uint | |
* * * * * * * CallExp::toElem: this.flags() @ uint | |
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint() | |
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * Function type: const pure nothrow @property uint() | |
* * * * * * * IntegerExp::toElem: 512u @ uint | |
* * * * * * * * IntegerExp::toConstElem: 512u @ uint | |
* * * * * * * * * value = i32 512 | |
* * * * * * if conditional: %119 = and i32 %118, 512 | |
* * * * * * Casting from 'uint' to 'bool' | |
* * * * * * ScopeStatement::toIR(): object.d(78) | |
* * * * * * * CompoundStatement::toIR(): object.d(78) | |
* * * * * * * * IfStatement::toIR(): object.d(79) | |
* * * * * * * * * EqualExp::toElem: flag == 512 @ bool | |
* * * * * * * * * * VarExp::toElem: flag @ int | |
* * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int') | |
* * * * * * * * * * * * function param | |
* * * * * * * * * * * * type: int | |
* * * * * * * * * * IntegerExp::toElem: 512 @ int | |
* * * * * * * * * * * IntegerExp::toConstElem: 512 @ int | |
* * * * * * * * * * * * value = i32 512 | |
* * * * * * * * * * integral or pointer or interface | |
* * * * * * * * * * lv: %122 = load i32, i32* %3 | |
* * * * * * * * * * rv: i32 512 | |
* * * * * * * * * ReturnStatement::toIR(): object.d(80) | |
* * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * ExpStatement::toIR(): object.d(81) | |
* * * * * * * * * AddAssignExp::toElem: p += 8L @ void* | |
* * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %4 = alloca i8*, align 8 | |
* * * * * * * * * * * rhs: %130 = getelementptr i8, i8* %129, i64 8 | |
* * * * * IfStatement::toIR(): object.d(83) | |
* * * * * * AndExp::toElem: this.flags() & 1024u @ uint | |
* * * * * * * CallExp::toElem: this.flags() @ uint | |
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint() | |
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * Function type: const pure nothrow @property uint() | |
* * * * * * * IntegerExp::toElem: 1024u @ uint | |
* * * * * * * * IntegerExp::toConstElem: 1024u @ uint | |
* * * * * * * * * value = i32 1024 | |
* * * * * * if conditional: %133 = and i32 %132, 1024 | |
* * * * * * Casting from 'uint' to 'bool' | |
* * * * * * ScopeStatement::toIR(): object.d(83) | |
* * * * * * * CompoundStatement::toIR(): object.d(83) | |
* * * * * * * * IfStatement::toIR(): object.d(84) | |
* * * * * * * * * EqualExp::toElem: flag == 1024 @ bool | |
* * * * * * * * * * VarExp::toElem: flag @ int | |
* * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int') | |
* * * * * * * * * * * * function param | |
* * * * * * * * * * * * type: int | |
* * * * * * * * * * IntegerExp::toElem: 1024 @ int | |
* * * * * * * * * * * IntegerExp::toConstElem: 1024 @ int | |
* * * * * * * * * * * * value = i32 1024 | |
* * * * * * * * * * integral or pointer or interface | |
* * * * * * * * * * lv: %136 = load i32, i32* %3 | |
* * * * * * * * * * rv: i32 1024 | |
* * * * * * * * * ReturnStatement::toIR(): object.d(85) | |
* * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * ExpStatement::toIR(): object.d(86) | |
* * * * * * * * * AddAssignExp::toElem: p += cast(long)(8LU + *cast(ulong*)p * 8LU) * 1L @ void* | |
* * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * CastExp::toElem: cast(long)(8LU + *cast(ulong*)p * 8LU) @ long | |
* * * * * * * * * * * AddExp::toElem: 8LU + *cast(ulong*)p * 8LU @ ulong | |
* * * * * * * * * * * * IntegerExp::toElem: 8LU @ ulong | |
* * * * * * * * * * * * * IntegerExp::toConstElem: 8LU @ ulong | |
* * * * * * * * * * * * * * value = i64 8 | |
* * * * * * * * * * * * MulExp::toElem: *cast(ulong*)p * 8LU @ ulong | |
* * * * * * * * * * * * * PtrExp::toElem: *cast(ulong*)p @ ulong | |
* * * * * * * * * * * * * * CastExp::toElem: cast(ulong*)p @ ulong* | |
* * * * * * * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * Casting from 'void*' to 'ulong*' | |
* * * * * * * * * * * * * * * * Building type: ulong* | |
* * * * * * * * * * * * * * * * src: %143 = load i8*, i8** %4 | |
* * * * * * * * * * * * * * * * to type: i64* | |
* * * * * * * * * * * * * IntegerExp::toElem: 8LU @ ulong | |
* * * * * * * * * * * * * * IntegerExp::toConstElem: 8LU @ ulong | |
* * * * * * * * * * * * * * * value = i64 8 | |
* * * * * * * * * * * Casting from 'ulong' to 'long' | |
* * * * * * * * * * * * Building type: long | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %4 = alloca i8*, align 8 | |
* * * * * * * * * * * rhs: %149 = getelementptr i8, i8* %148, i64 %147 | |
* * * * * IfStatement::toIR(): object.d(88) | |
* * * * * * AndExp::toElem: this.flags() & 2048u @ uint | |
* * * * * * * CallExp::toElem: this.flags() @ uint | |
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint() | |
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * Function type: const pure nothrow @property uint() | |
* * * * * * * IntegerExp::toElem: 2048u @ uint | |
* * * * * * * * IntegerExp::toConstElem: 2048u @ uint | |
* * * * * * * * * value = i32 2048 | |
* * * * * * if conditional: %152 = and i32 %151, 2048 | |
* * * * * * Casting from 'uint' to 'bool' | |
* * * * * * ScopeStatement::toIR(): object.d(88) | |
* * * * * * * CompoundStatement::toIR(): object.d(88) | |
* * * * * * * * IfStatement::toIR(): object.d(89) | |
* * * * * * * * * EqualExp::toElem: flag == 2048 @ bool | |
* * * * * * * * * * VarExp::toElem: flag @ int | |
* * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int') | |
* * * * * * * * * * * * function param | |
* * * * * * * * * * * * type: int | |
* * * * * * * * * * IntegerExp::toElem: 2048 @ int | |
* * * * * * * * * * * IntegerExp::toConstElem: 2048 @ int | |
* * * * * * * * * * * * value = i32 2048 | |
* * * * * * * * * * integral or pointer or interface | |
* * * * * * * * * * lv: %155 = load i32, i32* %3 | |
* * * * * * * * * * rv: i32 2048 | |
* * * * * * * * * ReturnStatement::toIR(): object.d(90) | |
* * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * ExpStatement::toIR(): object.d(91) | |
* * * * * * * * * AddAssignExp::toElem: p += cast(long)(8LU + *cast(ulong*)p * 8LU) * 1L @ void* | |
* * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * CastExp::toElem: cast(long)(8LU + *cast(ulong*)p * 8LU) @ long | |
* * * * * * * * * * * AddExp::toElem: 8LU + *cast(ulong*)p * 8LU @ ulong | |
* * * * * * * * * * * * IntegerExp::toElem: 8LU @ ulong | |
* * * * * * * * * * * * * IntegerExp::toConstElem: 8LU @ ulong | |
* * * * * * * * * * * * * * value = i64 8 | |
* * * * * * * * * * * * MulExp::toElem: *cast(ulong*)p * 8LU @ ulong | |
* * * * * * * * * * * * * PtrExp::toElem: *cast(ulong*)p @ ulong | |
* * * * * * * * * * * * * * CastExp::toElem: cast(ulong*)p @ ulong* | |
* * * * * * * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * Casting from 'void*' to 'ulong*' | |
* * * * * * * * * * * * * * * * src: %162 = load i8*, i8** %4 | |
* * * * * * * * * * * * * * * * to type: i64* | |
* * * * * * * * * * * * * IntegerExp::toElem: 8LU @ ulong | |
* * * * * * * * * * * * * * IntegerExp::toConstElem: 8LU @ ulong | |
* * * * * * * * * * * * * * * value = i64 8 | |
* * * * * * * * * * * Casting from 'ulong' to 'long' | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %4 = alloca i8*, align 8 | |
* * * * * * * * * * * rhs: %168 = getelementptr i8, i8* %167, i64 %166 | |
* * * * * IfStatement::toIR(): object.d(93) | |
* * * * * * IntegerExp::toElem: true @ bool | |
* * * * * * * IntegerExp::toConstElem: true @ bool | |
* * * * * * * * value = i1 true | |
* * * * * * ScopeStatement::toIR(): object.d(94) | |
* * * * * * * CompoundStatement::toIR(): object.d(94) | |
* * * * * * * * IfStatement::toIR(): object.d(95) | |
* * * * * * * * * EqualExp::toElem: flag == 4096 @ bool | |
* * * * * * * * * * VarExp::toElem: flag @ int | |
* * * * * * * * * * * DtoSymbolAddress ('flag' of type 'int') | |
* * * * * * * * * * * * function param | |
* * * * * * * * * * * * type: int | |
* * * * * * * * * * IntegerExp::toElem: 4096 @ int | |
* * * * * * * * * * * IntegerExp::toConstElem: 4096 @ int | |
* * * * * * * * * * * * value = i32 4096 | |
* * * * * * * * * * integral or pointer or interface | |
* * * * * * * * * * lv: %171 = load i32, i32* %3 | |
* * * * * * * * * * rv: i32 4096 | |
* * * * * * * * * ReturnStatement::toIR(): object.d(96) | |
* * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * ExpStatement::toIR(): object.d(97) | |
* * * * * * * * * AddAssignExp::toElem: p += cast(long)strlen(cast(immutable(char*))p) * 1L @ void* | |
* * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * CastExp::toElem: cast(long)strlen(cast(immutable(char*))p) @ long | |
* * * * * * * * * * * CallExp::toElem: strlen(cast(immutable(char*))p) @ ulong | |
* * * * * * * * * * * * VarExp::toElem: strlen @ pure nothrow @nogc @trusted ulong(const(char)* str) | |
* * * * * * * * * * * * * DtoSymbolAddress ('strlen' of type 'pure nothrow @nogc @trusted ulong(const(char)* str)') | |
* * * * * * * * * * * * * * FuncDeclaration | |
* * * * * * * * * * * * * * DtoFunctionType(pure nothrow @nogc @trusted ulong(const(char)* str)) | |
* * * * * * * * * * * * * * * Building type: const(char)* | |
* * * * * * * * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * * * * * * Final function type: i64 (i8*) | |
* * * * * * * * * * * * * * DtoResolveFunction(utils.strlen): utils.d(34) | |
* * * * * * * * * * * * * * * DtoDeclareFunction(utils.strlen): utils.d(34) | |
* * * * * * * * * * * * * * * * Enter defineAsExternallyAvailable | |
* * * * * * * * * * * * * * * * * Cross-module inlining fully disabled. | |
* * * * * * * * * * * * * * * * DtoFunctionType(pure nothrow @nogc @trusted ulong(const(char)* str)) | |
* * * * * * * * * * * * * * * * func = | |
declare i64 @_D5utils6strlenFNaNbNiNePxaZm(i8*) | |
* * * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * CastExp::toElem: cast(immutable(char*))p @ const(char)* | |
* * * * * * * * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * Casting from 'void*' to 'immutable(char*)' | |
* * * * * * * * * * * * * * * * * Building type: immutable(char)* | |
* * * * * * * * * * * * * * * * * src: %178 = load i8*, i8** %4 | |
* * * * * * * * * * * * * * * * * to type: i8* | |
* * * * * * * * * * * * * * * * repainting from 'immutable(char*)' to 'const(char)*' | |
* * * * * * * * * * * * * Building type: pure nothrow @nogc @trusted ulong(const(char)* str) | |
* * * * * * * * * * * * * * DtoFunctionType(pure nothrow @nogc @trusted ulong(const(char)* str)) | |
* * * * * * * * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * * * * * * Final function type: i64 (i8*) | |
* * * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * * Arguments so far: (0) | |
* * * * * * * * * * * * * Function type: pure nothrow @nogc @trusted ulong(const(char)* str) | |
* * * * * * * * * * * Casting from 'ulong' to 'long' | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %4 = alloca i8*, align 8 | |
* * * * * * * * * * * rhs: %181 = getelementptr i8, i8* %180, i64 %179 | |
* * * * * ExpStatement::toIR(): object.d(99) | |
* * * * * * AssertExp::toElem: assert(0) | |
* * * * * * * IntegerExp::toElem: 0 @ int | |
* * * * * * * * IntegerExp::toConstElem: 0 @ int | |
* * * * * * * * * value = i32 0 | |
* * * * * * * Casting from 'int' to 'bool' | |
* * DtoDefineFunction(object.ModuleInfo.index): object.d(102) | |
* * * isMember = this is: ModuleInfo | |
* * * DtoFunctionType(const pure nothrow @property uint()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.ModuleInfo*) | |
* * * DtoResolveFunction(object.ModuleInfo.index): object.d(102) | |
* * * * DtoDeclareFunction(object.ModuleInfo.index): object.d(102) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: ModuleInfo | |
* * * * * DtoFunctionType(const pure nothrow @property uint()) | |
* * * * * func = | |
declare i32 @_D6object10ModuleInfo5indexMxFNaNbNdZk(%object.ModuleInfo*) | |
* * * Doing function body for: index | |
* * * DtoCreateNestedContext for object.ModuleInfo.index | |
* * * * DtoCreateNestedContextType for object.ModuleInfo.index | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(103) | |
* * * * * DotVarExp::toElem: this._index @ uint | |
* * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * normal this exp | |
* * * * * * Indexing aggregate field object.ModuleInfo._index: | |
* * * * * * * Value: %3 = getelementptr inbounds %object.ModuleInfo, %object.ModuleInfo* %0, i32 0, i32 1 | |
* * DtoDefineFunction(object.ModuleInfo.flags): object.d(106) | |
* * * Doing function body for: flags | |
* * * DtoCreateNestedContext for object.ModuleInfo.flags | |
* * * * DtoCreateNestedContextType for object.ModuleInfo.flags | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(107) | |
* * * * * DotVarExp::toElem: this._flags @ uint | |
* * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * normal this exp | |
* * * * * * Indexing aggregate field object.ModuleInfo._flags: | |
* * * * * * * Value: %3 = getelementptr inbounds %object.ModuleInfo, %object.ModuleInfo* %0, i32 0, i32 0 | |
* * DtoDefineFunction(object.ModuleInfo.tlsctor): object.d(110) | |
* * * isMember = this is: ModuleInfo | |
* * * DtoFunctionType(const pure nothrow @property void function()()) | |
* * * * Building type: void function() | |
* * * * * Building type: void() | |
* * * * * * DtoFunctionType(void()) | |
* * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * Final function type: void () | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void ()* (%object.ModuleInfo*) | |
* * * DtoResolveFunction(object.ModuleInfo.tlsctor): object.d(110) | |
* * * * DtoDeclareFunction(object.ModuleInfo.tlsctor): object.d(110) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: ModuleInfo | |
* * * * * DtoFunctionType(const pure nothrow @property void function()()) | |
* * * * * func = | |
declare void ()* @_D6object10ModuleInfo7tlsctorMxFNaNbNdZPFZv(%object.ModuleInfo*) | |
* * * Doing function body for: tlsctor | |
* * * DtoCreateNestedContext for object.ModuleInfo.tlsctor | |
* * * * DtoCreateNestedContextType for object.ModuleInfo.tlsctor | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(111) | |
* * * * * CondExp::toElem: this.flags() & 8u ? *cast(void function()*)this.addrOf(8) : null @ void function() | |
* * * * * * Building type: void function()* | |
* * * * * * AndExp::toElem: this.flags() & 8u @ uint | |
* * * * * * * CallExp::toElem: this.flags() @ uint | |
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint() | |
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * Function type: const pure nothrow @property uint() | |
* * * * * * * IntegerExp::toElem: 8u @ uint | |
* * * * * * * * IntegerExp::toConstElem: 8u @ uint | |
* * * * * * * * * value = i32 8 | |
* * * * * * Casting from 'uint' to 'bool' | |
* * * * * * PtrExp::toElem: *cast(void function()*)this.addrOf(8) @ void function() | |
* * * * * * * CastExp::toElem: cast(void function()*)this.addrOf(8) @ void function()* | |
* * * * * * * * CallExp::toElem: this.addrOf(8) @ void* | |
* * * * * * * * * DotVarExp::toElem: this.addrOf @ const pure nothrow void*(int flag) | |
* * * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * * normal this exp | |
* * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * IntegerExp::toElem: 8 @ int | |
* * * * * * * * * * * * * IntegerExp::toConstElem: 8 @ int | |
* * * * * * * * * * * * * * value = i32 8 | |
* * * * * * * * * * Building type: const pure nothrow void*(int flag) | |
* * * * * * * * * * * DtoFunctionType(const pure nothrow void*(int flag)) | |
* * * * * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * * * Final function type: i8* (i32) | |
* * * * * * * * * * doing normal arguments | |
* * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * * Function type: const pure nothrow void*(int flag) | |
* * * * * * * * Casting from 'void*' to 'void function()*' | |
* * * * * * * * * src: %8 = call i8* @_D6object10ModuleInfo6addrOfMxFNaNbiZPv(%object.ModuleInfo* nonnull %0, i32 8) #1 | |
* * * * * * * * * to type: void ()** | |
* * * * * * NullExp::toElem(type=void function()): null | |
* * * * * * * NullExp::toConstElem(type=void function()): null | |
* * DtoDefineFunction(object.ModuleInfo.tlsdtor): object.d(114) | |
* * * isMember = this is: ModuleInfo | |
* * * DtoFunctionType(const pure nothrow @property void function()()) | |
* * * * Building type: void function() | |
* * * * * Building type: void() | |
* * * * * * DtoFunctionType(void()) | |
* * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * Final function type: void () | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void ()* (%object.ModuleInfo*) | |
* * * DtoResolveFunction(object.ModuleInfo.tlsdtor): object.d(114) | |
* * * * DtoDeclareFunction(object.ModuleInfo.tlsdtor): object.d(114) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: ModuleInfo | |
* * * * * DtoFunctionType(const pure nothrow @property void function()()) | |
* * * * * func = | |
declare void ()* @_D6object10ModuleInfo7tlsdtorMxFNaNbNdZPFZv(%object.ModuleInfo*) | |
* * * Doing function body for: tlsdtor | |
* * * DtoCreateNestedContext for object.ModuleInfo.tlsdtor | |
* * * * DtoCreateNestedContextType for object.ModuleInfo.tlsdtor | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(115) | |
* * * * * CondExp::toElem: this.flags() & 16u ? *cast(void function()*)this.addrOf(16) : null @ void function() | |
* * * * * * AndExp::toElem: this.flags() & 16u @ uint | |
* * * * * * * CallExp::toElem: this.flags() @ uint | |
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint() | |
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * Function type: const pure nothrow @property uint() | |
* * * * * * * IntegerExp::toElem: 16u @ uint | |
* * * * * * * * IntegerExp::toConstElem: 16u @ uint | |
* * * * * * * * * value = i32 16 | |
* * * * * * Casting from 'uint' to 'bool' | |
* * * * * * PtrExp::toElem: *cast(void function()*)this.addrOf(16) @ void function() | |
* * * * * * * CastExp::toElem: cast(void function()*)this.addrOf(16) @ void function()* | |
* * * * * * * * CallExp::toElem: this.addrOf(16) @ void* | |
* * * * * * * * * DotVarExp::toElem: this.addrOf @ const pure nothrow void*(int flag) | |
* * * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * * normal this exp | |
* * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * IntegerExp::toElem: 16 @ int | |
* * * * * * * * * * * * * IntegerExp::toConstElem: 16 @ int | |
* * * * * * * * * * * * * * value = i32 16 | |
* * * * * * * * * * doing normal arguments | |
* * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * * Function type: const pure nothrow void*(int flag) | |
* * * * * * * * Casting from 'void*' to 'void function()*' | |
* * * * * * * * * src: %8 = call i8* @_D6object10ModuleInfo6addrOfMxFNaNbiZPv(%object.ModuleInfo* nonnull %0, i32 16) #1 | |
* * * * * * * * * to type: void ()** | |
* * * * * * NullExp::toElem(type=void function()): null | |
* * * * * * * NullExp::toConstElem(type=void function()): null | |
* * DtoDefineFunction(object.ModuleInfo.xgetMembers): object.d(118) | |
* * * isMember = this is: ModuleInfo | |
* * * DtoFunctionType(const pure nothrow @property void*()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i8* (%object.ModuleInfo*) | |
* * * DtoResolveFunction(object.ModuleInfo.xgetMembers): object.d(118) | |
* * * * DtoDeclareFunction(object.ModuleInfo.xgetMembers): object.d(118) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: ModuleInfo | |
* * * * * DtoFunctionType(const pure nothrow @property void*()) | |
* * * * * func = | |
declare i8* @_D6object10ModuleInfo11xgetMembersMxFNaNbNdZPv(%object.ModuleInfo*) | |
* * * Doing function body for: xgetMembers | |
* * * DtoCreateNestedContext for object.ModuleInfo.xgetMembers | |
* * * * DtoCreateNestedContextType for object.ModuleInfo.xgetMembers | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(119) | |
* * * * * CondExp::toElem: this.flags() & 128u ? *cast(void**)this.addrOf(128) : null @ void* | |
* * * * * * AndExp::toElem: this.flags() & 128u @ uint | |
* * * * * * * CallExp::toElem: this.flags() @ uint | |
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint() | |
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * Function type: const pure nothrow @property uint() | |
* * * * * * * IntegerExp::toElem: 128u @ uint | |
* * * * * * * * IntegerExp::toConstElem: 128u @ uint | |
* * * * * * * * * value = i32 128 | |
* * * * * * Casting from 'uint' to 'bool' | |
* * * * * * PtrExp::toElem: *cast(void**)this.addrOf(128) @ void* | |
* * * * * * * CastExp::toElem: cast(void**)this.addrOf(128) @ void** | |
* * * * * * * * CallExp::toElem: this.addrOf(128) @ void* | |
* * * * * * * * * DotVarExp::toElem: this.addrOf @ const pure nothrow void*(int flag) | |
* * * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * * normal this exp | |
* * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * IntegerExp::toElem: 128 @ int | |
* * * * * * * * * * * * * IntegerExp::toConstElem: 128 @ int | |
* * * * * * * * * * * * * * value = i32 128 | |
* * * * * * * * * * doing normal arguments | |
* * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * * Function type: const pure nothrow void*(int flag) | |
* * * * * * * * Casting from 'void*' to 'void**' | |
* * * * * * * * * src: %8 = call i8* @_D6object10ModuleInfo6addrOfMxFNaNbiZPv(%object.ModuleInfo* nonnull %0, i32 128) #1 | |
* * * * * * * * * to type: i8** | |
* * * * * * NullExp::toElem(type=void*): null | |
* * * * * * * NullExp::toConstElem(type=void*): null | |
* * DtoDefineFunction(object.ModuleInfo.ctor): object.d(122) | |
* * * isMember = this is: ModuleInfo | |
* * * DtoFunctionType(const pure nothrow @property void function()()) | |
* * * * Building type: void function() | |
* * * * * Building type: void() | |
* * * * * * DtoFunctionType(void()) | |
* * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * Final function type: void () | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void ()* (%object.ModuleInfo*) | |
* * * DtoResolveFunction(object.ModuleInfo.ctor): object.d(122) | |
* * * * DtoDeclareFunction(object.ModuleInfo.ctor): object.d(122) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: ModuleInfo | |
* * * * * DtoFunctionType(const pure nothrow @property void function()()) | |
* * * * * func = | |
declare void ()* @_D6object10ModuleInfo4ctorMxFNaNbNdZPFZv(%object.ModuleInfo*) | |
* * * Doing function body for: ctor | |
* * * DtoCreateNestedContext for object.ModuleInfo.ctor | |
* * * * DtoCreateNestedContextType for object.ModuleInfo.ctor | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(123) | |
* * * * * CondExp::toElem: this.flags() & 32u ? *cast(void function()*)this.addrOf(32) : null @ void function() | |
* * * * * * AndExp::toElem: this.flags() & 32u @ uint | |
* * * * * * * CallExp::toElem: this.flags() @ uint | |
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint() | |
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * Function type: const pure nothrow @property uint() | |
* * * * * * * IntegerExp::toElem: 32u @ uint | |
* * * * * * * * IntegerExp::toConstElem: 32u @ uint | |
* * * * * * * * * value = i32 32 | |
* * * * * * Casting from 'uint' to 'bool' | |
* * * * * * PtrExp::toElem: *cast(void function()*)this.addrOf(32) @ void function() | |
* * * * * * * CastExp::toElem: cast(void function()*)this.addrOf(32) @ void function()* | |
* * * * * * * * CallExp::toElem: this.addrOf(32) @ void* | |
* * * * * * * * * DotVarExp::toElem: this.addrOf @ const pure nothrow void*(int flag) | |
* * * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * * normal this exp | |
* * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * IntegerExp::toElem: 32 @ int | |
* * * * * * * * * * * * * IntegerExp::toConstElem: 32 @ int | |
* * * * * * * * * * * * * * value = i32 32 | |
* * * * * * * * * * doing normal arguments | |
* * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * * Function type: const pure nothrow void*(int flag) | |
* * * * * * * * Casting from 'void*' to 'void function()*' | |
* * * * * * * * * src: %8 = call i8* @_D6object10ModuleInfo6addrOfMxFNaNbiZPv(%object.ModuleInfo* nonnull %0, i32 32) #1 | |
* * * * * * * * * to type: void ()** | |
* * * * * * NullExp::toElem(type=void function()): null | |
* * * * * * * NullExp::toConstElem(type=void function()): null | |
* * DtoDefineFunction(object.ModuleInfo.dtor): object.d(126) | |
* * * isMember = this is: ModuleInfo | |
* * * DtoFunctionType(const pure nothrow @property void function()()) | |
* * * * Building type: void function() | |
* * * * * Building type: void() | |
* * * * * * DtoFunctionType(void()) | |
* * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * Final function type: void () | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void ()* (%object.ModuleInfo*) | |
* * * DtoResolveFunction(object.ModuleInfo.dtor): object.d(126) | |
* * * * DtoDeclareFunction(object.ModuleInfo.dtor): object.d(126) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: ModuleInfo | |
* * * * * DtoFunctionType(const pure nothrow @property void function()()) | |
* * * * * func = | |
declare void ()* @_D6object10ModuleInfo4dtorMxFNaNbNdZPFZv(%object.ModuleInfo*) | |
* * * Doing function body for: dtor | |
* * * DtoCreateNestedContext for object.ModuleInfo.dtor | |
* * * * DtoCreateNestedContextType for object.ModuleInfo.dtor | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(127) | |
* * * * * CondExp::toElem: this.flags() & 64u ? *cast(void function()*)this.addrOf(64) : null @ void function() | |
* * * * * * AndExp::toElem: this.flags() & 64u @ uint | |
* * * * * * * CallExp::toElem: this.flags() @ uint | |
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint() | |
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * Function type: const pure nothrow @property uint() | |
* * * * * * * IntegerExp::toElem: 64u @ uint | |
* * * * * * * * IntegerExp::toConstElem: 64u @ uint | |
* * * * * * * * * value = i32 64 | |
* * * * * * Casting from 'uint' to 'bool' | |
* * * * * * PtrExp::toElem: *cast(void function()*)this.addrOf(64) @ void function() | |
* * * * * * * CastExp::toElem: cast(void function()*)this.addrOf(64) @ void function()* | |
* * * * * * * * CallExp::toElem: this.addrOf(64) @ void* | |
* * * * * * * * * DotVarExp::toElem: this.addrOf @ const pure nothrow void*(int flag) | |
* * * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * * normal this exp | |
* * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * IntegerExp::toElem: 64 @ int | |
* * * * * * * * * * * * * IntegerExp::toConstElem: 64 @ int | |
* * * * * * * * * * * * * * value = i32 64 | |
* * * * * * * * * * doing normal arguments | |
* * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * * Function type: const pure nothrow void*(int flag) | |
* * * * * * * * Casting from 'void*' to 'void function()*' | |
* * * * * * * * * src: %8 = call i8* @_D6object10ModuleInfo6addrOfMxFNaNbiZPv(%object.ModuleInfo* nonnull %0, i32 64) #1 | |
* * * * * * * * * to type: void ()** | |
* * * * * * NullExp::toElem(type=void function()): null | |
* * * * * * * NullExp::toConstElem(type=void function()): null | |
* * DtoDefineFunction(object.ModuleInfo.ictor): object.d(130) | |
* * * isMember = this is: ModuleInfo | |
* * * DtoFunctionType(const pure nothrow @property void function()()) | |
* * * * Building type: void function() | |
* * * * * Building type: void() | |
* * * * * * DtoFunctionType(void()) | |
* * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * Final function type: void () | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void ()* (%object.ModuleInfo*) | |
* * * DtoResolveFunction(object.ModuleInfo.ictor): object.d(130) | |
* * * * DtoDeclareFunction(object.ModuleInfo.ictor): object.d(130) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: ModuleInfo | |
* * * * * DtoFunctionType(const pure nothrow @property void function()()) | |
* * * * * func = | |
declare void ()* @_D6object10ModuleInfo5ictorMxFNaNbNdZPFZv(%object.ModuleInfo*) | |
* * * Doing function body for: ictor | |
* * * DtoCreateNestedContext for object.ModuleInfo.ictor | |
* * * * DtoCreateNestedContextType for object.ModuleInfo.ictor | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(131) | |
* * * * * CondExp::toElem: this.flags() & 256u ? *cast(void function()*)this.addrOf(256) : null @ void function() | |
* * * * * * AndExp::toElem: this.flags() & 256u @ uint | |
* * * * * * * CallExp::toElem: this.flags() @ uint | |
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint() | |
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * Function type: const pure nothrow @property uint() | |
* * * * * * * IntegerExp::toElem: 256u @ uint | |
* * * * * * * * IntegerExp::toConstElem: 256u @ uint | |
* * * * * * * * * value = i32 256 | |
* * * * * * Casting from 'uint' to 'bool' | |
* * * * * * PtrExp::toElem: *cast(void function()*)this.addrOf(256) @ void function() | |
* * * * * * * CastExp::toElem: cast(void function()*)this.addrOf(256) @ void function()* | |
* * * * * * * * CallExp::toElem: this.addrOf(256) @ void* | |
* * * * * * * * * DotVarExp::toElem: this.addrOf @ const pure nothrow void*(int flag) | |
* * * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * * normal this exp | |
* * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * IntegerExp::toElem: 256 @ int | |
* * * * * * * * * * * * * IntegerExp::toConstElem: 256 @ int | |
* * * * * * * * * * * * * * value = i32 256 | |
* * * * * * * * * * doing normal arguments | |
* * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * * Function type: const pure nothrow void*(int flag) | |
* * * * * * * * Casting from 'void*' to 'void function()*' | |
* * * * * * * * * src: %8 = call i8* @_D6object10ModuleInfo6addrOfMxFNaNbiZPv(%object.ModuleInfo* nonnull %0, i32 256) #1 | |
* * * * * * * * * to type: void ()** | |
* * * * * * NullExp::toElem(type=void function()): null | |
* * * * * * * NullExp::toConstElem(type=void function()): null | |
* * DtoDefineFunction(object.ModuleInfo.unitTest): object.d(134) | |
* * * isMember = this is: ModuleInfo | |
* * * DtoFunctionType(const pure nothrow @property void function()()) | |
* * * * Building type: void function() | |
* * * * * Building type: void() | |
* * * * * * DtoFunctionType(void()) | |
* * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * Final function type: void () | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void ()* (%object.ModuleInfo*) | |
* * * DtoResolveFunction(object.ModuleInfo.unitTest): object.d(134) | |
* * * * DtoDeclareFunction(object.ModuleInfo.unitTest): object.d(134) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: ModuleInfo | |
* * * * * DtoFunctionType(const pure nothrow @property void function()()) | |
* * * * * func = | |
declare void ()* @_D6object10ModuleInfo8unitTestMxFNaNbNdZPFZv(%object.ModuleInfo*) | |
* * * Doing function body for: unitTest | |
* * * DtoCreateNestedContext for object.ModuleInfo.unitTest | |
* * * * DtoCreateNestedContextType for object.ModuleInfo.unitTest | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(135) | |
* * * * * CondExp::toElem: this.flags() & 512u ? *cast(void function()*)this.addrOf(512) : null @ void function() | |
* * * * * * AndExp::toElem: this.flags() & 512u @ uint | |
* * * * * * * CallExp::toElem: this.flags() @ uint | |
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint() | |
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * Function type: const pure nothrow @property uint() | |
* * * * * * * IntegerExp::toElem: 512u @ uint | |
* * * * * * * * IntegerExp::toConstElem: 512u @ uint | |
* * * * * * * * * value = i32 512 | |
* * * * * * Casting from 'uint' to 'bool' | |
* * * * * * PtrExp::toElem: *cast(void function()*)this.addrOf(512) @ void function() | |
* * * * * * * CastExp::toElem: cast(void function()*)this.addrOf(512) @ void function()* | |
* * * * * * * * CallExp::toElem: this.addrOf(512) @ void* | |
* * * * * * * * * DotVarExp::toElem: this.addrOf @ const pure nothrow void*(int flag) | |
* * * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * * normal this exp | |
* * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * IntegerExp::toElem: 512 @ int | |
* * * * * * * * * * * * * IntegerExp::toConstElem: 512 @ int | |
* * * * * * * * * * * * * * value = i32 512 | |
* * * * * * * * * * doing normal arguments | |
* * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * * Function type: const pure nothrow void*(int flag) | |
* * * * * * * * Casting from 'void*' to 'void function()*' | |
* * * * * * * * * src: %8 = call i8* @_D6object10ModuleInfo6addrOfMxFNaNbiZPv(%object.ModuleInfo* nonnull %0, i32 512) #1 | |
* * * * * * * * * to type: void ()** | |
* * * * * * NullExp::toElem(type=void function()): null | |
* * * * * * * NullExp::toConstElem(type=void function()): null | |
* * DtoDefineFunction(object.ModuleInfo.importedModules): object.d(138) | |
* * * isMember = this is: ModuleInfo | |
* * * DtoFunctionType(const pure nothrow @property immutable(ModuleInfo*)[]()) | |
* * * * Building type: immutable(ModuleInfo*)[] | |
* * * * * Building type: immutable(ModuleInfo)* | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, %object.ModuleInfo** } (%object.ModuleInfo*) | |
* * * DtoResolveFunction(object.ModuleInfo.importedModules): object.d(138) | |
* * * * DtoDeclareFunction(object.ModuleInfo.importedModules): object.d(138) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: ModuleInfo | |
* * * * * DtoFunctionType(const pure nothrow @property immutable(ModuleInfo*)[]()) | |
* * * * * func = | |
declare { i64, %object.ModuleInfo** } @_D6object10ModuleInfo15importedModulesMxFNaNbNdZAyPSQByQBu(%object.ModuleInfo*) | |
* * * Doing function body for: importedModules | |
* * * DtoCreateNestedContext for object.ModuleInfo.importedModules | |
* * * * DtoCreateNestedContextType for object.ModuleInfo.importedModules | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(138) | |
* * * * * IfStatement::toIR(): object.d(139) | |
* * * * * * AndExp::toElem: this.flags() & 1024u @ uint | |
* * * * * * * CallExp::toElem: this.flags() @ uint | |
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint() | |
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * Function type: const pure nothrow @property uint() | |
* * * * * * * IntegerExp::toElem: 1024u @ uint | |
* * * * * * * * IntegerExp::toConstElem: 1024u @ uint | |
* * * * * * * * * value = i32 1024 | |
* * * * * * if conditional: %4 = and i32 %3, 1024 | |
* * * * * * Casting from 'uint' to 'bool' | |
* * * * * * ScopeStatement::toIR(): object.d(139) | |
* * * * * * * CompoundStatement::toIR(): object.d(139) | |
* * * * * * * * ExpStatement::toIR(): object.d(140) | |
* * * * * * * * * DeclarationExp::toElem: (ulong* p = cast(ulong*)this.addrOf(1024);) | T=void | |
* * * * * * * * * * DtoDeclarationExp: p | |
* * * * * * * * * * * VarDeclaration | |
* * * * * * * * * * * DtoVarDeclaration(vdtype = ulong*) | |
* * * * * * * * * * * * llvm value for decl: %2 = alloca i64*, align 8 | |
* * * * * * * * * * * * expression initializer | |
* * * * * * * * * * * * AssignExp::toElem: p = cast(ulong*)this.addrOf(1024) | (ulong*)(ulong* = ulong*) | |
* * * * * * * * * * * * * VarExp::toElem: p @ ulong* | |
* * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'ulong*') | |
* * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * CastExp::toElem: cast(ulong*)this.addrOf(1024) @ ulong* | |
* * * * * * * * * * * * * * CallExp::toElem: this.addrOf(1024) @ void* | |
* * * * * * * * * * * * * * * DotVarExp::toElem: this.addrOf @ const pure nothrow void*(int flag) | |
* * * * * * * * * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * * * * IntegerExp::toElem: 1024 @ int | |
* * * * * * * * * * * * * * * * * * * IntegerExp::toConstElem: 1024 @ int | |
* * * * * * * * * * * * * * * * * * * * value = i32 1024 | |
* * * * * * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * * * * * * * * Function type: const pure nothrow void*(int flag) | |
* * * * * * * * * * * * * * Casting from 'void*' to 'ulong*' | |
* * * * * * * * * * * * * * * src: %8 = call i8* @_D6object10ModuleInfo6addrOfMxFNaNbiZPv(%object.ModuleInfo* nonnull %0, i32 1024) #1 | |
* * * * * * * * * * * * * * * to type: i64* | |
* * * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * * lhs: %2 = alloca i64*, align 8 | |
* * * * * * * * * * * * * * rhs: %9 = bitcast i8* %8 to i64* | |
* * * * * * * * ReturnStatement::toIR(): object.d(141) | |
* * * * * * * * * SliceExp::toElem: (cast(immutable(ModuleInfo*)*)(p + 8L))[0..*p] @ immutable(ModuleInfo*)[] | |
* * * * * * * * * * CastExp::toElem: cast(immutable(ModuleInfo*)*)(p + 8L) @ immutable(ModuleInfo*)* | |
* * * * * * * * * * * AddExp::toElem: p + 8L @ ulong* | |
* * * * * * * * * * * * VarExp::toElem: p @ ulong* | |
* * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'ulong*') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * * Casting from 'ulong*' to 'immutable(ModuleInfo*)*' | |
* * * * * * * * * * * * Building type: immutable(ModuleInfo*)* | |
* * * * * * * * * * * * src: %11 = getelementptr i64, i64* %10, i64 1 | |
* * * * * * * * * * * * to type: %object.ModuleInfo** | |
* * * * * * * * * * IntegerExp::toElem: 0LU @ ulong | |
* * * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong | |
* * * * * * * * * * * * value = i64 0 | |
* * * * * * * * * * PtrExp::toElem: *p @ ulong | |
* * * * * * * * * * * VarExp::toElem: p @ ulong* | |
* * * * * * * * * * * * DtoSymbolAddress ('p' of type 'ulong*') | |
* * * * * * * * * * * * * a normal variable | |
* * * * * ReturnStatement::toIR(): object.d(143) | |
* * * * * * NullExp::toElem(type=immutable(ModuleInfo*)[]): null | |
* * * * * * * NullExp::toConstElem(type=immutable(ModuleInfo*)[]): null | |
* * DtoDefineFunction(object.ModuleInfo.localClasses): object.d(146) | |
* * * isMember = this is: ModuleInfo | |
* * * DtoFunctionType(const pure nothrow @property TypeInfo_Class[]()) | |
* * * * Building type: TypeInfo_Class[] | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, %object.TypeInfo_Class** } (%object.ModuleInfo*) | |
* * * DtoResolveFunction(object.ModuleInfo.localClasses): object.d(146) | |
* * * * DtoDeclareFunction(object.ModuleInfo.localClasses): object.d(146) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: ModuleInfo | |
* * * * * DtoFunctionType(const pure nothrow @property TypeInfo_Class[]()) | |
* * * * * func = | |
declare { i64, %object.TypeInfo_Class** } @_D6object10ModuleInfo12localClassesMxFNaNbNdZAC14TypeInfo_Class(%object.ModuleInfo*) | |
* * * Doing function body for: localClasses | |
* * * DtoCreateNestedContext for object.ModuleInfo.localClasses | |
* * * * DtoCreateNestedContextType for object.ModuleInfo.localClasses | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(146) | |
* * * * * IfStatement::toIR(): object.d(147) | |
* * * * * * AndExp::toElem: this.flags() & 2048u @ uint | |
* * * * * * * CallExp::toElem: this.flags() @ uint | |
* * * * * * * * DotVarExp::toElem: this.flags @ const pure nothrow @property uint() | |
* * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * Function type: const pure nothrow @property uint() | |
* * * * * * * IntegerExp::toElem: 2048u @ uint | |
* * * * * * * * IntegerExp::toConstElem: 2048u @ uint | |
* * * * * * * * * value = i32 2048 | |
* * * * * * if conditional: %4 = and i32 %3, 2048 | |
* * * * * * Casting from 'uint' to 'bool' | |
* * * * * * ScopeStatement::toIR(): object.d(147) | |
* * * * * * * CompoundStatement::toIR(): object.d(147) | |
* * * * * * * * ExpStatement::toIR(): object.d(148) | |
* * * * * * * * * DeclarationExp::toElem: (ulong* p = cast(ulong*)this.addrOf(2048);) | T=void | |
* * * * * * * * * * DtoDeclarationExp: p | |
* * * * * * * * * * * VarDeclaration | |
* * * * * * * * * * * DtoVarDeclaration(vdtype = ulong*) | |
* * * * * * * * * * * * llvm value for decl: %2 = alloca i64*, align 8 | |
* * * * * * * * * * * * expression initializer | |
* * * * * * * * * * * * AssignExp::toElem: p = cast(ulong*)this.addrOf(2048) | (ulong*)(ulong* = ulong*) | |
* * * * * * * * * * * * * VarExp::toElem: p @ ulong* | |
* * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'ulong*') | |
* * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * CastExp::toElem: cast(ulong*)this.addrOf(2048) @ ulong* | |
* * * * * * * * * * * * * * CallExp::toElem: this.addrOf(2048) @ void* | |
* * * * * * * * * * * * * * * DotVarExp::toElem: this.addrOf @ const pure nothrow void*(int flag) | |
* * * * * * * * * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * * * * IntegerExp::toElem: 2048 @ int | |
* * * * * * * * * * * * * * * * * * * IntegerExp::toConstElem: 2048 @ int | |
* * * * * * * * * * * * * * * * * * * * value = i32 2048 | |
* * * * * * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * * * * * * * * Function type: const pure nothrow void*(int flag) | |
* * * * * * * * * * * * * * Casting from 'void*' to 'ulong*' | |
* * * * * * * * * * * * * * * src: %8 = call i8* @_D6object10ModuleInfo6addrOfMxFNaNbiZPv(%object.ModuleInfo* nonnull %0, i32 2048) #1 | |
* * * * * * * * * * * * * * * to type: i64* | |
* * * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * * lhs: %2 = alloca i64*, align 8 | |
* * * * * * * * * * * * * * rhs: %9 = bitcast i8* %8 to i64* | |
* * * * * * * * ReturnStatement::toIR(): object.d(149) | |
* * * * * * * * * SliceExp::toElem: (cast(TypeInfo_Class*)(p + 8L))[0..*p] @ TypeInfo_Class[] | |
* * * * * * * * * * CastExp::toElem: cast(TypeInfo_Class*)(p + 8L) @ TypeInfo_Class* | |
* * * * * * * * * * * AddExp::toElem: p + 8L @ ulong* | |
* * * * * * * * * * * * VarExp::toElem: p @ ulong* | |
* * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'ulong*') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * * Casting from 'ulong*' to 'TypeInfo_Class*' | |
* * * * * * * * * * * * Building type: TypeInfo_Class* | |
* * * * * * * * * * * * src: %11 = getelementptr i64, i64* %10, i64 1 | |
* * * * * * * * * * * * to type: %object.TypeInfo_Class** | |
* * * * * * * * * * IntegerExp::toElem: 0LU @ ulong | |
* * * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong | |
* * * * * * * * * * * * value = i64 0 | |
* * * * * * * * * * PtrExp::toElem: *p @ ulong | |
* * * * * * * * * * * VarExp::toElem: p @ ulong* | |
* * * * * * * * * * * * DtoSymbolAddress ('p' of type 'ulong*') | |
* * * * * * * * * * * * * a normal variable | |
* * * * * ReturnStatement::toIR(): object.d(151) | |
* * * * * * NullExp::toElem(type=TypeInfo_Class[]): null | |
* * * * * * * NullExp::toConstElem(type=TypeInfo_Class[]): null | |
* * DtoDefineFunction(object.ModuleInfo.name): object.d(154) | |
* * * isMember = this is: ModuleInfo | |
* * * DtoFunctionType(const pure nothrow @property string()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.ModuleInfo*) | |
* * * DtoResolveFunction(object.ModuleInfo.name): object.d(154) | |
* * * * DtoDeclareFunction(object.ModuleInfo.name): object.d(154) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: ModuleInfo | |
* * * * * DtoFunctionType(const pure nothrow @property string()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object10ModuleInfo4nameMxFNaNbNdZAya(%object.ModuleInfo*) | |
* * * Doing function body for: name | |
* * * DtoCreateNestedContext for object.ModuleInfo.name | |
* * * * DtoCreateNestedContextType for object.ModuleInfo.name | |
* * * CompoundStatement::toIR(): | |
* * * * IfStatement::toIR(): object.d(155) | |
* * * * * IntegerExp::toElem: true @ bool | |
* * * * * * IntegerExp::toConstElem: true @ bool | |
* * * * * * * value = i1 true | |
* * * * * ScopeStatement::toIR(): object.d(156) | |
* * * * * * CompoundStatement::toIR(): object.d(156) | |
* * * * * * * ExpStatement::toIR(): object.d(157) | |
* * * * * * * * DeclarationExp::toElem: (immutable immutable(char*) p = cast(immutable(char*))this.addrOf(4096);) | T=void | |
* * * * * * * * * DtoDeclarationExp: p | |
* * * * * * * * * * VarDeclaration | |
* * * * * * * * * * DtoVarDeclaration(vdtype = immutable(char*)) | |
* * * * * * * * * * * llvm value for decl: %2 = alloca i8*, align 8 | |
* * * * * * * * * * * expression initializer | |
* * * * * * * * * * * AssignExp::toElem: p = cast(immutable(char*))this.addrOf(4096) | (immutable(char*))(immutable(char*) = immutable(char*)) | |
* * * * * * * * * * * * VarExp::toElem: p @ immutable(char*) | |
* * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'immutable(char*)') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * CastExp::toElem: cast(immutable(char*))this.addrOf(4096) @ immutable(char*) | |
* * * * * * * * * * * * * CallExp::toElem: this.addrOf(4096) @ void* | |
* * * * * * * * * * * * * * DotVarExp::toElem: this.addrOf @ const pure nothrow void*(int flag) | |
* * * * * * * * * * * * * * * ThisExp::toElem: this @ const(ModuleInfo) | |
* * * * * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * * * IntegerExp::toElem: 4096 @ int | |
* * * * * * * * * * * * * * * * * * IntegerExp::toConstElem: 4096 @ int | |
* * * * * * * * * * * * * * * * * * * value = i32 4096 | |
* * * * * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * * * * %object.ModuleInfo* %0 | |
* * * * * * * * * * * * * * * Function type: const pure nothrow void*(int flag) | |
* * * * * * * * * * * * * Casting from 'void*' to 'immutable(char*)' | |
* * * * * * * * * * * * * * src: %5 = call i8* @_D6object10ModuleInfo6addrOfMxFNaNbiZPv(%object.ModuleInfo* nonnull %0, i32 4096) #1 | |
* * * * * * * * * * * * * * to type: i8* | |
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * lhs: %2 = alloca i8*, align 8 | |
* * * * * * * * * * * * * rhs: %5 = call i8* @_D6object10ModuleInfo6addrOfMxFNaNbiZPv(%object.ModuleInfo* nonnull %0, i32 4096) #1 | |
* * * * * * * ReturnStatement::toIR(): object.d(158) | |
* * * * * * * * SliceExp::toElem: p[0..strlen(cast(const(char)*)p)] @ string | |
* * * * * * * * * VarExp::toElem: p @ immutable(char*) | |
* * * * * * * * * * DtoSymbolAddress ('p' of type 'immutable(char*)') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * IntegerExp::toElem: 0LU @ ulong | |
* * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong | |
* * * * * * * * * * * value = i64 0 | |
* * * * * * * * * CallExp::toElem: strlen(cast(const(char)*)p) @ ulong | |
* * * * * * * * * * VarExp::toElem: strlen @ pure nothrow @nogc @trusted ulong(const(char)* str) | |
* * * * * * * * * * * DtoSymbolAddress ('strlen' of type 'pure nothrow @nogc @trusted ulong(const(char)* str)') | |
* * * * * * * * * * * * FuncDeclaration | |
* * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * CastExp::toElem: cast(const(char)*)p @ const(char)* | |
* * * * * * * * * * * * * * VarExp::toElem: p @ immutable(char*) | |
* * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'immutable(char*)') | |
* * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * Casting from 'immutable(char*)' to 'const(char)*' | |
* * * * * * * * * * * * * * * src: %6 = load i8*, i8** %2 | |
* * * * * * * * * * * * * * * to type: i8* | |
* * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * Arguments so far: (0) | |
* * * * * * * * * * * Function type: pure nothrow @nogc @trusted ulong(const(char)* str) | |
* * Ignoring Dsymbol::codegen for object.ModuleInfo.ApplyDg | |
* * DtoDefineFunction(object.ModuleInfo.opApply): object.d(165) | |
* * * DtoFunctionType(int(scope int delegate(ref ModuleInfo*) dg)) | |
* * * * Building type: int delegate(ref ModuleInfo*) | |
* * * * * DtoFunctionType(int(ref ModuleInfo*)) | |
* * * * * * Building type: ModuleInfo** | |
* * * * * * x86-64 ABI: Transforming return type | |
* * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * Final function type: i32 (i8*, %object.ModuleInfo**) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 ({ i8*, i32 (i8*, %object.ModuleInfo**)* }) | |
* * * DtoResolveFunction(object.ModuleInfo.opApply): object.d(165) | |
* * * * DtoDeclareFunction(object.ModuleInfo.opApply): object.d(165) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * DtoFunctionType(int(scope int delegate(ref ModuleInfo*) dg)) | |
* * * * * func = | |
declare i32 @_D6object10ModuleInfo7opApplyFMDFKPSQBiQBeZiZi({ i8*, i32 (i8*, %object.ModuleInfo**)* }) | |
* * * Doing function body for: opApply | |
* * * DtoCreateNestedContext for object.ModuleInfo.opApply | |
* * * * DtoCreateNestedContextType for object.ModuleInfo.opApply | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(165) | |
* * * * * ExpStatement::toIR(): object.d(166) | |
* * * * * * DeclarationExp::toElem: (ModuleInfo** start = null;) | T=void | |
* * * * * * * DtoDeclarationExp: start | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = ModuleInfo**) | |
* * * * * * * * * llvm value for decl: %3 = alloca %object.ModuleInfo**, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: start = null | (ModuleInfo**)(ModuleInfo** = ModuleInfo**) | |
* * * * * * * * * * VarExp::toElem: start @ ModuleInfo** | |
* * * * * * * * * * * DtoSymbolAddress ('start' of type 'ModuleInfo**') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * NullExp::toElem(type=ModuleInfo**): null | |
* * * * * * * * * * * NullExp::toConstElem(type=ModuleInfo**): null | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %3 = alloca %object.ModuleInfo**, align 8 | |
* * * * * * * * * * * rhs: %object.ModuleInfo** null | |
* * * * * ExpStatement::toIR(): object.d(167) | |
* * * * * * DeclarationExp::toElem: (ModuleInfo** end = null;) | T=void | |
* * * * * * * DtoDeclarationExp: end | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = ModuleInfo**) | |
* * * * * * * * * llvm value for decl: %4 = alloca %object.ModuleInfo**, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: end = null | (ModuleInfo**)(ModuleInfo** = ModuleInfo**) | |
* * * * * * * * * * VarExp::toElem: end @ ModuleInfo** | |
* * * * * * * * * * * DtoSymbolAddress ('end' of type 'ModuleInfo**') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * NullExp::toElem(type=ModuleInfo**): null | |
* * * * * * * * * * * NullExp::toConstElem(type=ModuleInfo**): null | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %4 = alloca %object.ModuleInfo**, align 8 | |
* * * * * * * * * * * rhs: %object.ModuleInfo** null | |
* * * * * ExpStatement::toIR(): object.d(170) | |
* * * * * * AssignExp::toElem: start = & _minfo_beg | (ModuleInfo**)(ModuleInfo** = ModuleInfo**) | |
* * * * * * * VarExp::toElem: start @ ModuleInfo** | |
* * * * * * * * DtoSymbolAddress ('start' of type 'ModuleInfo**') | |
* * * * * * * * * a normal variable | |
* * * * * * * SymOffExp::toElem: & _minfo_beg @ ModuleInfo** | |
* * * * * * * * DtoSymbolAddress ('_minfo_beg' of type 'void*') | |
* * * * * * * * * a normal variable | |
* * * * * * * * * DtoResolveVariable(object._minfo_beg) | |
* * * * * * * * * * data segment | |
* * * * * * * * * * parent: object (module) | |
* * * * * * * * * * @_minfo_beg = external global i8*, align 8 | |
* * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * DtoAssign() | |
* * * * * * * * lhs: %3 = alloca %object.ModuleInfo**, align 8 | |
* * * * * * * * rhs: %object.ModuleInfo** bitcast (i8** @_minfo_beg to %object.ModuleInfo**) | |
* * * * * ExpStatement::toIR(): object.d(171) | |
* * * * * * AssignExp::toElem: end = & _minfo_end | (ModuleInfo**)(ModuleInfo** = ModuleInfo**) | |
* * * * * * * VarExp::toElem: end @ ModuleInfo** | |
* * * * * * * * DtoSymbolAddress ('end' of type 'ModuleInfo**') | |
* * * * * * * * * a normal variable | |
* * * * * * * SymOffExp::toElem: & _minfo_end @ ModuleInfo** | |
* * * * * * * * DtoSymbolAddress ('_minfo_end' of type 'void*') | |
* * * * * * * * * a normal variable | |
* * * * * * * * * DtoResolveVariable(object._minfo_end) | |
* * * * * * * * * * data segment | |
* * * * * * * * * * parent: object (module) | |
* * * * * * * * * * @_minfo_end = external global i8*, align 8 | |
* * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * DtoAssign() | |
* * * * * * * * lhs: %4 = alloca %object.ModuleInfo**, align 8 | |
* * * * * * * * rhs: %object.ModuleInfo** bitcast (i8** @_minfo_end to %object.ModuleInfo**) | |
* * * * * ForStatement::toIR(): object.d(173) | |
* * * * * * IdentityExp::toElem: start !is end @ bool | |
* * * * * * * VarExp::toElem: start @ ModuleInfo** | |
* * * * * * * * DtoSymbolAddress ('start' of type 'ModuleInfo**') | |
* * * * * * * * * a normal variable | |
* * * * * * * VarExp::toElem: end @ ModuleInfo** | |
* * * * * * * * DtoSymbolAddress ('end' of type 'ModuleInfo**') | |
* * * * * * * * * a normal variable | |
* * * * * * ScopeStatement::toIR(): object.d(173) | |
* * * * * * * CompoundStatement::toIR(): object.d(173) | |
* * * * * * * * ExpStatement::toIR(): object.d(174) | |
* * * * * * * * * DeclarationExp::toElem: (ModuleInfo* m = *start;) | T=void | |
* * * * * * * * * * DtoDeclarationExp: m | |
* * * * * * * * * * * VarDeclaration | |
* * * * * * * * * * * DtoVarDeclaration(vdtype = ModuleInfo*) | |
* * * * * * * * * * * * llvm value for decl: %5 = alloca %object.ModuleInfo*, align 8 | |
* * * * * * * * * * * * expression initializer | |
* * * * * * * * * * * * AssignExp::toElem: m = *start | (ModuleInfo*)(ModuleInfo* = ModuleInfo*) | |
* * * * * * * * * * * * * VarExp::toElem: m @ ModuleInfo* | |
* * * * * * * * * * * * * * DtoSymbolAddress ('m' of type 'ModuleInfo*') | |
* * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * PtrExp::toElem: *start @ ModuleInfo* | |
* * * * * * * * * * * * * * VarExp::toElem: start @ ModuleInfo** | |
* * * * * * * * * * * * * * * DtoSymbolAddress ('start' of type 'ModuleInfo**') | |
* * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * * lhs: %5 = alloca %object.ModuleInfo*, align 8 | |
* * * * * * * * * * * * * * rhs: %13 = load %object.ModuleInfo*, %object.ModuleInfo** %12 | |
* * * * * * * * IfStatement::toIR(): object.d(175) | |
* * * * * * * * * IdentityExp::toElem: m !is null @ bool | |
* * * * * * * * * * VarExp::toElem: m @ ModuleInfo* | |
* * * * * * * * * * * DtoSymbolAddress ('m' of type 'ModuleInfo*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * NullExp::toElem(type=ModuleInfo*): null | |
* * * * * * * * * * * NullExp::toConstElem(type=ModuleInfo*): null | |
* * * * * * * * * ScopeStatement::toIR(): object.d(175) | |
* * * * * * * * * * IfStatement::toIR(): object.d(176) | |
* * * * * * * * * * * CommaExp::toElem: (int res = dg(m);) , res @ int | |
* * * * * * * * * * * * DeclarationExp::toElem: (int res = dg(m);) | T=void | |
* * * * * * * * * * * * * DtoDeclarationExp: res | |
* * * * * * * * * * * * * * VarDeclaration | |
* * * * * * * * * * * * * * DtoVarDeclaration(vdtype = int) | |
* * * * * * * * * * * * * * * llvm value for decl: %6 = alloca i32, align 4 | |
* * * * * * * * * * * * * * * expression initializer | |
* * * * * * * * * * * * * * * AssignExp::toElem: res = dg(m) | (int)(int = int) | |
* * * * * * * * * * * * * * * * VarExp::toElem: res @ int | |
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('res' of type 'int') | |
* * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * CallExp::toElem: dg(m) @ int | |
* * * * * * * * * * * * * * * * * VarExp::toElem: dg @ int delegate(ref ModuleInfo*) | |
* * * * * * * * * * * * * * * * * * DtoSymbolAddress ('dg' of type 'int delegate(ref ModuleInfo*)') | |
* * * * * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * * * * type: int delegate(ref ModuleInfo*) | |
* * * * * * * * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * * * * * * VarExp::toElem: m @ ModuleInfo* | |
* * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('m' of type 'ModuleInfo*') | |
* * * * * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * * * * * * * %21 = load i8*, i8** %20 | |
* * * * * * * * * * * * * * * * * * Function type: int(ref ModuleInfo*) | |
* * * * * * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * * * * * lhs: %6 = alloca i32, align 4 | |
* * * * * * * * * * * * * * * * * rhs: %22 = call i32 %19(i8* nonnull %21, %object.ModuleInfo** dereferenceable(8) %5) | |
* * * * * * * * * * * * VarExp::toElem: res @ int | |
* * * * * * * * * * * * * DtoSymbolAddress ('res' of type 'int') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * if conditional: %23 = load i32, i32* %6 | |
* * * * * * * * * * * Casting from 'int' to 'bool' | |
* * * * * * * * * * * ReturnStatement::toIR(): object.d(177) | |
* * * * * * * * * * * * VarExp::toElem: res @ int | |
* * * * * * * * * * * * * DtoSymbolAddress ('res' of type 'int') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * ExpStatement::toIR(): object.d(179) | |
* * * * * * * * * PostExp::toElem: start++ @ ModuleInfo** | |
* * * * * * * * * * VarExp::toElem: start @ ModuleInfo** | |
* * * * * * * * * * * DtoSymbolAddress ('start' of type 'ModuleInfo**') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * IntegerExp::toElem: 8L @ long | |
* * * * * * * * * * * IntegerExp::toConstElem: 8L @ long | |
* * * * * * * * * * * * value = i64 8 | |
* * * * * ReturnStatement::toIR(): object.d(181) | |
* * * * * * IntegerExp::toElem: 0 @ int | |
* * * * * * * IntegerExp::toConstElem: 0 @ int | |
* * * * * * * * value = i32 0 | |
* * DtoDefineFunction(object.ModuleInfo.__fieldPostblit): object.d(37) | |
* * * isMember = this is: ModuleInfo | |
* * * DtoFunctionType(pure nothrow @nogc @safe void()) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (%object.ModuleInfo*) | |
* * * DtoResolveFunction(object.ModuleInfo.__fieldPostblit): object.d(37) | |
* * * * DtoDeclareFunction(object.ModuleInfo.__fieldPostblit): object.d(37) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: ModuleInfo | |
* * * * * DtoFunctionType(pure nothrow @nogc @safe void()) | |
* * * * * func = | |
declare void @_D6object10ModuleInfo15__fieldPostblitMFNaNbNiNfZv(%object.ModuleInfo*) | |
* * DtoDefineFunction(object.ModuleInfo.__aggrPostblit): object.d(37) | |
* * * isMember = this is: ModuleInfo | |
* * * DtoFunctionType(pure nothrow @nogc @safe void()) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (%object.ModuleInfo*) | |
* * * DtoResolveFunction(object.ModuleInfo.__aggrPostblit): object.d(37) | |
* * * * DtoDeclareFunction(object.ModuleInfo.__aggrPostblit): object.d(37) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: ModuleInfo | |
* * * * * DtoFunctionType(pure nothrow @nogc @safe void()) | |
* * * * * func = | |
declare void @_D6object10ModuleInfo14__aggrPostblitMFNaNbNiNfZv(%object.ModuleInfo*) | |
* * * Doing function body for: __aggrPostblit | |
* * * DtoCreateNestedContext for object.ModuleInfo.__aggrPostblit | |
* * * * DtoCreateNestedContextType for object.ModuleInfo.__aggrPostblit | |
* * * CompoundStatement::toIR(): | |
* * * * ExpStatement::toIR(): | |
* * Ignoring Dsymbol::codegen for object.ModuleInfo.__xpostblit | |
* * DtoDefineFunction(object.ModuleInfo.opAssign): object.d(32) | |
* * * isMember = this is: ModuleInfo | |
* * * DtoFunctionType(pure nothrow @nogc ref return @trusted ModuleInfo(ModuleInfo p)) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: %object.ModuleInfo* (%object.ModuleInfo*, %object.ModuleInfo*) | |
* * * DtoResolveFunction(object.ModuleInfo.opAssign): object.d(32) | |
* * * * DtoDeclareFunction(object.ModuleInfo.opAssign): object.d(32) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: ModuleInfo | |
* * * * * DtoFunctionType(pure nothrow @nogc ref return @trusted ModuleInfo(ModuleInfo p)) | |
* * * * * func = | |
declare %object.ModuleInfo* @_D6object10ModuleInfo8opAssignMFNaNbNcNiNjNeSQBrQBnZQi(%object.ModuleInfo*, %object.ModuleInfo*) | |
* * * Doing function body for: opAssign | |
* * * DtoCreateNestedContext for object.ModuleInfo.opAssign | |
* * * * DtoCreateNestedContextType for object.ModuleInfo.opAssign | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): | |
* * * * * ExpStatement::toIR(): | |
* * * * * * AssignExp::toElem: this = p | (ModuleInfo)(ModuleInfo = ModuleInfo) | |
* * * * * * * ThisExp::toElem: this @ ModuleInfo | |
* * * * * * * * normal this exp | |
* * * * * * * VarExp::toElem: p @ ModuleInfo | |
* * * * * * * * DtoSymbolAddress ('p' of type 'ModuleInfo') | |
* * * * * * * * * function param | |
* * * * * * * * * type: ModuleInfo | |
* * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * DtoAssign() | |
* * * * * ReturnStatement::toIR(): | |
* * * * * * ThisExp::toElem: this @ ModuleInfo | |
* * * * * * * normal this exp | |
* * Building default initializer for object.ModuleInfo | |
* * * Creating initializer constant for ModuleInfo | |
* * * * Field priority for _flags: 1 | |
* * * * Field priority for _index: 1 | |
* * * * DtoConstExpInit(targetType = uint, exp = 0u) | |
* * * * * IntegerExp::toConstElem: 0u @ uint | |
* * * * * * value = i32 0 | |
* * * * DtoConstExpInit(targetType = uint, exp = 0u) | |
* * * * * IntegerExp::toConstElem: 0u @ uint | |
* * * * * * value = i32 0 | |
* * * * final initializer: %object.ModuleInfo zeroinitializer | |
* * DtoTypeInfoOf(type = 'ModuleInfo', base='0') | |
* * * Type::getTypeInfo(): ModuleInfo | |
* * * * TypeInfoDeclaration_codegen(typeid(ModuleInfo)) | |
* * * * * type = 'ModuleInfo' | |
* * * * * typeinfo mangle: _D29TypeInfo_S6object10ModuleInfo6__initZ | |
* * * * * TypeInfoStructDeclaration::llvmDefine() typeid(ModuleInfo) | |
* * * * * * DtoResolveClass(object.TypeInfo_Struct): object.d(588) | |
* * * * * * * DtoResolveClass(object.TypeInfo): object.d(261) | |
* * * * * * * * DtoResolveClass(object.Object): object.d(186) | |
* * * TypeInfoDeclaration_codegen(typeid(ModuleInfo)) | |
* ClassDeclaration::codegen: 'object.Object' | |
* * DtoDefineFunction(object.Object.toString): object.d(188) | |
* * * isMember = this is: object.Object | |
* * * DtoFunctionType(string()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.Object*) | |
* * * DtoResolveFunction(object.Object.toString): object.d(188) | |
* * * * DtoDeclareFunction(object.Object.toString): object.d(188) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.Object | |
* * * * * DtoFunctionType(string()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object6Object8toStringMFZAya(%object.Object*) | |
* * * Doing function body for: toString | |
* * * DtoCreateNestedContext for object.Object.toString | |
* * * * DtoCreateNestedContextType for object.Object.toString | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(189) | |
* * * * * DotVarExp::toElem: typeid(this).name @ string | |
* * * * * * ThisExp::toElem: this @ object.Object | |
* * * * * * * normal this exp | |
* * * * * * Indexing aggregate field object.TypeInfo_Class.name: | |
* * * * * * * DtoResolveClass(object.TypeInfo_Class): object.d(373) | |
* * * * * * * Value: %10 = getelementptr inbounds %object.TypeInfo_Class, %object.TypeInfo_Class* %9, i32 0, i32 3 | |
* * DtoDefineFunction(object.Object.toHash): object.d(193) | |
* * * isMember = this is: object.Object | |
* * * DtoFunctionType(nothrow @trusted ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.Object*) | |
* * * DtoResolveFunction(object.Object.toHash): object.d(193) | |
* * * * DtoDeclareFunction(object.Object.toHash): object.d(193) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.Object | |
* * * * * DtoFunctionType(nothrow @trusted ulong()) | |
* * * * * func = | |
declare i64 @_D6object6Object6toHashMFNbNeZm(%object.Object*) | |
* * * Doing function body for: toHash | |
* * * DtoCreateNestedContext for object.Object.toHash | |
* * * * DtoCreateNestedContextType for object.Object.toHash | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(194) | |
* * * * * CastExp::toElem: cast(ulong)cast(void*)this @ ulong | |
* * * * * * CastExp::toElem: cast(void*)this @ void* | |
* * * * * * * ThisExp::toElem: this @ object.Object | |
* * * * * * * * normal this exp | |
* * * * * * * Casting from 'object.Object' to 'void*' | |
* * * * * * * * DtoCastClass(object.Object, void*) | |
* * * * * * * * * to pointer | |
* * * * * * Casting from 'void*' to 'ulong' | |
* * DtoDefineFunction(object.Object.opCmp): object.d(198) | |
* * * isMember = this is: object.Object | |
* * * DtoFunctionType(int(Object o)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.Object*, %object.Object*) | |
* * * DtoResolveFunction(object.Object.opCmp): object.d(198) | |
* * * * DtoDeclareFunction(object.Object.opCmp): object.d(198) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.Object | |
* * * * * DtoFunctionType(int(Object o)) | |
* * * * * func = | |
declare i32 @_D6object6Object5opCmpMFCQqZi(%object.Object*, %object.Object*) | |
* * * Doing function body for: opCmp | |
* * * DtoCreateNestedContext for object.Object.opCmp | |
* * * * DtoCreateNestedContextType for object.Object.opCmp | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(198) | |
* * * * * ExpStatement::toIR(): object.d(199) | |
* * * * * * DeclarationExp::toElem: (ulong a = cast(ulong)cast(void*)this;) | T=void | |
* * * * * * * DtoDeclarationExp: a | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * llvm value for decl: %5 = alloca i64, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: a = cast(ulong)cast(void*)this | (ulong)(ulong = ulong) | |
* * * * * * * * * * VarExp::toElem: a @ ulong | |
* * * * * * * * * * * DtoSymbolAddress ('a' of type 'ulong') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CastExp::toElem: cast(ulong)cast(void*)this @ ulong | |
* * * * * * * * * * * CastExp::toElem: cast(void*)this @ void* | |
* * * * * * * * * * * * ThisExp::toElem: this @ object.Object | |
* * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * Casting from 'object.Object' to 'void*' | |
* * * * * * * * * * * * * DtoCastClass(object.Object, void*) | |
* * * * * * * * * * * * * * to pointer | |
* * * * * * * * * * * Casting from 'void*' to 'ulong' | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %5 = alloca i64, align 8 | |
* * * * * * * * * * * rhs: %9 = ptrtoint i8* %8 to i64 | |
* * * * * ExpStatement::toIR(): object.d(200) | |
* * * * * * DeclarationExp::toElem: (ulong b = cast(ulong)cast(void*)o;) | T=void | |
* * * * * * * DtoDeclarationExp: b | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * llvm value for decl: %6 = alloca i64, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: b = cast(ulong)cast(void*)o | (ulong)(ulong = ulong) | |
* * * * * * * * * * VarExp::toElem: b @ ulong | |
* * * * * * * * * * * DtoSymbolAddress ('b' of type 'ulong') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CastExp::toElem: cast(ulong)cast(void*)o @ ulong | |
* * * * * * * * * * * CastExp::toElem: cast(void*)o @ void* | |
* * * * * * * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * type: object.Object | |
* * * * * * * * * * * * Casting from 'object.Object' to 'void*' | |
* * * * * * * * * * * * * DtoCastClass(object.Object, void*) | |
* * * * * * * * * * * * * * to pointer | |
* * * * * * * * * * * Casting from 'void*' to 'ulong' | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %6 = alloca i64, align 8 | |
* * * * * * * * * * * rhs: %13 = ptrtoint i8* %12 to i64 | |
* * * * * IfStatement::toIR(): object.d(202) | |
* * * * * * CmpExp::toElem: a < b @ bool | |
* * * * * * * VarExp::toElem: a @ ulong | |
* * * * * * * * DtoSymbolAddress ('a' of type 'ulong') | |
* * * * * * * * * a normal variable | |
* * * * * * * VarExp::toElem: b @ ulong | |
* * * * * * * * DtoSymbolAddress ('b' of type 'ulong') | |
* * * * * * * * * a normal variable | |
* * * * * * * type 1: %14 = load i64, i64* %5 | |
* * * * * * * type 2: %15 = load i64, i64* %6 | |
* * * * * * ReturnStatement::toIR(): object.d(203) | |
* * * * * * * IntegerExp::toElem: -1 @ int | |
* * * * * * * * IntegerExp::toConstElem: -1 @ int | |
* * * * * * * * * value = i32 -1 | |
* * * * * * IfStatement::toIR(): object.d(204) | |
* * * * * * * EqualExp::toElem: a == b @ bool | |
* * * * * * * * VarExp::toElem: a @ ulong | |
* * * * * * * * * DtoSymbolAddress ('a' of type 'ulong') | |
* * * * * * * * * * a normal variable | |
* * * * * * * * VarExp::toElem: b @ ulong | |
* * * * * * * * * DtoSymbolAddress ('b' of type 'ulong') | |
* * * * * * * * * * a normal variable | |
* * * * * * * * integral or pointer or interface | |
* * * * * * * * lv: %20 = load i64, i64* %5 | |
* * * * * * * * rv: %21 = load i64, i64* %6 | |
* * * * * * * ReturnStatement::toIR(): object.d(205) | |
* * * * * * * * IntegerExp::toElem: 0 @ int | |
* * * * * * * * * IntegerExp::toConstElem: 0 @ int | |
* * * * * * * * * * value = i32 0 | |
* * * * * * * ReturnStatement::toIR(): object.d(207) | |
* * * * * * * * IntegerExp::toElem: 1 @ int | |
* * * * * * * * * IntegerExp::toConstElem: 1 @ int | |
* * * * * * * * * * value = i32 1 | |
* * DtoDefineFunction(object.Object.opEquals): object.d(212) | |
* * * isMember = this is: object.Object | |
* * * DtoFunctionType(bool(Object o)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i1 (%object.Object*, %object.Object*) | |
* * * DtoResolveFunction(object.Object.opEquals): object.d(212) | |
* * * * DtoDeclareFunction(object.Object.opEquals): object.d(212) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.Object | |
* * * * * DtoFunctionType(bool(Object o)) | |
* * * * * func = | |
declare i1 @_D6object6Object8opEqualsMFCQtZb(%object.Object*, %object.Object*) | |
* * * Doing function body for: opEquals | |
* * * DtoCreateNestedContext for object.Object.opEquals | |
* * * * DtoCreateNestedContextType for object.Object.opEquals | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(213) | |
* * * * * IdentityExp::toElem: this is o @ bool | |
* * * * * * ThisExp::toElem: this @ object.Object | |
* * * * * * * normal this exp | |
* * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * function param | |
* * * * * * * * type: object.Object | |
* * InterfaceDeclaration::codegen: 'object.Object.Monitor' | |
* * * DtoResolveClass(object.Object.Monitor): object.d(216) | |
* * * * Building type: object.Object.Monitor | |
* * * * * Building class type object.Object.Monitor @ object.d(216) | |
* * * * * * Instance size: 8 | |
* * * * * * class type: %object.Object.Monitor = type { [3 x i8*]* } | |
* * * DtoDefineFunction(object.Object.Monitor.lock): object.d(217) | |
* * * * isMember = this is: object.Object.Monitor | |
* * * * DtoFunctionType(void()) | |
* * * * * x86-64 ABI: Transforming argument types | |
* * * * * Final function type: void (%object.Object.Monitor*) | |
* * * * DtoResolveFunction(object.Object.Monitor.lock): object.d(217) | |
* * * * DtoDeclareFunction(object.Object.Monitor.lock): object.d(217) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.Object.Monitor | |
* * * * * DtoFunctionType(void()) | |
* * * * * func = | |
declare void @_D6object6Object7Monitor4lockMFZv(%object.Object.Monitor*) | |
* * * DtoDefineFunction(object.Object.Monitor.unlock): object.d(218) | |
* * * * isMember = this is: object.Object.Monitor | |
* * * * DtoFunctionType(void()) | |
* * * * * x86-64 ABI: Transforming argument types | |
* * * * * Final function type: void (%object.Object.Monitor*) | |
* * * * DtoResolveFunction(object.Object.Monitor.unlock): object.d(218) | |
* * * * DtoDeclareFunction(object.Object.Monitor.unlock): object.d(218) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.Object.Monitor | |
* * * * * DtoFunctionType(void()) | |
* * * * * func = | |
declare void @_D6object6Object7Monitor6unlockMFZv(%object.Object.Monitor*) | |
* * * DtoTypeInfoOf(type = 'object.Object.Monitor', base='0') | |
* * * * Type::getTypeInfo(): object.Object.Monitor | |
* * * * * TypeInfoDeclaration_codegen(typeid(object.Object.Monitor)) | |
* * * * * * type = 'object.Object.Monitor' | |
* * * * * * typeinfo mangle: _D32TypeInfo_C6object6Object7Monitor6__initZ | |
* * * * * * Building type: object.TypeInfo_Interface | |
* * * * * * * Building class type object.TypeInfo_Interface @ object.d(526) | |
* * * * * * * * Instance size: 24 | |
* * * * * * * * Field priority for info: 1 | |
* * * * * * * * class type: %object.TypeInfo_Interface = type { [19 x i8*]*, i8*, %object.TypeInfo_Class* } | |
* * * * * * TypeInfoInterfaceDeclaration::llvmDefine() typeid(object.Object.Monitor) | |
* * * * * * * DtoResolveClass(object.TypeInfo_Interface): object.d(526) | |
* * * * TypeInfoDeclaration_codegen(typeid(object.Object.Monitor)) | |
* * * DtoDefineClassInfo(Monitor) | |
* * * * Building ClassInfo.interfaces | |
* * DtoDefineFunction(object.Object.factory): object.d(227) | |
* * * DtoFunctionType(Object(string classname)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: %object.Object* ({ i64, i8* }) | |
* * * DtoResolveFunction(object.Object.factory): object.d(227) | |
* * * * DtoDeclareFunction(object.Object.factory): object.d(227) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * DtoFunctionType(Object(string classname)) | |
* * * * * func = | |
declare %object.Object* @_D6object6Object7factoryFAyaZCQv({ i64, i8* }) | |
* * * Doing function body for: factory | |
* * * DtoCreateNestedContext for object.Object.factory | |
* * * * DtoCreateNestedContextType for object.Object.factory | |
* * * CompoundStatement::toIR(): | |
* * * * ExpStatement::toIR(): object.d(228) | |
* * * * * AssertExp::toElem: assert(0) | |
* * * * * * IntegerExp::toElem: 0 @ int | |
* * * * * * * IntegerExp::toConstElem: 0 @ int | |
* * * * * * * * value = i32 0 | |
* * * * * * Casting from 'int' to 'bool' | |
* * Building default initializer for object.Object | |
* * * Creating initializer constant for Object | |
* * * * final initializer: %object.Object { [5 x i8*]* @_D6Object6__vtblZ, i8* null } | |
* * Building vtbl initializer | |
* * DtoDefineClassInfo(Object) | |
* * * Building ClassInfo.interfaces | |
* DtoDefineFunction(object.opEquals): object.d(233) | |
* * DtoFunctionType(@system bool(Object lhs, Object rhs)) | |
* * * x86-64 ABI: Transforming return type | |
* * * x86-64 ABI: Transforming argument types | |
* * * Final function type: i1 (%object.Object*, %object.Object*) | |
* * DtoResolveFunction(object.opEquals): object.d(233) | |
* * * DtoDeclareFunction(object.opEquals): object.d(233) | |
* * * * Enter defineAsExternallyAvailable | |
* * * * * Cross-module inlining fully disabled. | |
* * * * DtoFunctionType(@system bool(Object lhs, Object rhs)) | |
* * * * func = | |
declare i1 @_D6object8opEqualsFC6ObjectQiZb(%object.Object*, %object.Object*) | |
* * Doing function body for: opEquals | |
* * DtoCreateNestedContext for object.opEquals | |
* * * DtoCreateNestedContextType for object.opEquals | |
* * CompoundStatement::toIR(): | |
* * * CompoundStatement::toIR(): object.d(233) | |
* * * * IfStatement::toIR(): object.d(234) | |
* * * * * IdentityExp::toElem: lhs is rhs @ bool | |
* * * * * * VarExp::toElem: lhs @ object.Object | |
* * * * * * * DtoSymbolAddress ('lhs' of type 'object.Object') | |
* * * * * * * * function param | |
* * * * * * * * type: object.Object | |
* * * * * * VarExp::toElem: rhs @ object.Object | |
* * * * * * * DtoSymbolAddress ('rhs' of type 'object.Object') | |
* * * * * * * * function param | |
* * * * * * * * type: object.Object | |
* * * * * ReturnStatement::toIR(): object.d(235) | |
* * * * * * IntegerExp::toElem: true @ bool | |
* * * * * * * IntegerExp::toConstElem: true @ bool | |
* * * * * * * * value = i1 true | |
* * * * IfStatement::toIR(): object.d(237) | |
* * * * * IdentityExp::toElem: typeid(lhs) is typeid(rhs) @ bool | |
* * * * * * VarExp::toElem: lhs @ object.Object | |
* * * * * * * DtoSymbolAddress ('lhs' of type 'object.Object') | |
* * * * * * * * function param | |
* * * * * * * * type: object.Object | |
* * * * * * VarExp::toElem: rhs @ object.Object | |
* * * * * * * DtoSymbolAddress ('rhs' of type 'object.Object') | |
* * * * * * * * function param | |
* * * * * * * * type: object.Object | |
* * * * * ReturnStatement::toIR(): object.d(238) | |
* * * * * * CallExp::toElem: lhs.opEquals(rhs) @ bool | |
* * * * * * * DotVarExp::toElem: lhs.opEquals @ bool(Object o) | |
* * * * * * * * VarExp::toElem: lhs @ object.Object | |
* * * * * * * * * DtoSymbolAddress ('lhs' of type 'object.Object') | |
* * * * * * * * * * function param | |
* * * * * * * * * * type: object.Object | |
* * * * * * * * vthis: %26 = load %object.Object*, %object.Object** %3 | |
* * * * * * * * funcval: %30 = load i8*, i8** %29, align 8 | |
* * * * * * * * isMember = this is: object.Object | |
* * * * * * * * DtoFunctionType(bool(Object o)) | |
* * * * * * * * funcval casted: %31 = bitcast i8* %30 to i1 (%object.Object*, %object.Object*)* | |
* * * * * * * DtoCallFunction() | |
* * * * * * * * Evaluating argument expressions | |
* * * * * * * * * DtoArgument | |
* * * * * * * * * * VarExp::toElem: rhs @ object.Object | |
* * * * * * * * * * * DtoSymbolAddress ('rhs' of type 'object.Object') | |
* * * * * * * * * * * * function param | |
* * * * * * * * * * * * type: object.Object | |
* * * * * * * * Building type: bool(Object o) | |
* * * * * * * * * DtoFunctionType(bool(Object o)) | |
* * * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * Final function type: i1 (%object.Object*) | |
* * * * * * * * doing normal arguments | |
* * * * * * * * Arguments so far: (1) | |
* * * * * * * * * %32 = load %object.Object*, %object.Object** %3 | |
* * * * * * * * Function type: bool(Object o) | |
* * * * ReturnStatement::toIR(): object.d(240) | |
* * * * * LogicalExp::toElem: lhs.opEquals(rhs) && rhs.opEquals(lhs) @ bool | |
* * * * * * CallExp::toElem: lhs.opEquals(rhs) @ bool | |
* * * * * * * DotVarExp::toElem: lhs.opEquals @ bool(Object o) | |
* * * * * * * * VarExp::toElem: lhs @ object.Object | |
* * * * * * * * * DtoSymbolAddress ('lhs' of type 'object.Object') | |
* * * * * * * * * * function param | |
* * * * * * * * * * type: object.Object | |
* * * * * * * * vthis: %37 = load %object.Object*, %object.Object** %3 | |
* * * * * * * * funcval: %41 = load i8*, i8** %40, align 8 | |
* * * * * * * * isMember = this is: object.Object | |
* * * * * * * * DtoFunctionType(bool(Object o)) | |
* * * * * * * * funcval casted: %42 = bitcast i8* %41 to i1 (%object.Object*, %object.Object*)* | |
* * * * * * * DtoCallFunction() | |
* * * * * * * * Evaluating argument expressions | |
* * * * * * * * * DtoArgument | |
* * * * * * * * * * VarExp::toElem: rhs @ object.Object | |
* * * * * * * * * * * DtoSymbolAddress ('rhs' of type 'object.Object') | |
* * * * * * * * * * * * function param | |
* * * * * * * * * * * * type: object.Object | |
* * * * * * * * doing normal arguments | |
* * * * * * * * Arguments so far: (1) | |
* * * * * * * * * %43 = load %object.Object*, %object.Object** %3 | |
* * * * * * * * Function type: bool(Object o) | |
* * * * * * CallExp::toElem: rhs.opEquals(lhs) @ bool | |
* * * * * * * DotVarExp::toElem: rhs.opEquals @ bool(Object o) | |
* * * * * * * * VarExp::toElem: rhs @ object.Object | |
* * * * * * * * * DtoSymbolAddress ('rhs' of type 'object.Object') | |
* * * * * * * * * * function param | |
* * * * * * * * * * type: object.Object | |
* * * * * * * * vthis: %47 = load %object.Object*, %object.Object** %4 | |
* * * * * * * * funcval: %51 = load i8*, i8** %50, align 8 | |
* * * * * * * * isMember = this is: object.Object | |
* * * * * * * * DtoFunctionType(bool(Object o)) | |
* * * * * * * * funcval casted: %52 = bitcast i8* %51 to i1 (%object.Object*, %object.Object*)* | |
* * * * * * * DtoCallFunction() | |
* * * * * * * * Evaluating argument expressions | |
* * * * * * * * * DtoArgument | |
* * * * * * * * * * VarExp::toElem: lhs @ object.Object | |
* * * * * * * * * * * DtoSymbolAddress ('lhs' of type 'object.Object') | |
* * * * * * * * * * * * function param | |
* * * * * * * * * * * * type: object.Object | |
* * * * * * * * doing normal arguments | |
* * * * * * * * Arguments so far: (1) | |
* * * * * * * * * %53 = load %object.Object*, %object.Object** %4 | |
* * * * * * * * Function type: bool(Object o) | |
* DtoDefineFunction(object.opEquals): object.d(243) | |
* * DtoFunctionType(@system bool(const(Object) lhs, const(Object) rhs)) | |
* * * x86-64 ABI: Transforming return type | |
* * * x86-64 ABI: Transforming argument types | |
* * * Final function type: i1 (%object.Object*, %object.Object*) | |
* * DtoResolveFunction(object.opEquals): object.d(243) | |
* * * DtoDeclareFunction(object.opEquals): object.d(243) | |
* * * * Enter defineAsExternallyAvailable | |
* * * * * Cross-module inlining fully disabled. | |
* * * * DtoFunctionType(@system bool(const(Object) lhs, const(Object) rhs)) | |
* * * * func = | |
declare i1 @_D6object8opEqualsFxC6ObjectxQjZb(%object.Object*, %object.Object*) | |
* * Doing function body for: opEquals | |
* * DtoCreateNestedContext for object.opEquals | |
* * * DtoCreateNestedContextType for object.opEquals | |
* * CompoundStatement::toIR(): | |
* * * ReturnStatement::toIR(): object.d(244) | |
* * * * CallExp::toElem: opEquals(lhs, rhs) @ bool | |
* * * * * VarExp::toElem: opEquals @ @system bool(Object lhs, Object rhs) | |
* * * * * * DtoSymbolAddress ('opEquals' of type '@system bool(Object lhs, Object rhs)') | |
* * * * * * * FuncDeclaration | |
* * * * * DtoCallFunction() | |
* * * * * * Evaluating argument expressions | |
* * * * * * * DtoArgument | |
* * * * * * * * VarExp::toElem: lhs @ object.Object | |
* * * * * * * * * DtoSymbolAddress ('lhs' of type 'const(Object)') | |
* * * * * * * * * * function param | |
* * * * * * * * * * type: const(Object) | |
* * * * * * * DtoArgument | |
* * * * * * * * VarExp::toElem: rhs @ object.Object | |
* * * * * * * * * DtoSymbolAddress ('rhs' of type 'const(Object)') | |
* * * * * * * * * * function param | |
* * * * * * * * * * type: const(Object) | |
* * * * * * Building type: @system bool(Object lhs, Object rhs) | |
* * * * * * * DtoFunctionType(@system bool(Object lhs, Object rhs)) | |
* * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * Final function type: i1 (%object.Object*, %object.Object*) | |
* * * * * * doing normal arguments | |
* * * * * * Arguments so far: (0) | |
* * * * * * Function type: @system bool(Object lhs, Object rhs) | |
* StructDeclaration::codegen: 'object.Interface' | |
* * Resolving struct type: Interface (object.d(248)) | |
* * VarDeclaration::codegen(): 'object.Interface.classinfo' | |
* * * DtoResolveVariable(object.Interface.classinfo) | |
* * VarDeclaration::codegen(): 'object.Interface.vtbl' | |
* * * DtoResolveVariable(object.Interface.vtbl) | |
* * VarDeclaration::codegen(): 'object.Interface.offset' | |
* * * DtoResolveVariable(object.Interface.offset) | |
* * Building default initializer for object.Interface | |
* * * Creating initializer constant for Interface | |
* * * * Field priority for classinfo: 1 | |
* * * * Field priority for vtbl: 1 | |
* * * * Field priority for offset: 1 | |
* * * * DtoConstExpInit(targetType = object.TypeInfo_Class, exp = null) | |
* * * * * NullExp::toConstElem(type=object.TypeInfo_Class): null | |
* * * * DtoConstExpInit(targetType = void*[], exp = null) | |
* * * * * NullExp::toConstElem(type=void*[]): null | |
* * * * DtoConstExpInit(targetType = ulong, exp = 0LU) | |
* * * * * IntegerExp::toConstElem: 0LU @ ulong | |
* * * * * * value = i64 0 | |
* * * * final initializer: %object.Interface zeroinitializer | |
* * DtoTypeInfoOf(type = 'Interface', base='0') | |
* * * Type::getTypeInfo(): Interface | |
* * * * TypeInfoDeclaration_codegen(typeid(Interface)) | |
* * * * * type = 'Interface' | |
* * * * * typeinfo mangle: _D27TypeInfo_S6object9Interface6__initZ | |
* * * * * TypeInfoStructDeclaration::llvmDefine() typeid(Interface) | |
* * * * * * DtoFunctionType(nothrow @trusted ulong(ref const(Interface) p)) | |
* * * * * * * Building type: const(Interface)* | |
* * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * Final function type: i64 (%object.Interface*) | |
* * * * * * DtoResolveFunction(object.Interface.__xtoHash): | |
* * * * * * * DtoDeclareFunction(object.Interface.__xtoHash): | |
* * * * * * * * Enter defineAsExternallyAvailable | |
* * * * * * * * * Cross-module inlining fully disabled. | |
* * * * * * * * DtoFunctionType(nothrow @trusted ulong(ref const(Interface) p)) | |
* * * * * * * * func = | |
declare i64 @_D6object9Interface9__xtoHashFNbNeKxSQBjQBfZm(%object.Interface*) | |
* * * * * * DtoFunctionType(bool(ref const(Interface) p, ref const(Interface) q)) | |
* * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * Final function type: i1 (%object.Interface*, %object.Interface*) | |
* * * * * * DtoResolveFunction(object.Interface.__xopEquals): | |
* * * * * * * DtoDeclareFunction(object.Interface.__xopEquals): | |
* * * * * * * * Enter defineAsExternallyAvailable | |
* * * * * * * * * Cross-module inlining fully disabled. | |
* * * * * * * * DtoFunctionType(bool(ref const(Interface) p, ref const(Interface) q)) | |
* * * * * * * * func = | |
declare i1 @_D6object9Interface11__xopEqualsFKxSQBiQBeKxQjZb(%object.Interface*, %object.Interface*) | |
* * * TypeInfoDeclaration_codegen(typeid(Interface)) | |
* * DtoDefineFunction(object.Interface.__xopEquals): | |
* * * Doing function body for: __xopEquals | |
* * * DtoCreateNestedContext for object.Interface.__xopEquals | |
* * * * DtoCreateNestedContextType for object.Interface.__xopEquals | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): | |
* * * * * LogicalExp::toElem: opEquals(p.classinfo, q.classinfo) && p.vtbl == q.vtbl && p.offset == q.offset @ bool | |
* * * * * * LogicalExp::toElem: opEquals(p.classinfo, q.classinfo) && p.vtbl == q.vtbl @ bool | |
* * * * * * * CallExp::toElem: opEquals(p.classinfo, q.classinfo) @ bool | |
* * * * * * * * VarExp::toElem: opEquals @ @system bool(const(Object) lhs, const(Object) rhs) | |
* * * * * * * * * DtoSymbolAddress ('opEquals' of type '@system bool(const(Object) lhs, const(Object) rhs)') | |
* * * * * * * * * * FuncDeclaration | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * DtoArgument | |
* * * * * * * * * * * DotVarExp::toElem: p.classinfo @ const(Object) | |
* * * * * * * * * * * * VarExp::toElem: p @ const(Interface) | |
* * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'const(Interface)') | |
* * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * type: const(Interface) | |
* * * * * * * * * * * * Indexing aggregate field object.Interface.classinfo: | |
* * * * * * * * * * * * * Value: %4 = getelementptr inbounds %object.Interface, %object.Interface* %1, i32 0, i32 0 | |
* * * * * * * * * * DtoArgument | |
* * * * * * * * * * * DotVarExp::toElem: q.classinfo @ const(Object) | |
* * * * * * * * * * * * VarExp::toElem: q @ const(Interface) | |
* * * * * * * * * * * * * DtoSymbolAddress ('q' of type 'const(Interface)') | |
* * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * type: const(Interface) | |
* * * * * * * * * * * * Indexing aggregate field object.Interface.classinfo: | |
* * * * * * * * * * * * * Value: %6 = getelementptr inbounds %object.Interface, %object.Interface* %0, i32 0, i32 0 | |
* * * * * * * * * Building type: @system bool(const(Object) lhs, const(Object) rhs) | |
* * * * * * * * * * DtoFunctionType(@system bool(const(Object) lhs, const(Object) rhs)) | |
* * * * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * * Final function type: i1 (%object.Object*, %object.Object*) | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (0) | |
* * * * * * * * * Function type: @system bool(const(Object) lhs, const(Object) rhs) | |
* * * * * * * EqualExp::toElem: p.vtbl == q.vtbl @ bool | |
* * * * * * * * DotVarExp::toElem: p.vtbl @ const(void*[]) | |
* * * * * * * * * VarExp::toElem: p @ const(Interface) | |
* * * * * * * * * * DtoSymbolAddress ('p' of type 'const(Interface)') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: const(Interface) | |
* * * * * * * * * Indexing aggregate field object.Interface.vtbl: | |
* * * * * * * * * * Value: %12 = getelementptr inbounds %object.Interface, %object.Interface* %1, i32 0, i32 1 | |
* * * * * * * * * Building type: const(void*)[] | |
* * * * * * * * DotVarExp::toElem: q.vtbl @ const(void*[]) | |
* * * * * * * * * VarExp::toElem: q @ const(Interface) | |
* * * * * * * * * * DtoSymbolAddress ('q' of type 'const(Interface)') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: const(Interface) | |
* * * * * * * * * Indexing aggregate field object.Interface.vtbl: | |
* * * * * * * * * * Value: %13 = getelementptr inbounds %object.Interface, %object.Interface* %0, i32 0, i32 1 | |
* * * * * * * * static or dynamic array | |
* * * * * * * * Comparing arrays using memcmp | |
* * * * * * * * DtoArrayPtr | |
* * * * * * * * DtoArrayPtr | |
* * * * * * * * DtoArrayLen | |
* * * * * * * * DtoArrayLen | |
* * * * * * EqualExp::toElem: p.offset == q.offset @ bool | |
* * * * * * * DotVarExp::toElem: p.offset @ const(ulong) | |
* * * * * * * * VarExp::toElem: p @ const(Interface) | |
* * * * * * * * * DtoSymbolAddress ('p' of type 'const(Interface)') | |
* * * * * * * * * * function param | |
* * * * * * * * * * type: const(Interface) | |
* * * * * * * * Indexing aggregate field object.Interface.offset: | |
* * * * * * * * * Value: %34 = getelementptr inbounds %object.Interface, %object.Interface* %1, i32 0, i32 2 | |
* * * * * * * DotVarExp::toElem: q.offset @ const(ulong) | |
* * * * * * * * VarExp::toElem: q @ const(Interface) | |
* * * * * * * * * DtoSymbolAddress ('q' of type 'const(Interface)') | |
* * * * * * * * * * function param | |
* * * * * * * * * * type: const(Interface) | |
* * * * * * * * Indexing aggregate field object.Interface.offset: | |
* * * * * * * * * Value: %35 = getelementptr inbounds %object.Interface, %object.Interface* %0, i32 0, i32 2 | |
* * * * * * * integral or pointer or interface | |
* * * * * * * lv: %36 = load i64, i64* %34 | |
* * * * * * * rv: %37 = load i64, i64* %35 | |
* * DtoDefineFunction(object.Interface.__xtoHash): | |
* * * Doing function body for: __xtoHash | |
* * * DtoCreateNestedContext for object.Interface.__xtoHash | |
* * * * DtoCreateNestedContextType for object.Interface.__xtoHash | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): | |
* * * * * ExpStatement::toIR(): | |
* * * * * * DeclarationExp::toElem: (ulong h = 0LU;) | T=void | |
* * * * * * * DtoDeclarationExp: h | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * llvm value for decl: %2 = alloca i64, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: h = 0LU | (ulong)(ulong = ulong) | |
* * * * * * * * * * VarExp::toElem: h @ ulong | |
* * * * * * * * * * * DtoSymbolAddress ('h' of type 'ulong') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * IntegerExp::toElem: 0LU @ ulong | |
* * * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong | |
* * * * * * * * * * * * value = i64 0 | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %2 = alloca i64, align 8 | |
* * * * * * * * * * * rhs: i64 0 | |
* * * * * UnrolledLoopStatement::toIR(): | |
* * * * * * ScopeStatement::toIR(): | |
* * * * * * * CompoundStatement::toIR(): | |
* * * * * * * * ExpStatement::toIR(): | |
* * * * * * * * * DeclarationExp::toElem: (enum ulong i = 0LU;) | T=void | |
* * * * * * * * * * DtoDeclarationExp: i | |
* * * * * * * * * * * VarDeclaration | |
* * * * * * * * * * * Manifest constant, nothing to do. | |
* * * * * * * * ExpStatement::toIR(): | |
* * * * * * * * * DeclarationExp::toElem: alias T = const(TypeInfo_Class); | |
| T=void | |
* * * * * * * * * * DtoDeclarationExp: T | |
* * * * * * * * * * * Ignoring Symbol: alias | |
* * * * * * * * ExpStatement::toIR(): | |
* * * * * * * * * AddAssignExp::toElem: h += typeid(const(TypeInfo_Class)).getHash(cast(const(void*))&p.classinfo) @ ulong | |
* * * * * * * * * * VarExp::toElem: h @ ulong | |
* * * * * * * * * * * DtoSymbolAddress ('h' of type 'ulong') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CallExp::toElem: typeid(const(TypeInfo_Class)).getHash(cast(const(void*))&p.classinfo) @ ulong | |
* * * * * * * * * * * DotVarExp::toElem: typeid(const(TypeInfo_Class)).getHash @ const nothrow @safe ulong(const(void*) p) | |
* * * * * * * * * * * * Type::getTypeInfo(): const(TypeInfo_Class) | |
* * * * * * * * * * * * DtoSymbolAddress ('typeid(const(TypeInfo_Class))' of type 'object.TypeInfo_Const') | |
* * * * * * * * * * * * * TypeInfoDeclaration | |
* * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(const(TypeInfo_Class))) | |
* * * * * * * * * * * * * * type = 'const(TypeInfo_Class)' | |
* * * * * * * * * * * * * * typeinfo mangle: _D27TypeInfo_xC14TypeInfo_Class6__initZ | |
* * * * * * * * * * * * * * Building type: object.TypeInfo_Const | |
* * * * * * * * * * * * * * * Building class type object.TypeInfo_Const @ object.d(1016) | |
* * * * * * * * * * * * * * * * Instance size: 24 | |
* * * * * * * * * * * * * * * * Field priority for base: 1 | |
* * * * * * * * * * * * * * * * class type: %object.TypeInfo_Const = type { [19 x i8*]*, i8*, %object.TypeInfo* } | |
* * * * * * * * * * * * * * TypeInfoConstDeclaration::llvmDefine() typeid(const(TypeInfo_Class)) | |
* * * * * * * * * * * * * * * DtoResolveClass(object.TypeInfo_Const): object.d(1016) | |
* * * * * * * * * * * * * * * DtoTypeInfoOf(type = 'object.TypeInfo_Class', base='1') | |
* * * * * * * * * * * * * * * * Type::getTypeInfo(): object.TypeInfo_Class | |
* * * * * * * * * * * * * * * * * TypeInfoClassDeclaration_codegen(typeid(object.TypeInfo_Class)) | |
* * * * * * * * * * * * * * * * TypeInfoClassDeclaration_codegen(typeid(object.TypeInfo_Class)) | |
* * * * * * * * * * * * isMember = this is: object.TypeInfo_Const | |
* * * * * * * * * * * * DtoFunctionType(const nothrow @safe ulong(const(void*) p)) | |
* * * * * * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * * * * Final function type: i64 (%object.TypeInfo_Const*, i8*) | |
* * * * * * * * * * * * DtoResolveFunction(object.TypeInfo_Const.getHash): object.d(1029) | |
* * * * * * * * * * * * * DtoDeclareFunction(object.TypeInfo_Const.getHash): object.d(1029) | |
* * * * * * * * * * * * * * Enter defineAsExternallyAvailable | |
* * * * * * * * * * * * * * * Cross-module inlining fully disabled. | |
* * * * * * * * * * * * * * isMember = this is: object.TypeInfo_Const | |
* * * * * * * * * * * * * * DtoFunctionType(const nothrow @safe ulong(const(void*) p)) | |
* * * * * * * * * * * * * * func = | |
declare i64 @_D6object14TypeInfo_Const7getHashMxFNbNfxPvZm(%object.TypeInfo_Const*, i8*) | |
* * * * * * * * * * * * vthis: @_D27TypeInfo_xC14TypeInfo_Class6__initZ = linkonce_odr global %object.TypeInfo_Const { [19 x i8*]* @_D14TypeInfo_Const6__vtblZ, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D14TypeInfo_Class7__ClassZ to %object.TypeInfo*) }, comdat | |
* * * * * * * * * * * * funcval: %8 = load i8*, i8** %7, align 8 | |
* * * * * * * * * * * * isMember = this is: object.TypeInfo_Const | |
* * * * * * * * * * * * DtoFunctionType(const nothrow @safe ulong(const(void*) p)) | |
* * * * * * * * * * * * funcval casted: %9 = bitcast i8* %8 to i64 (%object.TypeInfo_Const*, i8*)* | |
* * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * CastExp::toElem: cast(const(void*))&p.classinfo @ const(void*) | |
* * * * * * * * * * * * * * * AddrExp::toElem: &p.classinfo @ const(TypeInfo_Class)* | |
* * * * * * * * * * * * * * * * DotVarExp::toElem: p.classinfo @ const(TypeInfo_Class) | |
* * * * * * * * * * * * * * * * * VarExp::toElem: p @ const(Interface) | |
* * * * * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'const(Interface)') | |
* * * * * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * * * * type: const(Interface) | |
* * * * * * * * * * * * * * * * * Indexing aggregate field object.Interface.classinfo: | |
* * * * * * * * * * * * * * * * * * Value: %10 = getelementptr inbounds %object.Interface, %object.Interface* %0, i32 0, i32 0 | |
* * * * * * * * * * * * * * * * is nothing special | |
* * * * * * * * * * * * * * * * lval: %10 = getelementptr inbounds %object.Interface, %object.Interface* %0, i32 0, i32 0 | |
* * * * * * * * * * * * * * * * Building type: const(TypeInfo_Class)* | |
* * * * * * * * * * * * * * * Casting from 'const(TypeInfo_Class)*' to 'const(void*)' | |
* * * * * * * * * * * * * * * * src: %10 = getelementptr inbounds %object.Interface, %object.Interface* %0, i32 0, i32 0 | |
* * * * * * * * * * * * * * * * to type: i8* | |
* * * * * * * * * * * * Building type: const nothrow @safe ulong(const(void*) p) | |
* * * * * * * * * * * * * DtoFunctionType(const nothrow @safe ulong(const(void*) p)) | |
* * * * * * * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * * * * * Final function type: i64 (i8*) | |
* * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * @_D27TypeInfo_xC14TypeInfo_Class6__initZ = linkonce_odr global %object.TypeInfo_Const { [19 x i8*]* @_D14TypeInfo_Const6__vtblZ, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D14TypeInfo_Class7__ClassZ to %object.TypeInfo*) }, comdat | |
* * * * * * * * * * * * Function type: const nothrow @safe ulong(const(void*) p) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %2 = alloca i64, align 8 | |
* * * * * * * * * * * rhs: %14 = add i64 %13, %12 | |
* * * * * * ScopeStatement::toIR(): | |
* * * * * * * CompoundStatement::toIR(): | |
* * * * * * * * ExpStatement::toIR(): | |
* * * * * * * * * DeclarationExp::toElem: (enum ulong i = 1LU;) | T=void | |
* * * * * * * * * * DtoDeclarationExp: i | |
* * * * * * * * * * * VarDeclaration | |
* * * * * * * * * * * Manifest constant, nothing to do. | |
* * * * * * * * ExpStatement::toIR(): | |
* * * * * * * * * DeclarationExp::toElem: alias T = const(void*[]); | |
| T=void | |
* * * * * * * * * * DtoDeclarationExp: T | |
* * * * * * * * * * * Ignoring Symbol: alias | |
* * * * * * * * ExpStatement::toIR(): | |
* * * * * * * * * AddAssignExp::toElem: h += typeid(const(void*[])).getHash(cast(const(void*))&p.vtbl) @ ulong | |
* * * * * * * * * * VarExp::toElem: h @ ulong | |
* * * * * * * * * * * DtoSymbolAddress ('h' of type 'ulong') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CallExp::toElem: typeid(const(void*[])).getHash(cast(const(void*))&p.vtbl) @ ulong | |
* * * * * * * * * * * DotVarExp::toElem: typeid(const(void*[])).getHash @ const nothrow @safe ulong(const(void*) p) | |
* * * * * * * * * * * * Type::getTypeInfo(): const(void*[]) | |
* * * * * * * * * * * * DtoSymbolAddress ('typeid(const(void*[]))' of type 'object.TypeInfo_Const') | |
* * * * * * * * * * * * * TypeInfoDeclaration | |
* * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(const(void*[]))) | |
* * * * * * * * * * * * * * type = 'const(void*[])' | |
* * * * * * * * * * * * * * typeinfo mangle: _D13TypeInfo_xAPv6__initZ | |
* * * * * * * * * * * * * * TypeInfoConstDeclaration::llvmDefine() typeid(const(void*[])) | |
* * * * * * * * * * * * * * * DtoTypeInfoOf(type = 'const(void*)[]', base='1') | |
* * * * * * * * * * * * * * * * Type::getTypeInfo(): const(void*)[] | |
* * * * * * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(const(void*)[])) | |
* * * * * * * * * * * * * * * * * * type = 'const(void*)[]' | |
* * * * * * * * * * * * * * * * * * typeinfo mangle: _D13TypeInfo_AxPv6__initZ | |
* * * * * * * * * * * * * * * * * * Building type: object.TypeInfo_Array | |
* * * * * * * * * * * * * * * * * * * Building class type object.TypeInfo_Array @ object.d(836) | |
* * * * * * * * * * * * * * * * * * * * Instance size: 24 | |
* * * * * * * * * * * * * * * * * * * * Field priority for value: 1 | |
* * * * * * * * * * * * * * * * * * * * class type: %object.TypeInfo_Array = type { [19 x i8*]*, i8*, %object.TypeInfo* } | |
* * * * * * * * * * * * * * * * * * TypeInfoArrayDeclaration::llvmDefine() typeid(const(void*)[]) | |
* * * * * * * * * * * * * * * * * * * DtoResolveClass(object.TypeInfo_Array): object.d(836) | |
* * * * * * * * * * * * * * * * * * * DtoTypeInfoOf(type = 'const(void*)', base='1') | |
* * * * * * * * * * * * * * * * * * * * Type::getTypeInfo(): const(void*) | |
* * * * * * * * * * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(const(void*))) | |
* * * * * * * * * * * * * * * * * * * * * * type = 'const(void*)' | |
* * * * * * * * * * * * * * * * * * * * * * typeinfo mangle: _D12TypeInfo_xPv6__initZ | |
* * * * * * * * * * * * * * * * * * * * * * TypeInfoConstDeclaration::llvmDefine() typeid(const(void*)) | |
* * * * * * * * * * * * * * * * * * * * * * * DtoTypeInfoOf(type = 'const(void)*', base='1') | |
* * * * * * * * * * * * * * * * * * * * * * * * Type::getTypeInfo(): const(void)* | |
* * * * * * * * * * * * * * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(const(void)*)) | |
* * * * * * * * * * * * * * * * * * * * * * * * * * type = 'const(void)*' | |
* * * * * * * * * * * * * * * * * * * * * * * * * * typeinfo mangle: _D12TypeInfo_Pxv6__initZ | |
* * * * * * * * * * * * * * * * * * * * * * * * * * Building type: object.TypeInfo_Pointer | |
* * * * * * * * * * * * * * * * * * * * * * * * * * * Building class type object.TypeInfo_Pointer @ object.d(708) | |
* * * * * * * * * * * * * * * * * * * * * * * * * * * * Instance size: 24 | |
* * * * * * * * * * * * * * * * * * * * * * * * * * * * Field priority for m_next: 1 | |
* * * * * * * * * * * * * * * * * * * * * * * * * * * * class type: %object.TypeInfo_Pointer = type { [19 x i8*]*, i8*, %object.TypeInfo* } | |
* * * * * * * * * * * * * * * * * * * * * * * * * * TypeInfoPointerDeclaration::llvmDefine() typeid(const(void)*) | |
* * * * * * * * * * * * * * * * * * * * * * * * * * * DtoResolveClass(object.TypeInfo_Pointer): object.d(708) | |
* * * * * * * * * * * * * * * * * * * * * * * * * * * DtoTypeInfoOf(type = 'const(void)', base='1') | |
* * * * * * * * * * * * * * * * * * * * * * * * * * * * Type::getTypeInfo(): const(void) | |
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(const(void))) | |
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * type = 'const(void)' | |
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * typeinfo mangle: _D11TypeInfo_xv6__initZ | |
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * TypeInfoConstDeclaration::llvmDefine() typeid(const(void)) | |
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * DtoTypeInfoOf(type = 'void', base='1') | |
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Type::getTypeInfo(): void | |
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(void)) | |
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * type = 'void' | |
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * typeinfo mangle: _D10TypeInfo_v6__initZ | |
* * * * * * * * * * * * * * * * * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(const(void))) | |
* * * * * * * * * * * * * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(const(void)*)) | |
* * * * * * * * * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(const(void*))) | |
* * * * * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(const(void*)[])) | |
* * * * * * * * * * * * vthis: @_D13TypeInfo_xAPv6__initZ = linkonce_odr global %object.TypeInfo_Const { [19 x i8*]* @_D14TypeInfo_Const6__vtblZ, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D13TypeInfo_AxPv6__initZ to %object.TypeInfo*) }, comdat | |
* * * * * * * * * * * * funcval: %19 = load i8*, i8** %18, align 8 | |
* * * * * * * * * * * * isMember = this is: object.TypeInfo_Const | |
* * * * * * * * * * * * DtoFunctionType(const nothrow @safe ulong(const(void*) p)) | |
* * * * * * * * * * * * funcval casted: %20 = bitcast i8* %19 to i64 (%object.TypeInfo_Const*, i8*)* | |
* * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * CastExp::toElem: cast(const(void*))&p.vtbl @ const(void*) | |
* * * * * * * * * * * * * * * AddrExp::toElem: &p.vtbl @ const(void*[])* | |
* * * * * * * * * * * * * * * * DotVarExp::toElem: p.vtbl @ const(void*[]) | |
* * * * * * * * * * * * * * * * * VarExp::toElem: p @ const(Interface) | |
* * * * * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'const(Interface)') | |
* * * * * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * * * * type: const(Interface) | |
* * * * * * * * * * * * * * * * * Indexing aggregate field object.Interface.vtbl: | |
* * * * * * * * * * * * * * * * * * Value: %21 = getelementptr inbounds %object.Interface, %object.Interface* %0, i32 0, i32 1 | |
* * * * * * * * * * * * * * * * is nothing special | |
* * * * * * * * * * * * * * * * lval: %21 = getelementptr inbounds %object.Interface, %object.Interface* %0, i32 0, i32 1 | |
* * * * * * * * * * * * * * * * Building type: const(void*[])* | |
* * * * * * * * * * * * * * * Casting from 'const(void*[])*' to 'const(void*)' | |
* * * * * * * * * * * * * * * * src: %21 = getelementptr inbounds %object.Interface, %object.Interface* %0, i32 0, i32 1 | |
* * * * * * * * * * * * * * * * to type: i8* | |
* * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * @_D13TypeInfo_xAPv6__initZ = linkonce_odr global %object.TypeInfo_Const { [19 x i8*]* @_D14TypeInfo_Const6__vtblZ, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Array* @_D13TypeInfo_AxPv6__initZ to %object.TypeInfo*) }, comdat | |
* * * * * * * * * * * * Function type: const nothrow @safe ulong(const(void*) p) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %2 = alloca i64, align 8 | |
* * * * * * * * * * * rhs: %25 = add i64 %24, %23 | |
* * * * * * ScopeStatement::toIR(): | |
* * * * * * * CompoundStatement::toIR(): | |
* * * * * * * * ExpStatement::toIR(): | |
* * * * * * * * * DeclarationExp::toElem: (enum ulong i = 2LU;) | T=void | |
* * * * * * * * * * DtoDeclarationExp: i | |
* * * * * * * * * * * VarDeclaration | |
* * * * * * * * * * * Manifest constant, nothing to do. | |
* * * * * * * * ExpStatement::toIR(): | |
* * * * * * * * * DeclarationExp::toElem: alias T = const(ulong); | |
| T=void | |
* * * * * * * * * * DtoDeclarationExp: T | |
* * * * * * * * * * * Ignoring Symbol: alias | |
* * * * * * * * ExpStatement::toIR(): | |
* * * * * * * * * AddAssignExp::toElem: h += typeid(const(ulong)).getHash(cast(const(void*))&p.offset) @ ulong | |
* * * * * * * * * * VarExp::toElem: h @ ulong | |
* * * * * * * * * * * DtoSymbolAddress ('h' of type 'ulong') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CallExp::toElem: typeid(const(ulong)).getHash(cast(const(void*))&p.offset) @ ulong | |
* * * * * * * * * * * DotVarExp::toElem: typeid(const(ulong)).getHash @ const nothrow @safe ulong(const(void*) p) | |
* * * * * * * * * * * * Type::getTypeInfo(): const(ulong) | |
* * * * * * * * * * * * DtoSymbolAddress ('typeid(const(ulong))' of type 'object.TypeInfo_Const') | |
* * * * * * * * * * * * * TypeInfoDeclaration | |
* * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(const(ulong))) | |
* * * * * * * * * * * * * * type = 'const(ulong)' | |
* * * * * * * * * * * * * * typeinfo mangle: _D11TypeInfo_xm6__initZ | |
* * * * * * * * * * * * * * TypeInfoConstDeclaration::llvmDefine() typeid(const(ulong)) | |
* * * * * * * * * * * * * * * DtoTypeInfoOf(type = 'ulong', base='1') | |
* * * * * * * * * * * * * * * * Type::getTypeInfo(): ulong | |
* * * * * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(ulong)) | |
* * * * * * * * * * * * * * * * * type = 'ulong' | |
* * * * * * * * * * * * * * * * * typeinfo mangle: _D10TypeInfo_m6__initZ | |
* * * * * * * * * * * * vthis: @_D11TypeInfo_xm6__initZ = linkonce_odr global %object.TypeInfo_Const { [19 x i8*]* @_D14TypeInfo_Const6__vtblZ, i8* null, %object.TypeInfo* @_D10TypeInfo_m6__initZ }, comdat | |
* * * * * * * * * * * * funcval: %30 = load i8*, i8** %29, align 8 | |
* * * * * * * * * * * * isMember = this is: object.TypeInfo_Const | |
* * * * * * * * * * * * DtoFunctionType(const nothrow @safe ulong(const(void*) p)) | |
* * * * * * * * * * * * funcval casted: %31 = bitcast i8* %30 to i64 (%object.TypeInfo_Const*, i8*)* | |
* * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * CastExp::toElem: cast(const(void*))&p.offset @ const(void*) | |
* * * * * * * * * * * * * * * AddrExp::toElem: &p.offset @ const(ulong)* | |
* * * * * * * * * * * * * * * * DotVarExp::toElem: p.offset @ const(ulong) | |
* * * * * * * * * * * * * * * * * VarExp::toElem: p @ const(Interface) | |
* * * * * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'const(Interface)') | |
* * * * * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * * * * type: const(Interface) | |
* * * * * * * * * * * * * * * * * Indexing aggregate field object.Interface.offset: | |
* * * * * * * * * * * * * * * * * * Value: %32 = getelementptr inbounds %object.Interface, %object.Interface* %0, i32 0, i32 2 | |
* * * * * * * * * * * * * * * * is nothing special | |
* * * * * * * * * * * * * * * * lval: %32 = getelementptr inbounds %object.Interface, %object.Interface* %0, i32 0, i32 2 | |
* * * * * * * * * * * * * * * * Building type: const(ulong)* | |
* * * * * * * * * * * * * * * Casting from 'const(ulong)*' to 'const(void*)' | |
* * * * * * * * * * * * * * * * src: %32 = getelementptr inbounds %object.Interface, %object.Interface* %0, i32 0, i32 2 | |
* * * * * * * * * * * * * * * * to type: i8* | |
* * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * @_D11TypeInfo_xm6__initZ = linkonce_odr global %object.TypeInfo_Const { [19 x i8*]* @_D14TypeInfo_Const6__vtblZ, i8* null, %object.TypeInfo* @_D10TypeInfo_m6__initZ }, comdat | |
* * * * * * * * * * * * Function type: const nothrow @safe ulong(const(void*) p) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %2 = alloca i64, align 8 | |
* * * * * * * * * * * rhs: %36 = add i64 %35, %34 | |
* * * * * ReturnStatement::toIR(): | |
* * * * * * VarExp::toElem: h @ ulong | |
* * * * * * * DtoSymbolAddress ('h' of type 'ulong') | |
* * * * * * * * a normal variable | |
* StructDeclaration::codegen: 'object.OffsetTypeInfo' | |
* * Resolving struct type: OffsetTypeInfo (object.d(255)) | |
* * VarDeclaration::codegen(): 'object.OffsetTypeInfo.offset' | |
* * * DtoResolveVariable(object.OffsetTypeInfo.offset) | |
* * VarDeclaration::codegen(): 'object.OffsetTypeInfo.ti' | |
* * * DtoResolveVariable(object.OffsetTypeInfo.ti) | |
* * Building default initializer for object.OffsetTypeInfo | |
* * * Creating initializer constant for OffsetTypeInfo | |
* * * * Field priority for offset: 1 | |
* * * * Field priority for ti: 1 | |
* * * * DtoConstExpInit(targetType = ulong, exp = 0LU) | |
* * * * * IntegerExp::toConstElem: 0LU @ ulong | |
* * * * * * value = i64 0 | |
* * * * DtoConstExpInit(targetType = object.TypeInfo, exp = null) | |
* * * * * NullExp::toConstElem(type=object.TypeInfo): null | |
* * * * final initializer: %object.OffsetTypeInfo zeroinitializer | |
* * DtoTypeInfoOf(type = 'OffsetTypeInfo', base='0') | |
* * * Type::getTypeInfo(): OffsetTypeInfo | |
* * * * TypeInfoDeclaration_codegen(typeid(OffsetTypeInfo)) | |
* * * * * type = 'OffsetTypeInfo' | |
* * * * * typeinfo mangle: _D33TypeInfo_S6object14OffsetTypeInfo6__initZ | |
* * * * * TypeInfoStructDeclaration::llvmDefine() typeid(OffsetTypeInfo) | |
* * * * * * DtoFunctionType(nothrow @trusted ulong(ref const(OffsetTypeInfo) p)) | |
* * * * * * * Building type: const(OffsetTypeInfo)* | |
* * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * Final function type: i64 (%object.OffsetTypeInfo*) | |
* * * * * * DtoResolveFunction(object.OffsetTypeInfo.__xtoHash): | |
* * * * * * * DtoDeclareFunction(object.OffsetTypeInfo.__xtoHash): | |
* * * * * * * * Enter defineAsExternallyAvailable | |
* * * * * * * * * Cross-module inlining fully disabled. | |
* * * * * * * * DtoFunctionType(nothrow @trusted ulong(ref const(OffsetTypeInfo) p)) | |
* * * * * * * * func = | |
declare i64 @_D6object14OffsetTypeInfo9__xtoHashFNbNeKxSQBpQBlZm(%object.OffsetTypeInfo*) | |
* * * * * * DtoFunctionType(bool(ref const(OffsetTypeInfo) p, ref const(OffsetTypeInfo) q)) | |
* * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * Final function type: i1 (%object.OffsetTypeInfo*, %object.OffsetTypeInfo*) | |
* * * * * * DtoResolveFunction(object.OffsetTypeInfo.__xopEquals): | |
* * * * * * * DtoDeclareFunction(object.OffsetTypeInfo.__xopEquals): | |
* * * * * * * * Enter defineAsExternallyAvailable | |
* * * * * * * * * Cross-module inlining fully disabled. | |
* * * * * * * * DtoFunctionType(bool(ref const(OffsetTypeInfo) p, ref const(OffsetTypeInfo) q)) | |
* * * * * * * * func = | |
declare i1 @_D6object14OffsetTypeInfo11__xopEqualsFKxSQBoQBkKxQjZb(%object.OffsetTypeInfo*, %object.OffsetTypeInfo*) | |
* * * * * * DtoTypeInfoOf(type = 'ulong', base='1') | |
* * * * * * * Type::getTypeInfo(): ulong | |
* * * * * * * TypeInfoDeclaration_codegen(typeid(ulong)) | |
* * * * * * DtoTypeInfoOf(type = 'void*', base='1') | |
* * * * * * * Type::getTypeInfo(): void* | |
* * * * * * * TypeInfoDeclaration_codegen(typeid(void*)) | |
* * * * * * * * type = 'void*' | |
* * * * * * * * typeinfo mangle: _D11TypeInfo_Pv6__initZ | |
* * * * * * * * TypeInfoPointerDeclaration::llvmDefine() typeid(void*) | |
* * * * * * * * * DtoTypeInfoOf(type = 'void', base='1') | |
* * * * * * * * * * Type::getTypeInfo(): void | |
* * * * * * * * * * TypeInfoDeclaration_codegen(typeid(void)) | |
* * * TypeInfoDeclaration_codegen(typeid(OffsetTypeInfo)) | |
* * DtoDefineFunction(object.OffsetTypeInfo.__xopEquals): | |
* * * Doing function body for: __xopEquals | |
* * * DtoCreateNestedContext for object.OffsetTypeInfo.__xopEquals | |
* * * * DtoCreateNestedContextType for object.OffsetTypeInfo.__xopEquals | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): | |
* * * * * LogicalExp::toElem: p.offset == q.offset && opEquals(p.ti, q.ti) @ bool | |
* * * * * * EqualExp::toElem: p.offset == q.offset @ bool | |
* * * * * * * DotVarExp::toElem: p.offset @ const(ulong) | |
* * * * * * * * VarExp::toElem: p @ const(OffsetTypeInfo) | |
* * * * * * * * * DtoSymbolAddress ('p' of type 'const(OffsetTypeInfo)') | |
* * * * * * * * * * function param | |
* * * * * * * * * * type: const(OffsetTypeInfo) | |
* * * * * * * * Indexing aggregate field object.OffsetTypeInfo.offset: | |
* * * * * * * * * Value: %4 = getelementptr inbounds %object.OffsetTypeInfo, %object.OffsetTypeInfo* %1, i32 0, i32 0 | |
* * * * * * * DotVarExp::toElem: q.offset @ const(ulong) | |
* * * * * * * * VarExp::toElem: q @ const(OffsetTypeInfo) | |
* * * * * * * * * DtoSymbolAddress ('q' of type 'const(OffsetTypeInfo)') | |
* * * * * * * * * * function param | |
* * * * * * * * * * type: const(OffsetTypeInfo) | |
* * * * * * * * Indexing aggregate field object.OffsetTypeInfo.offset: | |
* * * * * * * * * Value: %5 = getelementptr inbounds %object.OffsetTypeInfo, %object.OffsetTypeInfo* %0, i32 0, i32 0 | |
* * * * * * * integral or pointer or interface | |
* * * * * * * lv: %6 = load i64, i64* %4 | |
* * * * * * * rv: %7 = load i64, i64* %5 | |
* * * * * * CallExp::toElem: opEquals(p.ti, q.ti) @ bool | |
* * * * * * * VarExp::toElem: opEquals @ @system bool(const(Object) lhs, const(Object) rhs) | |
* * * * * * * * DtoSymbolAddress ('opEquals' of type '@system bool(const(Object) lhs, const(Object) rhs)') | |
* * * * * * * * * FuncDeclaration | |
* * * * * * * DtoCallFunction() | |
* * * * * * * * Evaluating argument expressions | |
* * * * * * * * * DtoArgument | |
* * * * * * * * * * DotVarExp::toElem: p.ti @ const(Object) | |
* * * * * * * * * * * VarExp::toElem: p @ const(OffsetTypeInfo) | |
* * * * * * * * * * * * DtoSymbolAddress ('p' of type 'const(OffsetTypeInfo)') | |
* * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * type: const(OffsetTypeInfo) | |
* * * * * * * * * * * Indexing aggregate field object.OffsetTypeInfo.ti: | |
* * * * * * * * * * * * Value: %10 = getelementptr inbounds %object.OffsetTypeInfo, %object.OffsetTypeInfo* %1, i32 0, i32 1 | |
* * * * * * * * * DtoArgument | |
* * * * * * * * * * DotVarExp::toElem: q.ti @ const(Object) | |
* * * * * * * * * * * VarExp::toElem: q @ const(OffsetTypeInfo) | |
* * * * * * * * * * * * DtoSymbolAddress ('q' of type 'const(OffsetTypeInfo)') | |
* * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * type: const(OffsetTypeInfo) | |
* * * * * * * * * * * Indexing aggregate field object.OffsetTypeInfo.ti: | |
* * * * * * * * * * * * Value: %12 = getelementptr inbounds %object.OffsetTypeInfo, %object.OffsetTypeInfo* %0, i32 0, i32 1 | |
* * * * * * * * doing normal arguments | |
* * * * * * * * Arguments so far: (0) | |
* * * * * * * * Function type: @system bool(const(Object) lhs, const(Object) rhs) | |
* * DtoDefineFunction(object.OffsetTypeInfo.__xtoHash): | |
* * * Doing function body for: __xtoHash | |
* * * DtoCreateNestedContext for object.OffsetTypeInfo.__xtoHash | |
* * * * DtoCreateNestedContextType for object.OffsetTypeInfo.__xtoHash | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): | |
* * * * * ExpStatement::toIR(): | |
* * * * * * DeclarationExp::toElem: (ulong h = 0LU;) | T=void | |
* * * * * * * DtoDeclarationExp: h | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * llvm value for decl: %2 = alloca i64, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: h = 0LU | (ulong)(ulong = ulong) | |
* * * * * * * * * * VarExp::toElem: h @ ulong | |
* * * * * * * * * * * DtoSymbolAddress ('h' of type 'ulong') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * IntegerExp::toElem: 0LU @ ulong | |
* * * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong | |
* * * * * * * * * * * * value = i64 0 | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %2 = alloca i64, align 8 | |
* * * * * * * * * * * rhs: i64 0 | |
* * * * * UnrolledLoopStatement::toIR(): | |
* * * * * * ScopeStatement::toIR(): | |
* * * * * * * CompoundStatement::toIR(): | |
* * * * * * * * ExpStatement::toIR(): | |
* * * * * * * * * DeclarationExp::toElem: (enum ulong i = 0LU;) | T=void | |
* * * * * * * * * * DtoDeclarationExp: i | |
* * * * * * * * * * * VarDeclaration | |
* * * * * * * * * * * Manifest constant, nothing to do. | |
* * * * * * * * ExpStatement::toIR(): | |
* * * * * * * * * DeclarationExp::toElem: alias T = const(ulong); | |
| T=void | |
* * * * * * * * * * DtoDeclarationExp: T | |
* * * * * * * * * * * Ignoring Symbol: alias | |
* * * * * * * * ExpStatement::toIR(): | |
* * * * * * * * * AddAssignExp::toElem: h += typeid(const(ulong)).getHash(cast(const(void*))&p.offset) @ ulong | |
* * * * * * * * * * VarExp::toElem: h @ ulong | |
* * * * * * * * * * * DtoSymbolAddress ('h' of type 'ulong') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CallExp::toElem: typeid(const(ulong)).getHash(cast(const(void*))&p.offset) @ ulong | |
* * * * * * * * * * * DotVarExp::toElem: typeid(const(ulong)).getHash @ const nothrow @safe ulong(const(void*) p) | |
* * * * * * * * * * * * Type::getTypeInfo(): const(ulong) | |
* * * * * * * * * * * * DtoSymbolAddress ('typeid(const(ulong))' of type 'object.TypeInfo_Const') | |
* * * * * * * * * * * * * TypeInfoDeclaration | |
* * * * * * * * * * * * vthis: @_D11TypeInfo_xm6__initZ = linkonce_odr global %object.TypeInfo_Const { [19 x i8*]* @_D14TypeInfo_Const6__vtblZ, i8* null, %object.TypeInfo* @_D10TypeInfo_m6__initZ }, comdat | |
* * * * * * * * * * * * funcval: %8 = load i8*, i8** %7, align 8 | |
* * * * * * * * * * * * isMember = this is: object.TypeInfo_Const | |
* * * * * * * * * * * * DtoFunctionType(const nothrow @safe ulong(const(void*) p)) | |
* * * * * * * * * * * * funcval casted: %9 = bitcast i8* %8 to i64 (%object.TypeInfo_Const*, i8*)* | |
* * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * CastExp::toElem: cast(const(void*))&p.offset @ const(void*) | |
* * * * * * * * * * * * * * * AddrExp::toElem: &p.offset @ const(ulong)* | |
* * * * * * * * * * * * * * * * DotVarExp::toElem: p.offset @ const(ulong) | |
* * * * * * * * * * * * * * * * * VarExp::toElem: p @ const(OffsetTypeInfo) | |
* * * * * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'const(OffsetTypeInfo)') | |
* * * * * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * * * * type: const(OffsetTypeInfo) | |
* * * * * * * * * * * * * * * * * Indexing aggregate field object.OffsetTypeInfo.offset: | |
* * * * * * * * * * * * * * * * * * Value: %10 = getelementptr inbounds %object.OffsetTypeInfo, %object.OffsetTypeInfo* %0, i32 0, i32 0 | |
* * * * * * * * * * * * * * * * is nothing special | |
* * * * * * * * * * * * * * * * lval: %10 = getelementptr inbounds %object.OffsetTypeInfo, %object.OffsetTypeInfo* %0, i32 0, i32 0 | |
* * * * * * * * * * * * * * * Casting from 'const(ulong)*' to 'const(void*)' | |
* * * * * * * * * * * * * * * * src: %10 = getelementptr inbounds %object.OffsetTypeInfo, %object.OffsetTypeInfo* %0, i32 0, i32 0 | |
* * * * * * * * * * * * * * * * to type: i8* | |
* * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * @_D11TypeInfo_xm6__initZ = linkonce_odr global %object.TypeInfo_Const { [19 x i8*]* @_D14TypeInfo_Const6__vtblZ, i8* null, %object.TypeInfo* @_D10TypeInfo_m6__initZ }, comdat | |
* * * * * * * * * * * * Function type: const nothrow @safe ulong(const(void*) p) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %2 = alloca i64, align 8 | |
* * * * * * * * * * * rhs: %14 = add i64 %13, %12 | |
* * * * * * ScopeStatement::toIR(): | |
* * * * * * * CompoundStatement::toIR(): | |
* * * * * * * * ExpStatement::toIR(): | |
* * * * * * * * * DeclarationExp::toElem: (enum ulong i = 1LU;) | T=void | |
* * * * * * * * * * DtoDeclarationExp: i | |
* * * * * * * * * * * VarDeclaration | |
* * * * * * * * * * * Manifest constant, nothing to do. | |
* * * * * * * * ExpStatement::toIR(): | |
* * * * * * * * * DeclarationExp::toElem: alias T = const(TypeInfo); | |
| T=void | |
* * * * * * * * * * DtoDeclarationExp: T | |
* * * * * * * * * * * Ignoring Symbol: alias | |
* * * * * * * * ExpStatement::toIR(): | |
* * * * * * * * * AddAssignExp::toElem: h += typeid(const(TypeInfo)).getHash(cast(const(void*))&p.ti) @ ulong | |
* * * * * * * * * * VarExp::toElem: h @ ulong | |
* * * * * * * * * * * DtoSymbolAddress ('h' of type 'ulong') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CallExp::toElem: typeid(const(TypeInfo)).getHash(cast(const(void*))&p.ti) @ ulong | |
* * * * * * * * * * * DotVarExp::toElem: typeid(const(TypeInfo)).getHash @ const nothrow @safe ulong(const(void*) p) | |
* * * * * * * * * * * * Type::getTypeInfo(): const(TypeInfo) | |
* * * * * * * * * * * * DtoSymbolAddress ('typeid(const(TypeInfo))' of type 'object.TypeInfo_Const') | |
* * * * * * * * * * * * * TypeInfoDeclaration | |
* * * * * * * * * * * * * TypeInfoDeclaration_codegen(typeid(const(TypeInfo))) | |
* * * * * * * * * * * * * * type = 'const(TypeInfo)' | |
* * * * * * * * * * * * * * typeinfo mangle: _D20TypeInfo_xC8TypeInfo6__initZ | |
* * * * * * * * * * * * * * TypeInfoConstDeclaration::llvmDefine() typeid(const(TypeInfo)) | |
* * * * * * * * * * * * * * * DtoTypeInfoOf(type = 'object.TypeInfo', base='1') | |
* * * * * * * * * * * * * * * * Type::getTypeInfo(): object.TypeInfo | |
* * * * * * * * * * * * * * * * * TypeInfoClassDeclaration_codegen(typeid(object.TypeInfo)) | |
* * * * * * * * * * * * * * * * TypeInfoClassDeclaration_codegen(typeid(object.TypeInfo)) | |
* * * * * * * * * * * * vthis: @_D20TypeInfo_xC8TypeInfo6__initZ = linkonce_odr global %object.TypeInfo_Const { [19 x i8*]* @_D14TypeInfo_Const6__vtblZ, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D8TypeInfo7__ClassZ to %object.TypeInfo*) }, comdat | |
* * * * * * * * * * * * funcval: %19 = load i8*, i8** %18, align 8 | |
* * * * * * * * * * * * isMember = this is: object.TypeInfo_Const | |
* * * * * * * * * * * * DtoFunctionType(const nothrow @safe ulong(const(void*) p)) | |
* * * * * * * * * * * * funcval casted: %20 = bitcast i8* %19 to i64 (%object.TypeInfo_Const*, i8*)* | |
* * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * CastExp::toElem: cast(const(void*))&p.ti @ const(void*) | |
* * * * * * * * * * * * * * * AddrExp::toElem: &p.ti @ const(TypeInfo)* | |
* * * * * * * * * * * * * * * * DotVarExp::toElem: p.ti @ const(TypeInfo) | |
* * * * * * * * * * * * * * * * * VarExp::toElem: p @ const(OffsetTypeInfo) | |
* * * * * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'const(OffsetTypeInfo)') | |
* * * * * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * * * * type: const(OffsetTypeInfo) | |
* * * * * * * * * * * * * * * * * Indexing aggregate field object.OffsetTypeInfo.ti: | |
* * * * * * * * * * * * * * * * * * Value: %21 = getelementptr inbounds %object.OffsetTypeInfo, %object.OffsetTypeInfo* %0, i32 0, i32 1 | |
* * * * * * * * * * * * * * * * is nothing special | |
* * * * * * * * * * * * * * * * lval: %21 = getelementptr inbounds %object.OffsetTypeInfo, %object.OffsetTypeInfo* %0, i32 0, i32 1 | |
* * * * * * * * * * * * * * * * Building type: const(TypeInfo)* | |
* * * * * * * * * * * * * * * Casting from 'const(TypeInfo)*' to 'const(void*)' | |
* * * * * * * * * * * * * * * * src: %21 = getelementptr inbounds %object.OffsetTypeInfo, %object.OffsetTypeInfo* %0, i32 0, i32 1 | |
* * * * * * * * * * * * * * * * to type: i8* | |
* * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * @_D20TypeInfo_xC8TypeInfo6__initZ = linkonce_odr global %object.TypeInfo_Const { [19 x i8*]* @_D14TypeInfo_Const6__vtblZ, i8* null, %object.TypeInfo* bitcast (%object.TypeInfo_Class* @_D8TypeInfo7__ClassZ to %object.TypeInfo*) }, comdat | |
* * * * * * * * * * * * Function type: const nothrow @safe ulong(const(void*) p) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %2 = alloca i64, align 8 | |
* * * * * * * * * * * rhs: %25 = add i64 %24, %23 | |
* * * * * ReturnStatement::toIR(): | |
* * * * * * VarExp::toElem: h @ ulong | |
* * * * * * * DtoSymbolAddress ('h' of type 'ulong') | |
* * * * * * * * a normal variable | |
* ClassDeclaration::codegen: 'object.TypeInfo' | |
* * DtoDefineFunction(object.TypeInfo.toString): object.d(262) | |
* * * isMember = this is: object.TypeInfo | |
* * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo*) | |
* * * DtoResolveFunction(object.TypeInfo.toString): object.d(262) | |
* * * * DtoDeclareFunction(object.TypeInfo.toString): object.d(262) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo | |
* * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object8TypeInfo8toStringMxFNaNbNfZAya(%object.TypeInfo*) | |
* * * Doing function body for: toString | |
* * * DtoCreateNestedContext for object.TypeInfo.toString | |
* * * * DtoCreateNestedContextType for object.TypeInfo.toString | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(263) | |
* * * * * DotVarExp::toElem: typeid(this).name @ string | |
* * * * * * ThisExp::toElem: this @ const(TypeInfo) | |
* * * * * * * normal this exp | |
* * * * * * Indexing aggregate field object.TypeInfo_Class.name: | |
* * * * * * * Value: %10 = getelementptr inbounds %object.TypeInfo_Class, %object.TypeInfo_Class* %9, i32 0, i32 3 | |
* * DtoDefineFunction(object.TypeInfo.toHash): object.d(266) | |
* * * isMember = this is: object.TypeInfo | |
* * * DtoFunctionType(const nothrow @trusted ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo*) | |
* * * DtoResolveFunction(object.TypeInfo.toHash): object.d(266) | |
* * * * DtoDeclareFunction(object.TypeInfo.toHash): object.d(266) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo | |
* * * * * DtoFunctionType(const nothrow @trusted ulong()) | |
* * * * * func = | |
declare i64 @_D6object8TypeInfo6toHashMxFNbNeZm(%object.TypeInfo*) | |
* * * Doing function body for: toHash | |
* * * DtoCreateNestedContext for object.TypeInfo.toHash | |
* * * * DtoCreateNestedContextType for object.TypeInfo.toHash | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(267) | |
* * * * * CastExp::toElem: cast(ulong)cast(immutable(char)*)typeid(this).name @ ulong | |
* * * * * * CastExp::toElem: cast(immutable(char)*)typeid(this).name @ immutable(char)* | |
* * * * * * * DotVarExp::toElem: typeid(this).name @ string | |
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo) | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_Class.name: | |
* * * * * * * * * Value: %10 = getelementptr inbounds %object.TypeInfo_Class, %object.TypeInfo_Class* %9, i32 0, i32 3 | |
* * * * * * * Casting from 'string' to 'immutable(char)*' | |
* * * * * * * * DtoCastArray | |
* * * * * * * * * from array or sarray | |
* * * * * * * * * to pointer | |
* * * * * * * * * DtoArrayPtr | |
* * * * * * Casting from 'immutable(char)*' to 'ulong' | |
* * DtoDefineFunction(object.TypeInfo.opCmp): object.d(270) | |
* * * isMember = this is: object.TypeInfo | |
* * * DtoFunctionType(int(Object o)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo*, %object.Object*) | |
* * * DtoResolveFunction(object.TypeInfo.opCmp): object.d(270) | |
* * * * DtoDeclareFunction(object.TypeInfo.opCmp): object.d(270) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo | |
* * * * * DtoFunctionType(int(Object o)) | |
* * * * * func = | |
declare i32 @_D6object8TypeInfo5opCmpMFC6ObjectZi(%object.TypeInfo*, %object.Object*) | |
* * * Doing function body for: opCmp | |
* * * DtoCreateNestedContext for object.TypeInfo.opCmp | |
* * * * DtoCreateNestedContextType for object.TypeInfo.opCmp | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(270) | |
* * * * * IfStatement::toIR(): object.d(271) | |
* * * * * * IdentityExp::toElem: this is o @ bool | |
* * * * * * * ThisExp::toElem: this @ object.Object | |
* * * * * * * * normal this exp | |
* * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * function param | |
* * * * * * * * * type: object.Object | |
* * * * * * ReturnStatement::toIR(): object.d(272) | |
* * * * * * * IntegerExp::toElem: 0 @ int | |
* * * * * * * * IntegerExp::toConstElem: 0 @ int | |
* * * * * * * * * value = i32 0 | |
* * * * * IfStatement::toIR(): object.d(274) | |
* * * * * * IdentityExp::toElem: o is null @ bool | |
* * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * function param | |
* * * * * * * * * type: object.Object | |
* * * * * * * NullExp::toElem(type=object.Object): null | |
* * * * * * * * NullExp::toConstElem(type=object.Object): null | |
* * * * * * ReturnStatement::toIR(): object.d(275) | |
* * * * * * * IntegerExp::toElem: 1 @ int | |
* * * * * * * * IntegerExp::toConstElem: 1 @ int | |
* * * * * * * * * value = i32 1 | |
* * * * * ReturnStatement::toIR(): object.d(277) | |
* * * * * * CastExp::toElem: cast(int)(this.toString() == (cast(TypeInfo)o).toString()) @ int | |
* * * * * * * EqualExp::toElem: this.toString() == (cast(TypeInfo)o).toString() @ bool | |
* * * * * * * * CallExp::toElem: this.toString() @ string | |
* * * * * * * * * DotVarExp::toElem: this.toString @ const pure nothrow @safe string() | |
* * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo | |
* * * * * * * * * * * normal this exp | |
* * * * * * * * * * vthis: %18 = load %object.TypeInfo*, %object.TypeInfo** %3 | |
* * * * * * * * * * funcval: %22 = load i8*, i8** %21, align 8 | |
* * * * * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * * * * * * funcval casted: %23 = bitcast i8* %22 to { i64, i8* } (%object.TypeInfo*)* | |
* * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * Building type: const pure nothrow @safe string() | |
* * * * * * * * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * * * Final function type: { i64, i8* } () | |
* * * * * * * * * * doing normal arguments | |
* * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * %24 = load %object.TypeInfo*, %object.TypeInfo** %3 | |
* * * * * * * * * * Function type: const pure nothrow @safe string() | |
* * * * * * * * CallExp::toElem: (cast(TypeInfo)o).toString() @ string | |
* * * * * * * * * DotVarExp::toElem: (cast(TypeInfo)o).toString @ const pure nothrow @safe string() | |
* * * * * * * * * * CastExp::toElem: cast(TypeInfo)o @ object.TypeInfo | |
* * * * * * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * type: object.Object | |
* * * * * * * * * * * Casting from 'object.Object' to 'object.TypeInfo' | |
* * * * * * * * * * * * DtoCastClass(object.Object, object.TypeInfo) | |
* * * * * * * * * * * * * dynamic up cast | |
* * * * * * * * * * vthis: %28 = bitcast i8* %27 to %object.TypeInfo* | |
* * * * * * * * * * funcval: %32 = load i8*, i8** %31, align 8 | |
* * * * * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * * * * * * funcval casted: %33 = bitcast i8* %32 to { i64, i8* } (%object.TypeInfo*)* | |
* * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * doing normal arguments | |
* * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * %28 = bitcast i8* %27 to %object.TypeInfo* | |
* * * * * * * * * * Function type: const pure nothrow @safe string() | |
* * * * * * * * static or dynamic array | |
* * * * * * * * Comparing arrays using memcmp | |
* * * * * * * * DtoArrayPtr | |
* * * * * * * * DtoArrayPtr | |
* * * * * * * * DtoArrayLen | |
* * * * * * * * DtoArrayLen | |
* * * * * * * Casting from 'bool' to 'int' | |
* * * * * * * * cast to: i32 | |
* * DtoDefineFunction(object.TypeInfo.opEquals): object.d(280) | |
* * * isMember = this is: object.TypeInfo | |
* * * DtoFunctionType(bool(Object o)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i1 (%object.TypeInfo*, %object.Object*) | |
* * * DtoResolveFunction(object.TypeInfo.opEquals): object.d(280) | |
* * * * DtoDeclareFunction(object.TypeInfo.opEquals): object.d(280) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo | |
* * * * * DtoFunctionType(bool(Object o)) | |
* * * * * func = | |
declare i1 @_D6object8TypeInfo8opEqualsMFC6ObjectZb(%object.TypeInfo*, %object.Object*) | |
* * * Doing function body for: opEquals | |
* * * DtoCreateNestedContext for object.TypeInfo.opEquals | |
* * * * DtoCreateNestedContextType for object.TypeInfo.opEquals | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(280) | |
* * * * * IfStatement::toIR(): object.d(281) | |
* * * * * * IdentityExp::toElem: this is o @ bool | |
* * * * * * * ThisExp::toElem: this @ object.Object | |
* * * * * * * * normal this exp | |
* * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * function param | |
* * * * * * * * * type: object.Object | |
* * * * * * ReturnStatement::toIR(): object.d(282) | |
* * * * * * * IntegerExp::toElem: true @ bool | |
* * * * * * * * IntegerExp::toConstElem: true @ bool | |
* * * * * * * * * value = i1 true | |
* * * * * ReturnStatement::toIR(): object.d(284) | |
* * * * * * LogicalExp::toElem: o && this.toString() == (cast(TypeInfo)o).toString() @ bool | |
* * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * function param | |
* * * * * * * * * type: object.Object | |
* * * * * * * Casting from 'object.Object' to 'bool' | |
* * * * * * * * DtoCastClass(object.Object, bool) | |
* * * * * * * * * to bool | |
* * * * * * * EqualExp::toElem: this.toString() == (cast(TypeInfo)o).toString() @ bool | |
* * * * * * * * CallExp::toElem: this.toString() @ string | |
* * * * * * * * * DotVarExp::toElem: this.toString @ const pure nothrow @safe string() | |
* * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo | |
* * * * * * * * * * * normal this exp | |
* * * * * * * * * * vthis: %16 = load %object.TypeInfo*, %object.TypeInfo** %3 | |
* * * * * * * * * * funcval: %20 = load i8*, i8** %19, align 8 | |
* * * * * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * * * * * * funcval casted: %21 = bitcast i8* %20 to { i64, i8* } (%object.TypeInfo*)* | |
* * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * doing normal arguments | |
* * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * %22 = load %object.TypeInfo*, %object.TypeInfo** %3 | |
* * * * * * * * * * Function type: const pure nothrow @safe string() | |
* * * * * * * * CallExp::toElem: (cast(TypeInfo)o).toString() @ string | |
* * * * * * * * * DotVarExp::toElem: (cast(TypeInfo)o).toString @ const pure nothrow @safe string() | |
* * * * * * * * * * CastExp::toElem: cast(TypeInfo)o @ object.TypeInfo | |
* * * * * * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * type: object.Object | |
* * * * * * * * * * * Casting from 'object.Object' to 'object.TypeInfo' | |
* * * * * * * * * * * * DtoCastClass(object.Object, object.TypeInfo) | |
* * * * * * * * * * * * * dynamic up cast | |
* * * * * * * * * * vthis: %26 = bitcast i8* %25 to %object.TypeInfo* | |
* * * * * * * * * * funcval: %30 = load i8*, i8** %29, align 8 | |
* * * * * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * * * * * * funcval casted: %31 = bitcast i8* %30 to { i64, i8* } (%object.TypeInfo*)* | |
* * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * doing normal arguments | |
* * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * %26 = bitcast i8* %25 to %object.TypeInfo* | |
* * * * * * * * * * Function type: const pure nothrow @safe string() | |
* * * * * * * * static or dynamic array | |
* * * * * * * * Comparing arrays using memcmp | |
* * * * * * * * DtoArrayPtr | |
* * * * * * * * DtoArrayPtr | |
* * * * * * * * DtoArrayLen | |
* * * * * * * * DtoArrayLen | |
* * DtoDefineFunction(object.TypeInfo.getHash): object.d(288) | |
* * * isMember = this is: object.TypeInfo | |
* * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo.getHash): object.d(288) | |
* * * * DtoDeclareFunction(object.TypeInfo.getHash): object.d(288) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo | |
* * * * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p)) | |
* * * * * func = | |
declare i64 @_D6object8TypeInfo7getHashMxFNbNexPvZm(%object.TypeInfo*, i8*) | |
* * * Doing function body for: getHash | |
* * * DtoCreateNestedContext for object.TypeInfo.getHash | |
* * * * DtoCreateNestedContextType for object.TypeInfo.getHash | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(289) | |
* * * * * CastExp::toElem: cast(ulong)p @ ulong | |
* * * * * * VarExp::toElem: p @ const(void*) | |
* * * * * * * DtoSymbolAddress ('p' of type 'const(void*)') | |
* * * * * * * * function param | |
* * * * * * * * type: const(void*) | |
* * * * * * Casting from 'const(void*)' to 'ulong' | |
* * DtoDefineFunction(object.TypeInfo.equals): object.d(293) | |
* * * isMember = this is: object.TypeInfo | |
* * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i1 (%object.TypeInfo*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo.equals): object.d(293) | |
* * * * DtoDeclareFunction(object.TypeInfo.equals): object.d(293) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo | |
* * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2)) | |
* * * * * func = | |
declare i1 @_D6object8TypeInfo6equalsMxFxPvxQdZb(%object.TypeInfo*, i8*, i8*) | |
* * * Doing function body for: equals | |
* * * DtoCreateNestedContext for object.TypeInfo.equals | |
* * * * DtoCreateNestedContextType for object.TypeInfo.equals | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(294) | |
* * * * * IdentityExp::toElem: p1 is p2 @ bool | |
* * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * function param | |
* * * * * * * * type: const(void*) | |
* * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * function param | |
* * * * * * * * type: const(void*) | |
* * DtoDefineFunction(object.TypeInfo.compare): object.d(298) | |
* * * isMember = this is: object.TypeInfo | |
* * * DtoFunctionType(const int(const(void*) p1, const(void*) p2)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo.compare): object.d(298) | |
* * * * DtoDeclareFunction(object.TypeInfo.compare): object.d(298) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo | |
* * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2)) | |
* * * * * func = | |
declare i32 @_D6object8TypeInfo7compareMxFxPvxQdZi(%object.TypeInfo*, i8*, i8*) | |
* * * Doing function body for: compare | |
* * * DtoCreateNestedContext for object.TypeInfo.compare | |
* * * * DtoCreateNestedContextType for object.TypeInfo.compare | |
* * * CompoundStatement::toIR(): | |
* * * * IfStatement::toIR(): object.d(299) | |
* * * * * CmpExp::toElem: p1 < p2 @ bool | |
* * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * function param | |
* * * * * * * * type: const(void*) | |
* * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * function param | |
* * * * * * * * type: const(void*) | |
* * * * * * type 1: %8 = load i8*, i8** %5 | |
* * * * * * type 2: %9 = load i8*, i8** %6 | |
* * * * * ReturnStatement::toIR(): object.d(300) | |
* * * * * * IntegerExp::toElem: -1 @ int | |
* * * * * * * IntegerExp::toConstElem: -1 @ int | |
* * * * * * * * value = i32 -1 | |
* * * * * IfStatement::toIR(): object.d(301) | |
* * * * * * CmpExp::toElem: p1 > p2 @ bool | |
* * * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * function param | |
* * * * * * * * * type: const(void*) | |
* * * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * function param | |
* * * * * * * * * type: const(void*) | |
* * * * * * * type 1: %14 = load i8*, i8** %5 | |
* * * * * * * type 2: %15 = load i8*, i8** %6 | |
* * * * * * ReturnStatement::toIR(): object.d(302) | |
* * * * * * * IntegerExp::toElem: 1 @ int | |
* * * * * * * * IntegerExp::toConstElem: 1 @ int | |
* * * * * * * * * value = i32 1 | |
* * * * * * ReturnStatement::toIR(): object.d(304) | |
* * * * * * * IntegerExp::toElem: 0 @ int | |
* * * * * * * * IntegerExp::toConstElem: 0 @ int | |
* * * * * * * * * value = i32 0 | |
* * DtoDefineFunction(object.TypeInfo.tsize): object.d(308) | |
* * * isMember = this is: object.TypeInfo | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo*) | |
* * * DtoResolveFunction(object.TypeInfo.tsize): object.d(308) | |
* * * * DtoDeclareFunction(object.TypeInfo.tsize): object.d(308) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object8TypeInfo5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo*) | |
* * * Doing function body for: tsize | |
* * * DtoCreateNestedContext for object.TypeInfo.tsize | |
* * * * DtoCreateNestedContextType for object.TypeInfo.tsize | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(309) | |
* * * * * IntegerExp::toElem: 0LU @ ulong | |
* * * * * * IntegerExp::toConstElem: 0LU @ ulong | |
* * * * * * * value = i64 0 | |
* * DtoDefineFunction(object.TypeInfo.swap): object.d(313) | |
* * * isMember = this is: object.TypeInfo | |
* * * DtoFunctionType(const void(void* p1, void* p2)) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (%object.TypeInfo*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo.swap): object.d(313) | |
* * * * DtoDeclareFunction(object.TypeInfo.swap): object.d(313) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo | |
* * * * * DtoFunctionType(const void(void* p1, void* p2)) | |
* * * * * func = | |
declare void @_D6object8TypeInfo4swapMxFPvQcZv(%object.TypeInfo*, i8*, i8*) | |
* * * Doing function body for: swap | |
* * * DtoCreateNestedContext for object.TypeInfo.swap | |
* * * * DtoCreateNestedContextType for object.TypeInfo.swap | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(313) | |
* * * * * ExpStatement::toIR(): object.d(314) | |
* * * * * * DeclarationExp::toElem: (ulong size = this.tsize();) | T=void | |
* * * * * * * DtoDeclarationExp: size | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * llvm value for decl: %7 = alloca i64, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: size = this.tsize() | (ulong)(ulong = ulong) | |
* * * * * * * * * * VarExp::toElem: size @ ulong | |
* * * * * * * * * * * DtoSymbolAddress ('size' of type 'ulong') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CallExp::toElem: this.tsize() @ ulong | |
* * * * * * * * * * * DotVarExp::toElem: this.tsize @ const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo) | |
* * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * vthis: %9 = load %object.TypeInfo*, %object.TypeInfo** %4 | |
* * * * * * * * * * * * funcval: %13 = load i8*, i8** %12, align 8 | |
* * * * * * * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * * * * * * * * funcval casted: %14 = bitcast i8* %13 to i64 (%object.TypeInfo*)* | |
* * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * Building type: const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * * * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * * * * * Final function type: i64 () | |
* * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * %15 = load %object.TypeInfo*, %object.TypeInfo** %4 | |
* * * * * * * * * * * * Function type: const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %7 = alloca i64, align 8 | |
* * * * * * * * * * * rhs: %16 = call i64 %14(%object.TypeInfo* nonnull %15) | |
* * * * * ExpStatement::toIR(): object.d(315) | |
* * * * * * DeclarationExp::toElem: (ubyte* b1 = cast(ubyte*)p1;) | T=void | |
* * * * * * * DtoDeclarationExp: b1 | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = ubyte*) | |
* * * * * * * * * Building type: ubyte* | |
* * * * * * * * * * Building type: ubyte | |
* * * * * * * * * llvm value for decl: %8 = alloca i8*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: b1 = cast(ubyte*)p1 | (ubyte*)(ubyte* = ubyte*) | |
* * * * * * * * * * VarExp::toElem: b1 @ ubyte* | |
* * * * * * * * * * * DtoSymbolAddress ('b1' of type 'ubyte*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CastExp::toElem: cast(ubyte*)p1 @ ubyte* | |
* * * * * * * * * * * VarExp::toElem: p1 @ void* | |
* * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'void*') | |
* * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * type: void* | |
* * * * * * * * * * * Casting from 'void*' to 'ubyte*' | |
* * * * * * * * * * * * src: %18 = load i8*, i8** %5 | |
* * * * * * * * * * * * to type: i8* | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %8 = alloca i8*, align 8 | |
* * * * * * * * * * * rhs: %18 = load i8*, i8** %5 | |
* * * * * ExpStatement::toIR(): object.d(316) | |
* * * * * * DeclarationExp::toElem: (ubyte* b2 = cast(ubyte*)p2;) | T=void | |
* * * * * * * DtoDeclarationExp: b2 | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = ubyte*) | |
* * * * * * * * * llvm value for decl: %9 = alloca i8*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: b2 = cast(ubyte*)p2 | (ubyte*)(ubyte* = ubyte*) | |
* * * * * * * * * * VarExp::toElem: b2 @ ubyte* | |
* * * * * * * * * * * DtoSymbolAddress ('b2' of type 'ubyte*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CastExp::toElem: cast(ubyte*)p2 @ ubyte* | |
* * * * * * * * * * * VarExp::toElem: p2 @ void* | |
* * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'void*') | |
* * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * type: void* | |
* * * * * * * * * * * Casting from 'void*' to 'ubyte*' | |
* * * * * * * * * * * * src: %20 = load i8*, i8** %6 | |
* * * * * * * * * * * * to type: i8* | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %9 = alloca i8*, align 8 | |
* * * * * * * * * * * rhs: %20 = load i8*, i8** %6 | |
* * * * * ForStatement::toIR(): object.d(318) | |
* * * * * * PostExp::toElem: size-- @ ulong | |
* * * * * * * VarExp::toElem: size @ ulong | |
* * * * * * * * DtoSymbolAddress ('size' of type 'ulong') | |
* * * * * * * * * a normal variable | |
* * * * * * * IntegerExp::toElem: 1LU @ ulong | |
* * * * * * * * IntegerExp::toConstElem: 1LU @ ulong | |
* * * * * * * * * value = i64 1 | |
* * * * * * Casting from 'ulong' to 'bool' | |
* * * * * * ScopeStatement::toIR(): object.d(318) | |
* * * * * * * CompoundStatement::toIR(): object.d(318) | |
* * * * * * * * ExpStatement::toIR(): object.d(319) | |
* * * * * * * * * DeclarationExp::toElem: (ubyte tmp = *b1;) | T=void | |
* * * * * * * * * * DtoDeclarationExp: tmp | |
* * * * * * * * * * * VarDeclaration | |
* * * * * * * * * * * DtoVarDeclaration(vdtype = ubyte) | |
* * * * * * * * * * * * llvm value for decl: %10 = alloca i8, align 1 | |
* * * * * * * * * * * * expression initializer | |
* * * * * * * * * * * * AssignExp::toElem: tmp = *b1 | (ubyte)(ubyte = ubyte) | |
* * * * * * * * * * * * * VarExp::toElem: tmp @ ubyte | |
* * * * * * * * * * * * * * DtoSymbolAddress ('tmp' of type 'ubyte') | |
* * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * PtrExp::toElem: *b1 @ ubyte | |
* * * * * * * * * * * * * * VarExp::toElem: b1 @ ubyte* | |
* * * * * * * * * * * * * * * DtoSymbolAddress ('b1' of type 'ubyte*') | |
* * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * * lhs: %10 = alloca i8, align 1 | |
* * * * * * * * * * * * * * rhs: %28 = load i8, i8* %27 | |
* * * * * * * * ExpStatement::toIR(): object.d(320) | |
* * * * * * * * * AssignExp::toElem: *b1 = *b2 | (ubyte)(ubyte = ubyte) | |
* * * * * * * * * * PtrExp::toElem: *b1 @ ubyte | |
* * * * * * * * * * * VarExp::toElem: b1 @ ubyte* | |
* * * * * * * * * * * * DtoSymbolAddress ('b1' of type 'ubyte*') | |
* * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * PtrExp::toElem: *b2 @ ubyte | |
* * * * * * * * * * * VarExp::toElem: b2 @ ubyte* | |
* * * * * * * * * * * * DtoSymbolAddress ('b2' of type 'ubyte*') | |
* * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %29 = load i8*, i8** %8 | |
* * * * * * * * * * * rhs: %31 = load i8, i8* %30 | |
* * * * * * * * ExpStatement::toIR(): object.d(321) | |
* * * * * * * * * AssignExp::toElem: *b2 = tmp | (ubyte)(ubyte = ubyte) | |
* * * * * * * * * * PtrExp::toElem: *b2 @ ubyte | |
* * * * * * * * * * * VarExp::toElem: b2 @ ubyte* | |
* * * * * * * * * * * * DtoSymbolAddress ('b2' of type 'ubyte*') | |
* * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * VarExp::toElem: tmp @ ubyte | |
* * * * * * * * * * * DtoSymbolAddress ('tmp' of type 'ubyte') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %32 = load i8*, i8** %9 | |
* * * * * * * * * * * rhs: %33 = load i8, i8* %10 | |
* * * * * * * * ExpStatement::toIR(): object.d(322) | |
* * * * * * * * * PostExp::toElem: b1++ @ ubyte* | |
* * * * * * * * * * VarExp::toElem: b1 @ ubyte* | |
* * * * * * * * * * * DtoSymbolAddress ('b1' of type 'ubyte*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * IntegerExp::toElem: 1L @ long | |
* * * * * * * * * * * IntegerExp::toConstElem: 1L @ long | |
* * * * * * * * * * * * value = i64 1 | |
* * * * * * * * ExpStatement::toIR(): object.d(323) | |
* * * * * * * * * PostExp::toElem: b2++ @ ubyte* | |
* * * * * * * * * * VarExp::toElem: b2 @ ubyte* | |
* * * * * * * * * * * DtoSymbolAddress ('b2' of type 'ubyte*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * IntegerExp::toElem: 1L @ long | |
* * * * * * * * * * * IntegerExp::toConstElem: 1L @ long | |
* * * * * * * * * * * * value = i64 1 | |
* * DtoDefineFunction(object.TypeInfo.next): object.d(328) | |
* * * isMember = this is: object.TypeInfo | |
* * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: %object.TypeInfo* (%object.TypeInfo*) | |
* * * DtoResolveFunction(object.TypeInfo.next): object.d(328) | |
* * * * DtoDeclareFunction(object.TypeInfo.next): object.d(328) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo | |
* * * * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)()) | |
* * * * * func = | |
declare %object.TypeInfo* @_D6object8TypeInfo4nextMNgFNaNbNdNiZNgCQBe(%object.TypeInfo*) | |
* * * Doing function body for: next | |
* * * DtoCreateNestedContext for object.TypeInfo.next | |
* * * * DtoCreateNestedContextType for object.TypeInfo.next | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(329) | |
* * * * * NullExp::toElem(type=inout(TypeInfo)): null | |
* * * * * * NullExp::toConstElem(type=inout(TypeInfo)): null | |
* * DtoDefineFunction(object.TypeInfo.initializer): object.d(335) | |
* * * isMember = this is: object.TypeInfo | |
* * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]()) | |
* * * * Building type: const(void)[] | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo*) | |
* * * DtoResolveFunction(object.TypeInfo.initializer): object.d(335) | |
* * * DtoDeclareFunction(object.TypeInfo.initializer): object.d(335) | |
* * * * Enter defineAsExternallyAvailable | |
* * * * * Cross-module inlining fully disabled. | |
* * * * isMember = this is: object.TypeInfo | |
* * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]()) | |
* * * * func = | |
declare { i64, i8* } @_D6object8TypeInfo11initializerMxFNaNbNiNfZAxv(%object.TypeInfo*) | |
* * DtoDefineFunction(object.TypeInfo.flags): object.d(338) | |
* * * isMember = this is: object.TypeInfo | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe uint()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo*) | |
* * * DtoResolveFunction(object.TypeInfo.flags): object.d(338) | |
* * * * DtoDeclareFunction(object.TypeInfo.flags): object.d(338) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint()) | |
* * * * * func = | |
declare i32 @_D6object8TypeInfo5flagsMxFNaNbNdNiNfZk(%object.TypeInfo*) | |
* * * Doing function body for: flags | |
* * * DtoCreateNestedContext for object.TypeInfo.flags | |
* * * * DtoCreateNestedContextType for object.TypeInfo.flags | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(339) | |
* * * * * IntegerExp::toElem: 0u @ uint | |
* * * * * * IntegerExp::toConstElem: 0u @ uint | |
* * * * * * * value = i32 0 | |
* * DtoDefineFunction(object.TypeInfo.offTi): object.d(343) | |
* * * isMember = this is: object.TypeInfo | |
* * * DtoFunctionType(const const(OffsetTypeInfo)[]()) | |
* * * * Building type: const(OffsetTypeInfo)[] | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, %object.OffsetTypeInfo* } (%object.TypeInfo*) | |
* * * DtoResolveFunction(object.TypeInfo.offTi): object.d(343) | |
* * * * DtoDeclareFunction(object.TypeInfo.offTi): object.d(343) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo | |
* * * * * DtoFunctionType(const const(OffsetTypeInfo)[]()) | |
* * * * * func = | |
declare { i64, %object.OffsetTypeInfo* } @_D6object8TypeInfo5offTiMxFZAxSQBd14OffsetTypeInfo(%object.TypeInfo*) | |
* * * Doing function body for: offTi | |
* * * DtoCreateNestedContext for object.TypeInfo.offTi | |
* * * * DtoCreateNestedContextType for object.TypeInfo.offTi | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(344) | |
* * * * * NullExp::toElem(type=const(OffsetTypeInfo)[]): null | |
* * * * * * NullExp::toConstElem(type=const(OffsetTypeInfo)[]): null | |
* * DtoDefineFunction(object.TypeInfo.destroy): object.d(348) | |
* * * isMember = this is: object.TypeInfo | |
* * * DtoFunctionType(const void(void* p)) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (%object.TypeInfo*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo.destroy): object.d(348) | |
* * * * DtoDeclareFunction(object.TypeInfo.destroy): object.d(348) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo | |
* * * * * DtoFunctionType(const void(void* p)) | |
* * * * * func = | |
declare void @_D6object8TypeInfo7destroyMxFPvZv(%object.TypeInfo*, i8*) | |
* * * Doing function body for: destroy | |
* * * DtoCreateNestedContext for object.TypeInfo.destroy | |
* * * * DtoCreateNestedContextType for object.TypeInfo.destroy | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(348) | |
* * DtoDefineFunction(object.TypeInfo.postblit): object.d(352) | |
* * * isMember = this is: object.TypeInfo | |
* * * DtoFunctionType(const void(void* p)) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (%object.TypeInfo*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo.postblit): object.d(352) | |
* * * * DtoDeclareFunction(object.TypeInfo.postblit): object.d(352) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo | |
* * * * * DtoFunctionType(const void(void* p)) | |
* * * * * func = | |
declare void @_D6object8TypeInfo8postblitMxFPvZv(%object.TypeInfo*, i8*) | |
* * * Doing function body for: postblit | |
* * * DtoCreateNestedContext for object.TypeInfo.postblit | |
* * * * DtoCreateNestedContextType for object.TypeInfo.postblit | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(352) | |
* * DtoDefineFunction(object.TypeInfo.talign): object.d(356) | |
* * * isMember = this is: object.TypeInfo | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo*) | |
* * * DtoResolveFunction(object.TypeInfo.talign): object.d(356) | |
* * * * DtoDeclareFunction(object.TypeInfo.talign): object.d(356) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object8TypeInfo6talignMxFNaNbNdNiNfZm(%object.TypeInfo*) | |
* * * Doing function body for: talign | |
* * * DtoCreateNestedContext for object.TypeInfo.talign | |
* * * * DtoCreateNestedContextType for object.TypeInfo.talign | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(357) | |
* * * * * CallExp::toElem: this.tsize() @ ulong | |
* * * * * * DotVarExp::toElem: this.tsize @ const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * ThisExp::toElem: this @ const(TypeInfo) | |
* * * * * * * * normal this exp | |
* * * * * * * vthis: %4 = load %object.TypeInfo*, %object.TypeInfo** %2 | |
* * * * * * * funcval: %8 = load i8*, i8** %7, align 8 | |
* * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * * * funcval casted: %9 = bitcast i8* %8 to i64 (%object.TypeInfo*)* | |
* * * * * * DtoCallFunction() | |
* * * * * * * Evaluating argument expressions | |
* * * * * * * doing normal arguments | |
* * * * * * * Arguments so far: (1) | |
* * * * * * * * %10 = load %object.TypeInfo*, %object.TypeInfo** %2 | |
* * * * * * * Function type: const pure nothrow @nogc @property @safe ulong() | |
* * DtoDefineFunction(object.TypeInfo.argTypes): object.d(361) | |
* * * isMember = this is: object.TypeInfo | |
* * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2)) | |
* * * * Building type: TypeInfo* | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo*, %object.TypeInfo**, %object.TypeInfo**) | |
* * * DtoResolveFunction(object.TypeInfo.argTypes): object.d(361) | |
* * * * DtoDeclareFunction(object.TypeInfo.argTypes): object.d(361) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo | |
* * * * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2)) | |
* * * * * func = | |
declare i32 @_D6object8TypeInfo8argTypesMFNbNfJCQBaJQfZi(%object.TypeInfo*, %object.TypeInfo**, %object.TypeInfo**) | |
* * * Doing function body for: argTypes | |
* * * DtoCreateNestedContext for object.TypeInfo.argTypes | |
* * * * DtoCreateNestedContextType for object.TypeInfo.argTypes | |
* * * CompoundStatement::toIR(): | |
* * * * ExpStatement::toIR(): | |
* * * * * AssignExp::toElem: arg1 = null | (object.TypeInfo)(object.TypeInfo = object.TypeInfo) | |
* * * * * * VarExp::toElem: arg1 @ object.TypeInfo | |
* * * * * * * DtoSymbolAddress ('arg1' of type 'object.TypeInfo') | |
* * * * * * * * function param | |
* * * * * * * * type: object.TypeInfo | |
* * * * * * NullExp::toElem(type=object.TypeInfo): null | |
* * * * * * * NullExp::toConstElem(type=object.TypeInfo): null | |
* * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * DtoAssign() | |
* * * * * * * l : %object.TypeInfo** %2 | |
* * * * * * * r : %object.TypeInfo* null | |
* * * * ExpStatement::toIR(): | |
* * * * * AssignExp::toElem: arg2 = null | (object.TypeInfo)(object.TypeInfo = object.TypeInfo) | |
* * * * * * VarExp::toElem: arg2 @ object.TypeInfo | |
* * * * * * * DtoSymbolAddress ('arg2' of type 'object.TypeInfo') | |
* * * * * * * * function param | |
* * * * * * * * type: object.TypeInfo | |
* * * * * * NullExp::toElem(type=object.TypeInfo): null | |
* * * * * * * NullExp::toConstElem(type=object.TypeInfo): null | |
* * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * DtoAssign() | |
* * * * * * * l : %object.TypeInfo** %1 | |
* * * * * * * r : %object.TypeInfo* null | |
* * * * CompoundStatement::toIR(): object.d(361) | |
* * * * * ExpStatement::toIR(): object.d(362) | |
* * * * * * AssignExp::toElem: arg1 = this | (object.TypeInfo)(object.TypeInfo = object.TypeInfo) | |
* * * * * * * VarExp::toElem: arg1 @ object.TypeInfo | |
* * * * * * * * DtoSymbolAddress ('arg1' of type 'object.TypeInfo') | |
* * * * * * * * * function param | |
* * * * * * * * * type: object.TypeInfo | |
* * * * * * * ThisExp::toElem: this @ object.TypeInfo | |
* * * * * * * * normal this exp | |
* * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * DtoAssign() | |
* * * * * * * * l : %object.TypeInfo** %2 | |
* * * * * * * * r : %6 = load %object.TypeInfo*, %object.TypeInfo** %4 | |
* * * * * ReturnStatement::toIR(): object.d(363) | |
* * * * * * IntegerExp::toElem: 0 @ int | |
* * * * * * * IntegerExp::toConstElem: 0 @ int | |
* * * * * * * * value = i32 0 | |
* * DtoDefineFunction(object.TypeInfo.rtInfo): object.d(367) | |
* * * isMember = this is: object.TypeInfo | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe immutable(void)*()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i8* (%object.TypeInfo*) | |
* * * DtoResolveFunction(object.TypeInfo.rtInfo): object.d(367) | |
* * * * DtoDeclareFunction(object.TypeInfo.rtInfo): object.d(367) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe immutable(void)*()) | |
* * * * * func = | |
declare i8* @_D6object8TypeInfo6rtInfoMxFNaNbNdNiNfZPyv(%object.TypeInfo*) | |
* * * Doing function body for: rtInfo | |
* * * DtoCreateNestedContext for object.TypeInfo.rtInfo | |
* * * * DtoCreateNestedContextType for object.TypeInfo.rtInfo | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(368) | |
* * * * * NullExp::toElem(type=immutable(void)*): null | |
* * * * * * NullExp::toConstElem(type=immutable(void)*): null | |
* * Building default initializer for object.TypeInfo | |
* * * Creating initializer constant for TypeInfo | |
* * * * final initializer: %object.TypeInfo { [19 x i8*]* @_D8TypeInfo6__vtblZ, i8* null } | |
* * Building vtbl initializer | |
* * DtoDefineClassInfo(TypeInfo) | |
* * * Building ClassInfo.interfaces | |
* ClassDeclaration::codegen: 'object.TypeInfo_Class' | |
* * DtoDefineFunction(object.TypeInfo_Class.toString): object.d(374) | |
* * * isMember = this is: object.TypeInfo_Class | |
* * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Class*) | |
* * * DtoResolveFunction(object.TypeInfo_Class.toString): object.d(374) | |
* * * * DtoDeclareFunction(object.TypeInfo_Class.toString): object.d(374) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Class | |
* * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object14TypeInfo_Class8toStringMxFNaNbNfZAya(%object.TypeInfo_Class*) | |
* * * Doing function body for: toString | |
* * * DtoCreateNestedContext for object.TypeInfo_Class.toString | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Class.toString | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(375) | |
* * * * * DotVarExp::toElem: this.name @ string | |
* * * * * * ThisExp::toElem: this @ const(TypeInfo_Class) | |
* * * * * * * normal this exp | |
* * * * * * Indexing aggregate field object.TypeInfo_Class.name: | |
* * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Class, %object.TypeInfo_Class* %4, i32 0, i32 3 | |
* * DtoDefineFunction(object.TypeInfo_Class.opEquals): object.d(378) | |
* * * isMember = this is: object.TypeInfo_Class | |
* * * DtoFunctionType(bool(Object o)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i1 (%object.TypeInfo_Class*, %object.Object*) | |
* * * DtoResolveFunction(object.TypeInfo_Class.opEquals): object.d(378) | |
* * * * DtoDeclareFunction(object.TypeInfo_Class.opEquals): object.d(378) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Class | |
* * * * * DtoFunctionType(bool(Object o)) | |
* * * * * func = | |
declare i1 @_D6object14TypeInfo_Class8opEqualsMFC6ObjectZb(%object.TypeInfo_Class*, %object.Object*) | |
* * * Doing function body for: opEquals | |
* * * DtoCreateNestedContext for object.TypeInfo_Class.opEquals | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Class.opEquals | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(378) | |
* * * * * IfStatement::toIR(): object.d(379) | |
* * * * * * IdentityExp::toElem: this is o @ bool | |
* * * * * * * ThisExp::toElem: this @ object.Object | |
* * * * * * * * normal this exp | |
* * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * function param | |
* * * * * * * * * type: object.Object | |
* * * * * * ReturnStatement::toIR(): object.d(380) | |
* * * * * * * IntegerExp::toElem: true @ bool | |
* * * * * * * * IntegerExp::toConstElem: true @ bool | |
* * * * * * * * * value = i1 true | |
* * * * * ExpStatement::toIR(): object.d(381) | |
* * * * * * DeclarationExp::toElem: (const const(TypeInfo_Class) c = cast(const(TypeInfo_Class))o;) | T=void | |
* * * * * * * DtoDeclarationExp: c | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = const(TypeInfo_Class)) | |
* * * * * * * * * llvm value for decl: %5 = alloca %object.TypeInfo_Class*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: c = cast(const(TypeInfo_Class))o | (const(TypeInfo_Class))(const(TypeInfo_Class) = const(TypeInfo_Class)) | |
* * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_Class) | |
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Class)') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CastExp::toElem: cast(const(TypeInfo_Class))o @ const(TypeInfo_Class) | |
* * * * * * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * type: object.Object | |
* * * * * * * * * * * Casting from 'object.Object' to 'const(TypeInfo_Class)' | |
* * * * * * * * * * * * DtoCastClass(object.Object, const(TypeInfo_Class)) | |
* * * * * * * * * * * * * dynamic up cast | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * l : %5 = alloca %object.TypeInfo_Class*, align 8 | |
* * * * * * * * * * * r : %16 = bitcast i8* %15 to %object.TypeInfo_Class* | |
* * * * * ReturnStatement::toIR(): object.d(382) | |
* * * * * * LogicalExp::toElem: c && this.name == c.name @ bool | |
* * * * * * * VarExp::toElem: c @ const(TypeInfo_Class) | |
* * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Class)') | |
* * * * * * * * * a normal variable | |
* * * * * * * Casting from 'const(TypeInfo_Class)' to 'bool' | |
* * * * * * * * DtoCastClass(const(TypeInfo_Class), bool) | |
* * * * * * * * * to bool | |
* * * * * * * EqualExp::toElem: this.name == c.name @ bool | |
* * * * * * * * DotVarExp::toElem: this.name @ const(string) | |
* * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Class | |
* * * * * * * * * * normal this exp | |
* * * * * * * * * Indexing aggregate field object.TypeInfo_Class.name: | |
* * * * * * * * * * Value: %21 = getelementptr inbounds %object.TypeInfo_Class, %object.TypeInfo_Class* %20, i32 0, i32 3 | |
* * * * * * * * DotVarExp::toElem: c.name @ const(string) | |
* * * * * * * * * VarExp::toElem: c @ const(TypeInfo_Class) | |
* * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Class)') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * Indexing aggregate field object.TypeInfo_Class.name: | |
* * * * * * * * * * Value: %23 = getelementptr inbounds %object.TypeInfo_Class, %object.TypeInfo_Class* %22, i32 0, i32 3 | |
* * * * * * * * static or dynamic array | |
* * * * * * * * Comparing arrays using memcmp | |
* * * * * * * * DtoArrayPtr | |
* * * * * * * * DtoArrayPtr | |
* * * * * * * * DtoArrayLen | |
* * * * * * * * DtoArrayLen | |
* * DtoDefineFunction(object.TypeInfo_Class.getHash): object.d(385) | |
* * * isMember = this is: object.TypeInfo_Class | |
* * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_Class*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Class.getHash): object.d(385) | |
* * * * DtoDeclareFunction(object.TypeInfo_Class.getHash): object.d(385) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Class | |
* * * * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p)) | |
* * * * * func = | |
declare i64 @_D6object14TypeInfo_Class7getHashMxFNbNexPvZm(%object.TypeInfo_Class*, i8*) | |
* * * Doing function body for: getHash | |
* * * DtoCreateNestedContext for object.TypeInfo_Class.getHash | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Class.getHash | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(385) | |
* * * * * ExpStatement::toIR(): object.d(386) | |
* * * * * * DeclarationExp::toElem: (Object o = *cast(Object*)p;) | T=void | |
* * * * * * * DtoDeclarationExp: o | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = object.Object) | |
* * * * * * * * * llvm value for decl: %5 = alloca %object.Object*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: o = *cast(Object*)p | (object.Object)(object.Object = object.Object) | |
* * * * * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * PtrExp::toElem: *cast(Object*)p @ object.Object | |
* * * * * * * * * * * CastExp::toElem: cast(Object*)p @ Object* | |
* * * * * * * * * * * * VarExp::toElem: p @ const(void*) | |
* * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'const(void*)') | |
* * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * Casting from 'const(void*)' to 'Object*' | |
* * * * * * * * * * * * * src: %7 = load i8*, i8** %4 | |
* * * * * * * * * * * * * to type: %object.Object** | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * l : %5 = alloca %object.Object*, align 8 | |
* * * * * * * * * * * r : %9 = load %object.Object*, %object.Object** %8 | |
* * * * * ReturnStatement::toIR(): object.d(387) | |
* * * * * * CondExp::toElem: o ? o.toHash() : 0LU @ ulong | |
* * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * a normal variable | |
* * * * * * * Casting from 'object.Object' to 'bool' | |
* * * * * * * * DtoCastClass(object.Object, bool) | |
* * * * * * * * * to bool | |
* * * * * * * CallExp::toElem: o.toHash() @ ulong | |
* * * * * * * * DotVarExp::toElem: o.toHash @ nothrow @trusted ulong() | |
* * * * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * vthis: %14 = load %object.Object*, %object.Object** %5 | |
* * * * * * * * * funcval: %18 = load i8*, i8** %17, align 8 | |
* * * * * * * * * isMember = this is: object.Object | |
* * * * * * * * * DtoFunctionType(nothrow @trusted ulong()) | |
* * * * * * * * * funcval casted: %19 = bitcast i8* %18 to i64 (%object.Object*)* | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * Building type: nothrow @trusted ulong() | |
* * * * * * * * * * DtoFunctionType(nothrow @trusted ulong()) | |
* * * * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * * Final function type: i64 () | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * %20 = load %object.Object*, %object.Object** %5 | |
* * * * * * * * * Function type: nothrow @trusted ulong() | |
* * * * * * * IntegerExp::toElem: 0LU @ ulong | |
* * * * * * * * IntegerExp::toConstElem: 0LU @ ulong | |
* * * * * * * * * value = i64 0 | |
* * DtoDefineFunction(object.TypeInfo_Class.equals): object.d(390) | |
* * * isMember = this is: object.TypeInfo_Class | |
* * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i1 (%object.TypeInfo_Class*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Class.equals): object.d(390) | |
* * * * DtoDeclareFunction(object.TypeInfo_Class.equals): object.d(390) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Class | |
* * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2)) | |
* * * * * func = | |
declare i1 @_D6object14TypeInfo_Class6equalsMxFxPvxQdZb(%object.TypeInfo_Class*, i8*, i8*) | |
* * * Doing function body for: equals | |
* * * DtoCreateNestedContext for object.TypeInfo_Class.equals | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Class.equals | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(390) | |
* * * * * ExpStatement::toIR(): object.d(391) | |
* * * * * * DeclarationExp::toElem: (Object o1 = *cast(Object*)p1;) | T=void | |
* * * * * * * DtoDeclarationExp: o1 | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = object.Object) | |
* * * * * * * * * llvm value for decl: %7 = alloca %object.Object*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: o1 = *cast(Object*)p1 | (object.Object)(object.Object = object.Object) | |
* * * * * * * * * * VarExp::toElem: o1 @ object.Object | |
* * * * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * PtrExp::toElem: *cast(Object*)p1 @ object.Object | |
* * * * * * * * * * * CastExp::toElem: cast(Object*)p1 @ Object* | |
* * * * * * * * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * Casting from 'const(void*)' to 'Object*' | |
* * * * * * * * * * * * * src: %9 = load i8*, i8** %5 | |
* * * * * * * * * * * * * to type: %object.Object** | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * l : %7 = alloca %object.Object*, align 8 | |
* * * * * * * * * * * r : %11 = load %object.Object*, %object.Object** %10 | |
* * * * * ExpStatement::toIR(): object.d(392) | |
* * * * * * DeclarationExp::toElem: (Object o2 = *cast(Object*)p2;) | T=void | |
* * * * * * * DtoDeclarationExp: o2 | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = object.Object) | |
* * * * * * * * * llvm value for decl: %8 = alloca %object.Object*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: o2 = *cast(Object*)p2 | (object.Object)(object.Object = object.Object) | |
* * * * * * * * * * VarExp::toElem: o2 @ object.Object | |
* * * * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * PtrExp::toElem: *cast(Object*)p2 @ object.Object | |
* * * * * * * * * * * CastExp::toElem: cast(Object*)p2 @ Object* | |
* * * * * * * * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * Casting from 'const(void*)' to 'Object*' | |
* * * * * * * * * * * * * src: %13 = load i8*, i8** %6 | |
* * * * * * * * * * * * * to type: %object.Object** | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * l : %8 = alloca %object.Object*, align 8 | |
* * * * * * * * * * * r : %15 = load %object.Object*, %object.Object** %14 | |
* * * * * ReturnStatement::toIR(): object.d(394) | |
* * * * * * LogicalExp::toElem: o1 is o2 || o1 && o1.opEquals(o2) @ bool | |
* * * * * * * IdentityExp::toElem: o1 is o2 @ bool | |
* * * * * * * * VarExp::toElem: o1 @ object.Object | |
* * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object') | |
* * * * * * * * * * a normal variable | |
* * * * * * * * VarExp::toElem: o2 @ object.Object | |
* * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object') | |
* * * * * * * * * * a normal variable | |
* * * * * * * LogicalExp::toElem: o1 && o1.opEquals(o2) @ bool | |
* * * * * * * * VarExp::toElem: o1 @ object.Object | |
* * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object') | |
* * * * * * * * * * a normal variable | |
* * * * * * * * Casting from 'object.Object' to 'bool' | |
* * * * * * * * * DtoCastClass(object.Object, bool) | |
* * * * * * * * * * to bool | |
* * * * * * * * CallExp::toElem: o1.opEquals(o2) @ bool | |
* * * * * * * * * DotVarExp::toElem: o1.opEquals @ bool(Object o) | |
* * * * * * * * * * VarExp::toElem: o1 @ object.Object | |
* * * * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * vthis: %23 = load %object.Object*, %object.Object** %7 | |
* * * * * * * * * * funcval: %27 = load i8*, i8** %26, align 8 | |
* * * * * * * * * * isMember = this is: object.Object | |
* * * * * * * * * * DtoFunctionType(bool(Object o)) | |
* * * * * * * * * * funcval casted: %28 = bitcast i8* %27 to i1 (%object.Object*, %object.Object*)* | |
* * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * VarExp::toElem: o2 @ object.Object | |
* * * * * * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * doing normal arguments | |
* * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * %29 = load %object.Object*, %object.Object** %7 | |
* * * * * * * * * * Function type: bool(Object o) | |
* * DtoDefineFunction(object.TypeInfo_Class.compare): object.d(397) | |
* * * isMember = this is: object.TypeInfo_Class | |
* * * DtoFunctionType(const int(const(void*) p1, const(void*) p2)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo_Class*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Class.compare): object.d(397) | |
* * * * DtoDeclareFunction(object.TypeInfo_Class.compare): object.d(397) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Class | |
* * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2)) | |
* * * * * func = | |
declare i32 @_D6object14TypeInfo_Class7compareMxFxPvxQdZi(%object.TypeInfo_Class*, i8*, i8*) | |
* * * Doing function body for: compare | |
* * * DtoCreateNestedContext for object.TypeInfo_Class.compare | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Class.compare | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(397) | |
* * * * * ExpStatement::toIR(): object.d(398) | |
* * * * * * DeclarationExp::toElem: (Object o1 = *cast(Object*)p1;) | T=void | |
* * * * * * * DtoDeclarationExp: o1 | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = object.Object) | |
* * * * * * * * * llvm value for decl: %7 = alloca %object.Object*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: o1 = *cast(Object*)p1 | (object.Object)(object.Object = object.Object) | |
* * * * * * * * * * VarExp::toElem: o1 @ object.Object | |
* * * * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * PtrExp::toElem: *cast(Object*)p1 @ object.Object | |
* * * * * * * * * * * CastExp::toElem: cast(Object*)p1 @ Object* | |
* * * * * * * * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * Casting from 'const(void*)' to 'Object*' | |
* * * * * * * * * * * * * src: %9 = load i8*, i8** %5 | |
* * * * * * * * * * * * * to type: %object.Object** | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * l : %7 = alloca %object.Object*, align 8 | |
* * * * * * * * * * * r : %11 = load %object.Object*, %object.Object** %10 | |
* * * * * ExpStatement::toIR(): object.d(399) | |
* * * * * * DeclarationExp::toElem: (Object o2 = *cast(Object*)p2;) | T=void | |
* * * * * * * DtoDeclarationExp: o2 | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = object.Object) | |
* * * * * * * * * llvm value for decl: %8 = alloca %object.Object*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: o2 = *cast(Object*)p2 | (object.Object)(object.Object = object.Object) | |
* * * * * * * * * * VarExp::toElem: o2 @ object.Object | |
* * * * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * PtrExp::toElem: *cast(Object*)p2 @ object.Object | |
* * * * * * * * * * * CastExp::toElem: cast(Object*)p2 @ Object* | |
* * * * * * * * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * Casting from 'const(void*)' to 'Object*' | |
* * * * * * * * * * * * * src: %13 = load i8*, i8** %6 | |
* * * * * * * * * * * * * to type: %object.Object** | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * l : %8 = alloca %object.Object*, align 8 | |
* * * * * * * * * * * r : %15 = load %object.Object*, %object.Object** %14 | |
* * * * * ExpStatement::toIR(): object.d(400) | |
* * * * * * DeclarationExp::toElem: (int c = 0;) | T=void | |
* * * * * * * DtoDeclarationExp: c | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = int) | |
* * * * * * * * * llvm value for decl: %9 = alloca i32, align 4 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: c = 0 | (int)(int = int) | |
* * * * * * * * * * VarExp::toElem: c @ int | |
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'int') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * IntegerExp::toElem: 0 @ int | |
* * * * * * * * * * * IntegerExp::toConstElem: 0 @ int | |
* * * * * * * * * * * * value = i32 0 | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %9 = alloca i32, align 4 | |
* * * * * * * * * * * rhs: i32 0 | |
* * * * * IfStatement::toIR(): object.d(403) | |
* * * * * * IdentityExp::toElem: o1 !is o2 @ bool | |
* * * * * * * VarExp::toElem: o1 @ object.Object | |
* * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object') | |
* * * * * * * * * a normal variable | |
* * * * * * * VarExp::toElem: o2 @ object.Object | |
* * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object') | |
* * * * * * * * * a normal variable | |
* * * * * * ScopeStatement::toIR(): object.d(403) | |
* * * * * * * IfStatement::toIR(): object.d(404) | |
* * * * * * * * VarExp::toElem: o1 @ object.Object | |
* * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object') | |
* * * * * * * * * * a normal variable | |
* * * * * * * * if conditional: %21 = load %object.Object*, %object.Object** %7 | |
* * * * * * * * Casting from 'object.Object' to 'bool' | |
* * * * * * * * * DtoCastClass(object.Object, bool) | |
* * * * * * * * * * to bool | |
* * * * * * * * ScopeStatement::toIR(): object.d(404) | |
* * * * * * * * * IfStatement::toIR(): object.d(405) | |
* * * * * * * * * * NotExp::toElem: !o2 @ bool | |
* * * * * * * * * * * VarExp::toElem: o2 @ object.Object | |
* * * * * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object') | |
* * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * Casting from 'object.Object' to 'bool' | |
* * * * * * * * * * * * DtoCastClass(object.Object, bool) | |
* * * * * * * * * * * * * to bool | |
* * * * * * * * * * ExpStatement::toIR(): object.d(406) | |
* * * * * * * * * * * AssignExp::toElem: c = 1 | (int)(int = int) | |
* * * * * * * * * * * * VarExp::toElem: c @ int | |
* * * * * * * * * * * * * DtoSymbolAddress ('c' of type 'int') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * IntegerExp::toElem: 1 @ int | |
* * * * * * * * * * * * * IntegerExp::toConstElem: 1 @ int | |
* * * * * * * * * * * * * * value = i32 1 | |
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * lhs: %9 = alloca i32, align 4 | |
* * * * * * * * * * * * * rhs: i32 1 | |
* * * * * * * * * * ExpStatement::toIR(): object.d(408) | |
* * * * * * * * * * * AssignExp::toElem: c = o1.opCmp(o2) | (int)(int = int) | |
* * * * * * * * * * * * VarExp::toElem: c @ int | |
* * * * * * * * * * * * * DtoSymbolAddress ('c' of type 'int') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * CallExp::toElem: o1.opCmp(o2) @ int | |
* * * * * * * * * * * * * DotVarExp::toElem: o1.opCmp @ int(Object o) | |
* * * * * * * * * * * * * * VarExp::toElem: o1 @ object.Object | |
* * * * * * * * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object') | |
* * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * vthis: %30 = load %object.Object*, %object.Object** %7 | |
* * * * * * * * * * * * * * funcval: %34 = load i8*, i8** %33, align 8 | |
* * * * * * * * * * * * * * isMember = this is: object.Object | |
* * * * * * * * * * * * * * DtoFunctionType(int(Object o)) | |
* * * * * * * * * * * * * * funcval casted: %35 = bitcast i8* %34 to i32 (%object.Object*, %object.Object*)* | |
* * * * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * * VarExp::toElem: o2 @ object.Object | |
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object') | |
* * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * Building type: int(Object o) | |
* * * * * * * * * * * * * * * DtoFunctionType(int(Object o)) | |
* * * * * * * * * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * * * * * * * Final function type: i32 (%object.Object*) | |
* * * * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * * * %36 = load %object.Object*, %object.Object** %7 | |
* * * * * * * * * * * * * * Function type: int(Object o) | |
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * lhs: %9 = alloca i32, align 4 | |
* * * * * * * * * * * * * rhs: %38 = call i32 %35(%object.Object* nonnull %36, %object.Object* %37) | |
* * * * * * * * ExpStatement::toIR(): object.d(410) | |
* * * * * * * * * AssignExp::toElem: c = -1 | (int)(int = int) | |
* * * * * * * * * * VarExp::toElem: c @ int | |
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'int') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * IntegerExp::toElem: -1 @ int | |
* * * * * * * * * * * IntegerExp::toConstElem: -1 @ int | |
* * * * * * * * * * * * value = i32 -1 | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %9 = alloca i32, align 4 | |
* * * * * * * * * * * rhs: i32 -1 | |
* * * * * ReturnStatement::toIR(): object.d(412) | |
* * * * * * VarExp::toElem: c @ int | |
* * * * * * * DtoSymbolAddress ('c' of type 'int') | |
* * * * * * * * a normal variable | |
* * DtoDefineFunction(object.TypeInfo_Class.tsize): object.d(415) | |
* * * isMember = this is: object.TypeInfo_Class | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_Class*) | |
* * * DtoResolveFunction(object.TypeInfo_Class.tsize): object.d(415) | |
* * * * DtoDeclareFunction(object.TypeInfo_Class.tsize): object.d(415) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Class | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object14TypeInfo_Class5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_Class*) | |
* * * Doing function body for: tsize | |
* * * DtoCreateNestedContext for object.TypeInfo_Class.tsize | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Class.tsize | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(416) | |
* * * * * IntegerExp::toElem: 8LU @ ulong | |
* * * * * * IntegerExp::toConstElem: 8LU @ ulong | |
* * * * * * * value = i64 8 | |
* * DtoDefineFunction(object.TypeInfo_Class.initializer): object.d(419) | |
* * * isMember = this is: object.TypeInfo_Class | |
* * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Class*) | |
* * * DtoResolveFunction(object.TypeInfo_Class.initializer): object.d(419) | |
* * * * DtoDeclareFunction(object.TypeInfo_Class.initializer): object.d(419) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Class | |
* * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object14TypeInfo_Class11initializerMxFNaNbNiNfZAxv(%object.TypeInfo_Class*) | |
* * * Doing function body for: initializer | |
* * * DtoCreateNestedContext for object.TypeInfo_Class.initializer | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Class.initializer | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(420) | |
* * * * * CastExp::toElem: cast(const(void)[])this.m_init @ const(void)[] | |
* * * * * * DotVarExp::toElem: this.m_init @ const(byte[]) | |
* * * * * * * ThisExp::toElem: this @ const(TypeInfo_Class) | |
* * * * * * * * normal this exp | |
* * * * * * * Indexing aggregate field object.TypeInfo_Class.m_init: | |
* * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Class, %object.TypeInfo_Class* %4, i32 0, i32 2 | |
* * * * * * * Building type: const(byte)[] | |
* * * * * * Casting from 'const(byte[])' to 'const(void)[]' | |
* * * * * * * DtoCastArray | |
* * * * * * * * from array or sarray | |
* * * * * * * * to array | |
* * * * * * * * DtoArrayLen | |
* * * * * * * * DtoArrayPtr | |
* * DtoDefineFunction(object.TypeInfo_Class.flags): object.d(423) | |
* * * isMember = this is: object.TypeInfo_Class | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe uint()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo_Class*) | |
* * * DtoResolveFunction(object.TypeInfo_Class.flags): object.d(423) | |
* * * * DtoDeclareFunction(object.TypeInfo_Class.flags): object.d(423) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Class | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint()) | |
* * * * * func = | |
declare i32 @_D6object14TypeInfo_Class5flagsMxFNaNbNdNiNfZk(%object.TypeInfo_Class*) | |
* * * Doing function body for: flags | |
* * * DtoCreateNestedContext for object.TypeInfo_Class.flags | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Class.flags | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(424) | |
* * * * * IntegerExp::toElem: 1u @ uint | |
* * * * * * IntegerExp::toConstElem: 1u @ uint | |
* * * * * * * value = i32 1 | |
* * DtoDefineFunction(object.TypeInfo_Class.offTi): object.d(427) | |
* * * isMember = this is: object.TypeInfo_Class | |
* * * DtoFunctionType(const pure nothrow @property const(OffsetTypeInfo)[]()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, %object.OffsetTypeInfo* } (%object.TypeInfo_Class*) | |
* * * DtoResolveFunction(object.TypeInfo_Class.offTi): object.d(427) | |
* * * * DtoDeclareFunction(object.TypeInfo_Class.offTi): object.d(427) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Class | |
* * * * * DtoFunctionType(const pure nothrow @property const(OffsetTypeInfo)[]()) | |
* * * * * func = | |
declare { i64, %object.OffsetTypeInfo* } @_D6object14TypeInfo_Class5offTiMxFNaNbNdZAxSQBq14OffsetTypeInfo(%object.TypeInfo_Class*) | |
* * * Doing function body for: offTi | |
* * * DtoCreateNestedContext for object.TypeInfo_Class.offTi | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Class.offTi | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(428) | |
* * * * * DotVarExp::toElem: this.m_offTi @ const(OffsetTypeInfo)[] | |
* * * * * * ThisExp::toElem: this @ const(TypeInfo_Class) | |
* * * * * * * normal this exp | |
* * * * * * Indexing aggregate field object.TypeInfo_Class.m_offTi: | |
* * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Class, %object.TypeInfo_Class* %4, i32 0, i32 12 | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Class.m_init' | |
* * * DtoResolveVariable(object.TypeInfo_Class.m_init) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Class.name' | |
* * * DtoResolveVariable(object.TypeInfo_Class.name) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Class.vtbl' | |
* * * DtoResolveVariable(object.TypeInfo_Class.vtbl) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Class.interfaces' | |
* * * DtoResolveVariable(object.TypeInfo_Class.interfaces) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Class.base' | |
* * * DtoResolveVariable(object.TypeInfo_Class.base) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Class.destructor' | |
* * * DtoResolveVariable(object.TypeInfo_Class.destructor) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Class.classInvariant' | |
* * * DtoResolveVariable(object.TypeInfo_Class.classInvariant) | |
* * Ignoring EnumDeclaration::codegen: 'object.TypeInfo_Class.ClassFlags' | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Class.m_flags' | |
* * * DtoResolveVariable(object.TypeInfo_Class.m_flags) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Class.deallocator' | |
* * * DtoResolveVariable(object.TypeInfo_Class.deallocator) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Class.m_offTi' | |
* * * DtoResolveVariable(object.TypeInfo_Class.m_offTi) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Class.defaultConstructor' | |
* * * DtoResolveVariable(object.TypeInfo_Class.defaultConstructor) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Class.m_RTInfo' | |
* * * DtoResolveVariable(object.TypeInfo_Class.m_RTInfo) | |
* * DtoDefineFunction(object.TypeInfo_Class.rtInfo): object.d(458) | |
* * * isMember = this is: object.TypeInfo_Class | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe immutable(void)*()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i8* (%object.TypeInfo_Class*) | |
* * * DtoResolveFunction(object.TypeInfo_Class.rtInfo): object.d(458) | |
* * * * DtoDeclareFunction(object.TypeInfo_Class.rtInfo): object.d(458) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Class | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe immutable(void)*()) | |
* * * * * func = | |
declare i8* @_D6object14TypeInfo_Class6rtInfoMxFNaNbNdNiNfZPyv(%object.TypeInfo_Class*) | |
* * * Doing function body for: rtInfo | |
* * * DtoCreateNestedContext for object.TypeInfo_Class.rtInfo | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Class.rtInfo | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(459) | |
* * * * * DotVarExp::toElem: this.m_RTInfo @ immutable(void)* | |
* * * * * * ThisExp::toElem: this @ const(TypeInfo_Class) | |
* * * * * * * normal this exp | |
* * * * * * Indexing aggregate field object.TypeInfo_Class.m_RTInfo: | |
* * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Class, %object.TypeInfo_Class* %4, i32 0, i32 14 | |
* * DtoDefineFunction(object.TypeInfo_Class.find): object.d(463) | |
* * * DtoFunctionType(const(TypeInfo_Class)(const(char[]) classname)) | |
* * * * Building type: const(char)[] | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: %object.TypeInfo_Class* ({ i64, i8* }) | |
* * * DtoResolveFunction(object.TypeInfo_Class.find): object.d(463) | |
* * * * DtoDeclareFunction(object.TypeInfo_Class.find): object.d(463) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * DtoFunctionType(const(TypeInfo_Class)(const(char[]) classname)) | |
* * * * * func = | |
declare %object.TypeInfo_Class* @_D6object14TypeInfo_Class4findFxAaZxCQBc({ i64, i8* }) | |
* * * Doing function body for: find | |
* * * DtoCreateNestedContext for object.TypeInfo_Class.find | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Class.find | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(464) | |
* * * * * NullExp::toElem(type=const(TypeInfo_Class)): null | |
* * * * * * NullExp::toConstElem(type=const(TypeInfo_Class)): null | |
* * DtoDefineFunction(object.TypeInfo_Class.create): object.d(468) | |
* * * isMember = this is: object.TypeInfo_Class | |
* * * DtoFunctionType(const Object()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: %object.Object* (%object.TypeInfo_Class*) | |
* * * DtoResolveFunction(object.TypeInfo_Class.create): object.d(468) | |
* * * * DtoDeclareFunction(object.TypeInfo_Class.create): object.d(468) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Class | |
* * * * * DtoFunctionType(const Object()) | |
* * * * * func = | |
declare %object.Object* @_D6object14TypeInfo_Class6createMxFZC6Object(%object.TypeInfo_Class*) | |
* * * Doing function body for: create | |
* * * DtoCreateNestedContext for object.TypeInfo_Class.create | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Class.create | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(469) | |
* * * * * NullExp::toElem(type=object.Object): null | |
* * * * * * NullExp::toConstElem(type=object.Object): null | |
* * Building default initializer for object.TypeInfo_Class | |
* * * Creating initializer constant for TypeInfo_Class | |
* * * * Field priority for m_init: 1 | |
* * * * Field priority for name: 1 | |
* * * * Field priority for vtbl: 1 | |
* * * * Field priority for interfaces: 1 | |
* * * * Field priority for base: 1 | |
* * * * Field priority for destructor: 1 | |
* * * * Field priority for classInvariant: 1 | |
* * * * Field priority for m_flags: 1 | |
* * * * Field priority for deallocator: 1 | |
* * * * Field priority for m_offTi: 1 | |
* * * * Field priority for defaultConstructor: 1 | |
* * * * Field priority for m_RTInfo: 1 | |
* * * * Building type: ClassFlags | |
* * * * Building type: ClassFlags | |
* * * * DtoConstExpInit(targetType = byte[], exp = null) | |
* * * * * NullExp::toConstElem(type=byte[]): null | |
* * * * DtoConstExpInit(targetType = string, exp = null) | |
* * * * * NullExp::toConstElem(type=string): null | |
* * * * DtoConstExpInit(targetType = void*[], exp = null) | |
* * * * * NullExp::toConstElem(type=void*[]): null | |
* * * * DtoConstExpInit(targetType = Interface[], exp = null) | |
* * * * * NullExp::toConstElem(type=Interface[]): null | |
* * * * DtoConstExpInit(targetType = object.TypeInfo_Class, exp = null) | |
* * * * * NullExp::toConstElem(type=object.TypeInfo_Class): null | |
* * * * DtoConstExpInit(targetType = void*, exp = null) | |
* * * * * NullExp::toConstElem(type=void*): null | |
* * * * DtoConstExpInit(targetType = void function(Object), exp = null) | |
* * * * * NullExp::toConstElem(type=void function(Object)): null | |
* * * * DtoConstExpInit(targetType = ClassFlags, exp = cast(ClassFlags)1u) | |
* * * * * IntegerExp::toConstElem: cast(ClassFlags)1u @ ClassFlags | |
* * * * * * Building type: ClassFlags | |
* * * * * * value = i32 1 | |
* * * * DtoConstExpInit(targetType = void*, exp = null) | |
* * * * * NullExp::toConstElem(type=void*): null | |
* * * * DtoConstExpInit(targetType = OffsetTypeInfo[], exp = null) | |
* * * * * NullExp::toConstElem(type=OffsetTypeInfo[]): null | |
* * * * DtoConstExpInit(targetType = void function(Object), exp = null) | |
* * * * * NullExp::toConstElem(type=void function(Object)): null | |
* * * * DtoConstExpInit(targetType = immutable(void)*, exp = null) | |
* * * * * NullExp::toConstElem(type=immutable(void)*): null | |
* * * * final initializer: %object.TypeInfo_Class { [20 x i8*]* @_D14TypeInfo_Class6__vtblZ, i8* null, { i64, i8* } zeroinitializer, { i64, i8* } zeroinitializer, { i64, i8** } zeroinitializer, { i64, %object.Interface* } zeroinitializer, %object.TypeInfo_Class* null, i8* null, void (%object.Object*)* null, i32 1, [4 x i8] zeroinitializer, i8* null, { i64, %object.OffsetTypeInfo* } zeroinitializer, void (%object.Object*)* null, i8* null } | |
* * Building vtbl initializer | |
* * DtoDefineClassInfo(TypeInfo_Class) | |
* * * Building ClassInfo.interfaces | |
* Ignoring Dsymbol::codegen for object.ClassInfo | |
* ClassDeclaration::codegen: 'object.TypeInfo_AssociativeArray' | |
* * DtoResolveClass(object.TypeInfo_AssociativeArray): object.d(475) | |
* * DtoDefineFunction(object.TypeInfo_AssociativeArray.toString): object.d(476) | |
* * * isMember = this is: object.TypeInfo_AssociativeArray | |
* * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_AssociativeArray*) | |
* * * DtoResolveFunction(object.TypeInfo_AssociativeArray.toString): object.d(476) | |
* * * * DtoDeclareFunction(object.TypeInfo_AssociativeArray.toString): object.d(476) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_AssociativeArray | |
* * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object25TypeInfo_AssociativeArray8toStringMxFNaNbNfZAya(%object.TypeInfo_AssociativeArray*) | |
* * * Doing function body for: toString | |
* * * DtoCreateNestedContext for object.TypeInfo_AssociativeArray.toString | |
* * * * DtoCreateNestedContextType for object.TypeInfo_AssociativeArray.toString | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(477) | |
* * * * * StringExp::toElem: "(AA)UNK[UNK]" @ string | |
* * * * * * type: [13 x i8] | |
* * * * * * init: [13 x i8] c"(AA)UNK[UNK]\00" | |
* * DtoDefineFunction(object.TypeInfo_AssociativeArray.opEquals): object.d(480) | |
* * * isMember = this is: object.TypeInfo_AssociativeArray | |
* * * DtoFunctionType(bool(Object o)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i1 (%object.TypeInfo_AssociativeArray*, %object.Object*) | |
* * * DtoResolveFunction(object.TypeInfo_AssociativeArray.opEquals): object.d(480) | |
* * * * DtoDeclareFunction(object.TypeInfo_AssociativeArray.opEquals): object.d(480) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_AssociativeArray | |
* * * * * DtoFunctionType(bool(Object o)) | |
* * * * * func = | |
declare i1 @_D6object25TypeInfo_AssociativeArray8opEqualsMFC6ObjectZb(%object.TypeInfo_AssociativeArray*, %object.Object*) | |
* * * Doing function body for: opEquals | |
* * * DtoCreateNestedContext for object.TypeInfo_AssociativeArray.opEquals | |
* * * * DtoCreateNestedContextType for object.TypeInfo_AssociativeArray.opEquals | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(480) | |
* * * * * IfStatement::toIR(): object.d(481) | |
* * * * * * IdentityExp::toElem: this is o @ bool | |
* * * * * * * ThisExp::toElem: this @ object.Object | |
* * * * * * * * normal this exp | |
* * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * function param | |
* * * * * * * * * type: object.Object | |
* * * * * * ReturnStatement::toIR(): object.d(482) | |
* * * * * * * IntegerExp::toElem: true @ bool | |
* * * * * * * * IntegerExp::toConstElem: true @ bool | |
* * * * * * * * * value = i1 true | |
* * * * * ExpStatement::toIR(): object.d(483) | |
* * * * * * DeclarationExp::toElem: (const const(TypeInfo_AssociativeArray) c = cast(const(TypeInfo_AssociativeArray))o;) | T=void | |
* * * * * * * DtoDeclarationExp: c | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = const(TypeInfo_AssociativeArray)) | |
* * * * * * * * * llvm value for decl: %5 = alloca %object.TypeInfo_AssociativeArray*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: c = cast(const(TypeInfo_AssociativeArray))o | (const(TypeInfo_AssociativeArray))(const(TypeInfo_AssociativeArray) = const(TypeInfo_AssociativeArray)) | |
* * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_AssociativeArray) | |
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_AssociativeArray)') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CastExp::toElem: cast(const(TypeInfo_AssociativeArray))o @ const(TypeInfo_AssociativeArray) | |
* * * * * * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * type: object.Object | |
* * * * * * * * * * * Casting from 'object.Object' to 'const(TypeInfo_AssociativeArray)' | |
* * * * * * * * * * * * DtoCastClass(object.Object, const(TypeInfo_AssociativeArray)) | |
* * * * * * * * * * * * * dynamic up cast | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * l : %5 = alloca %object.TypeInfo_AssociativeArray*, align 8 | |
* * * * * * * * * * * r : %16 = bitcast i8* %15 to %object.TypeInfo_AssociativeArray* | |
* * * * * ReturnStatement::toIR(): object.d(484) | |
* * * * * * LogicalExp::toElem: c && opEquals(this.key, c.key) && opEquals(this.value, c.value) @ bool | |
* * * * * * * LogicalExp::toElem: c && opEquals(this.key, c.key) @ bool | |
* * * * * * * * VarExp::toElem: c @ const(TypeInfo_AssociativeArray) | |
* * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_AssociativeArray)') | |
* * * * * * * * * * a normal variable | |
* * * * * * * * Casting from 'const(TypeInfo_AssociativeArray)' to 'bool' | |
* * * * * * * * * DtoCastClass(const(TypeInfo_AssociativeArray), bool) | |
* * * * * * * * * * to bool | |
* * * * * * * * CallExp::toElem: opEquals(this.key, c.key) @ bool | |
* * * * * * * * * VarExp::toElem: opEquals @ @system bool(const(Object) lhs, const(Object) rhs) | |
* * * * * * * * * * DtoSymbolAddress ('opEquals' of type '@system bool(const(Object) lhs, const(Object) rhs)') | |
* * * * * * * * * * * FuncDeclaration | |
* * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * DotVarExp::toElem: this.key @ const(Object) | |
* * * * * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_AssociativeArray | |
* * * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_AssociativeArray.key: | |
* * * * * * * * * * * * * * Value: %21 = getelementptr inbounds %object.TypeInfo_AssociativeArray, %object.TypeInfo_AssociativeArray* %20, i32 0, i32 3 | |
* * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * DotVarExp::toElem: c.key @ const(Object) | |
* * * * * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_AssociativeArray) | |
* * * * * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_AssociativeArray)') | |
* * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_AssociativeArray.key: | |
* * * * * * * * * * * * * * Value: %24 = getelementptr inbounds %object.TypeInfo_AssociativeArray, %object.TypeInfo_AssociativeArray* %23, i32 0, i32 3 | |
* * * * * * * * * * doing normal arguments | |
* * * * * * * * * * Arguments so far: (0) | |
* * * * * * * * * * Function type: @system bool(const(Object) lhs, const(Object) rhs) | |
* * * * * * * CallExp::toElem: opEquals(this.value, c.value) @ bool | |
* * * * * * * * VarExp::toElem: opEquals @ @system bool(const(Object) lhs, const(Object) rhs) | |
* * * * * * * * * DtoSymbolAddress ('opEquals' of type '@system bool(const(Object) lhs, const(Object) rhs)') | |
* * * * * * * * * * FuncDeclaration | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * DtoArgument | |
* * * * * * * * * * * DotVarExp::toElem: this.value @ const(Object) | |
* * * * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_AssociativeArray | |
* * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * Indexing aggregate field object.TypeInfo_AssociativeArray.value: | |
* * * * * * * * * * * * * Value: %33 = getelementptr inbounds %object.TypeInfo_AssociativeArray, %object.TypeInfo_AssociativeArray* %32, i32 0, i32 2 | |
* * * * * * * * * * DtoArgument | |
* * * * * * * * * * * DotVarExp::toElem: c.value @ const(Object) | |
* * * * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_AssociativeArray) | |
* * * * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_AssociativeArray)') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * Indexing aggregate field object.TypeInfo_AssociativeArray.value: | |
* * * * * * * * * * * * * Value: %36 = getelementptr inbounds %object.TypeInfo_AssociativeArray, %object.TypeInfo_AssociativeArray* %35, i32 0, i32 2 | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (0) | |
* * * * * * * * * Function type: @system bool(const(Object) lhs, const(Object) rhs) | |
* * DtoDefineFunction(object.TypeInfo_AssociativeArray.equals): object.d(487) | |
* * * isMember = this is: object.TypeInfo_AssociativeArray | |
* * * DtoFunctionType(const @trusted bool(const(void*) p1, const(void*) p2)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i1 (%object.TypeInfo_AssociativeArray*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_AssociativeArray.equals): object.d(487) | |
* * * * DtoDeclareFunction(object.TypeInfo_AssociativeArray.equals): object.d(487) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_AssociativeArray | |
* * * * * DtoFunctionType(const @trusted bool(const(void*) p1, const(void*) p2)) | |
* * * * * func = | |
declare i1 @_D6object25TypeInfo_AssociativeArray6equalsMxFNexPvxQdZb(%object.TypeInfo_AssociativeArray*, i8*, i8*) | |
* * * Doing function body for: equals | |
* * * DtoCreateNestedContext for object.TypeInfo_AssociativeArray.equals | |
* * * * DtoCreateNestedContextType for object.TypeInfo_AssociativeArray.equals | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(488) | |
* * * * * IntegerExp::toElem: false @ bool | |
* * * * * * IntegerExp::toConstElem: false @ bool | |
* * * * * * * value = i1 false | |
* * DtoDefineFunction(object.TypeInfo_AssociativeArray.getHash): object.d(491) | |
* * * isMember = this is: object.TypeInfo_AssociativeArray | |
* * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_AssociativeArray*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_AssociativeArray.getHash): object.d(491) | |
* * * * DtoDeclareFunction(object.TypeInfo_AssociativeArray.getHash): object.d(491) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_AssociativeArray | |
* * * * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p)) | |
* * * * * func = | |
declare i64 @_D6object25TypeInfo_AssociativeArray7getHashMxFNbNexPvZm(%object.TypeInfo_AssociativeArray*, i8*) | |
* * * Doing function body for: getHash | |
* * * DtoCreateNestedContext for object.TypeInfo_AssociativeArray.getHash | |
* * * * DtoCreateNestedContextType for object.TypeInfo_AssociativeArray.getHash | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(492) | |
* * * * * CastExp::toElem: cast(ulong)p @ ulong | |
* * * * * * VarExp::toElem: p @ const(void*) | |
* * * * * * * DtoSymbolAddress ('p' of type 'const(void*)') | |
* * * * * * * * function param | |
* * * * * * * * type: const(void*) | |
* * * * * * Casting from 'const(void*)' to 'ulong' | |
* * DtoDefineFunction(object.TypeInfo_AssociativeArray.tsize): object.d(497) | |
* * * isMember = this is: object.TypeInfo_AssociativeArray | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_AssociativeArray*) | |
* * * DtoResolveFunction(object.TypeInfo_AssociativeArray.tsize): object.d(497) | |
* * * * DtoDeclareFunction(object.TypeInfo_AssociativeArray.tsize): object.d(497) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_AssociativeArray | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object25TypeInfo_AssociativeArray5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_AssociativeArray*) | |
* * * Doing function body for: tsize | |
* * * DtoCreateNestedContext for object.TypeInfo_AssociativeArray.tsize | |
* * * * DtoCreateNestedContextType for object.TypeInfo_AssociativeArray.tsize | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(498) | |
* * * * * IntegerExp::toElem: 8LU @ ulong | |
* * * * * * IntegerExp::toConstElem: 8LU @ ulong | |
* * * * * * * value = i64 8 | |
* * DtoDefineFunction(object.TypeInfo_AssociativeArray.initializer): object.d(501) | |
* * * isMember = this is: object.TypeInfo_AssociativeArray | |
* * * DtoFunctionType(const pure nothrow @nogc @trusted const(void)[]()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_AssociativeArray*) | |
* * * DtoResolveFunction(object.TypeInfo_AssociativeArray.initializer): object.d(501) | |
* * * * DtoDeclareFunction(object.TypeInfo_AssociativeArray.initializer): object.d(501) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_AssociativeArray | |
* * * * * DtoFunctionType(const pure nothrow @nogc @trusted const(void)[]()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object25TypeInfo_AssociativeArray11initializerMxFNaNbNiNeZAxv(%object.TypeInfo_AssociativeArray*) | |
* * * Doing function body for: initializer | |
* * * DtoCreateNestedContext for object.TypeInfo_AssociativeArray.initializer | |
* * * * DtoCreateNestedContextType for object.TypeInfo_AssociativeArray.initializer | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(502) | |
* * * * * SliceExp::toElem: null[0..8] @ const(void)[] | |
* * * * * * NullExp::toElem(type=void*): null | |
* * * * * * * NullExp::toConstElem(type=void*): null | |
* * * * * * IntegerExp::toElem: 0LU @ ulong | |
* * * * * * * IntegerExp::toConstElem: 0LU @ ulong | |
* * * * * * * * value = i64 0 | |
* * * * * * IntegerExp::toElem: 8LU @ ulong | |
* * * * * * * IntegerExp::toConstElem: 8LU @ ulong | |
* * * * * * * * value = i64 8 | |
* * DtoDefineFunction(object.TypeInfo_AssociativeArray.next): object.d(505) | |
* * * isMember = this is: object.TypeInfo_AssociativeArray | |
* * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: %object.TypeInfo* (%object.TypeInfo_AssociativeArray*) | |
* * * DtoResolveFunction(object.TypeInfo_AssociativeArray.next): object.d(505) | |
* * * * DtoDeclareFunction(object.TypeInfo_AssociativeArray.next): object.d(505) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_AssociativeArray | |
* * * * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)()) | |
* * * * * func = | |
declare %object.TypeInfo* @_D6object25TypeInfo_AssociativeArray4nextMNgFNaNbNdNiZNgC8TypeInfo(%object.TypeInfo_AssociativeArray*) | |
* * * Doing function body for: next | |
* * * DtoCreateNestedContext for object.TypeInfo_AssociativeArray.next | |
* * * * DtoCreateNestedContextType for object.TypeInfo_AssociativeArray.next | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(506) | |
* * * * * DotVarExp::toElem: this.value @ inout(TypeInfo) | |
* * * * * * ThisExp::toElem: this @ inout(TypeInfo_AssociativeArray) | |
* * * * * * * normal this exp | |
* * * * * * Indexing aggregate field object.TypeInfo_AssociativeArray.value: | |
* * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_AssociativeArray, %object.TypeInfo_AssociativeArray* %4, i32 0, i32 2 | |
* * DtoDefineFunction(object.TypeInfo_AssociativeArray.flags): object.d(509) | |
* * * isMember = this is: object.TypeInfo_AssociativeArray | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe uint()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo_AssociativeArray*) | |
* * * DtoResolveFunction(object.TypeInfo_AssociativeArray.flags): object.d(509) | |
* * * * DtoDeclareFunction(object.TypeInfo_AssociativeArray.flags): object.d(509) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_AssociativeArray | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint()) | |
* * * * * func = | |
declare i32 @_D6object25TypeInfo_AssociativeArray5flagsMxFNaNbNdNiNfZk(%object.TypeInfo_AssociativeArray*) | |
* * * Doing function body for: flags | |
* * * DtoCreateNestedContext for object.TypeInfo_AssociativeArray.flags | |
* * * * DtoCreateNestedContextType for object.TypeInfo_AssociativeArray.flags | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(510) | |
* * * * * IntegerExp::toElem: 1u @ uint | |
* * * * * * IntegerExp::toConstElem: 1u @ uint | |
* * * * * * * value = i32 1 | |
* * VarDeclaration::codegen(): 'object.TypeInfo_AssociativeArray.value' | |
* * * DtoResolveVariable(object.TypeInfo_AssociativeArray.value) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_AssociativeArray.key' | |
* * * DtoResolveVariable(object.TypeInfo_AssociativeArray.key) | |
* * DtoDefineFunction(object.TypeInfo_AssociativeArray.talign): object.d(516) | |
* * * isMember = this is: object.TypeInfo_AssociativeArray | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_AssociativeArray*) | |
* * * DtoResolveFunction(object.TypeInfo_AssociativeArray.talign): object.d(516) | |
* * * * DtoDeclareFunction(object.TypeInfo_AssociativeArray.talign): object.d(516) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_AssociativeArray | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object25TypeInfo_AssociativeArray6talignMxFNaNbNdNiNfZm(%object.TypeInfo_AssociativeArray*) | |
* * * Doing function body for: talign | |
* * * DtoCreateNestedContext for object.TypeInfo_AssociativeArray.talign | |
* * * * DtoCreateNestedContextType for object.TypeInfo_AssociativeArray.talign | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(517) | |
* * * * * IntegerExp::toElem: 8LU @ ulong | |
* * * * * * IntegerExp::toConstElem: 8LU @ ulong | |
* * * * * * * value = i64 8 | |
* * Building default initializer for object.TypeInfo_AssociativeArray | |
* * * Creating initializer constant for TypeInfo_AssociativeArray | |
* * * * Field priority for value: 1 | |
* * * * Field priority for key: 1 | |
* * * * DtoConstExpInit(targetType = object.TypeInfo, exp = null) | |
* * * * * NullExp::toConstElem(type=object.TypeInfo): null | |
* * * * DtoConstExpInit(targetType = object.TypeInfo, exp = null) | |
* * * * * NullExp::toConstElem(type=object.TypeInfo): null | |
* * * * final initializer: %object.TypeInfo_AssociativeArray { [19 x i8*]* @_D25TypeInfo_AssociativeArray6__vtblZ, i8* null, %object.TypeInfo* null, %object.TypeInfo* null } | |
* * Building vtbl initializer | |
* * DtoDefineClassInfo(TypeInfo_AssociativeArray) | |
* * * Building ClassInfo.interfaces | |
* ClassDeclaration::codegen: 'object.TypeInfo_Function' | |
* * DtoResolveClass(object.TypeInfo_Function): object.d(521) | |
* * * Building type: object.TypeInfo_Function | |
* * * * Building class type object.TypeInfo_Function @ object.d(521) | |
* * * * * Instance size: 40 | |
* * * * * Field priority for next: 1 | |
* * * * * Field priority for deco: 1 | |
* * * * * class type: %object.TypeInfo_Function = type { [19 x i8*]*, i8*, %object.TypeInfo*, { i64, i8* } } | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Function.next' | |
* * * DtoResolveVariable(object.TypeInfo_Function.next) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Function.deco' | |
* * * DtoResolveVariable(object.TypeInfo_Function.deco) | |
* * Building default initializer for object.TypeInfo_Function | |
* * * Creating initializer constant for TypeInfo_Function | |
* * * * Field priority for next: 1 | |
* * * * Field priority for deco: 1 | |
* * * * DtoConstExpInit(targetType = object.TypeInfo, exp = null) | |
* * * * * NullExp::toConstElem(type=object.TypeInfo): null | |
* * * * DtoConstExpInit(targetType = string, exp = null) | |
* * * * * NullExp::toConstElem(type=string): null | |
* * * * final initializer: %object.TypeInfo_Function { [19 x i8*]* @_D17TypeInfo_Function6__vtblZ, i8* null, %object.TypeInfo* null, { i64, i8* } zeroinitializer } | |
* * Building vtbl initializer | |
* * DtoDefineClassInfo(TypeInfo_Function) | |
* * * Building ClassInfo.interfaces | |
* ClassDeclaration::codegen: 'object.TypeInfo_Interface' | |
* * DtoDefineFunction(object.TypeInfo_Interface.toString): object.d(527) | |
* * * isMember = this is: object.TypeInfo_Interface | |
* * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Interface*) | |
* * * DtoResolveFunction(object.TypeInfo_Interface.toString): object.d(527) | |
* * * * DtoDeclareFunction(object.TypeInfo_Interface.toString): object.d(527) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Interface | |
* * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object18TypeInfo_Interface8toStringMxFNaNbNfZAya(%object.TypeInfo_Interface*) | |
* * * Doing function body for: toString | |
* * * DtoCreateNestedContext for object.TypeInfo_Interface.toString | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Interface.toString | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(528) | |
* * * * * DotVarExp::toElem: this.info.name @ string | |
* * * * * * DotVarExp::toElem: this.info @ const(TypeInfo_Class) | |
* * * * * * * ThisExp::toElem: this @ const(TypeInfo_Interface) | |
* * * * * * * * normal this exp | |
* * * * * * * Indexing aggregate field object.TypeInfo_Interface.info: | |
* * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Interface, %object.TypeInfo_Interface* %4, i32 0, i32 2 | |
* * * * * * Indexing aggregate field object.TypeInfo_Class.name: | |
* * * * * * * Value: %7 = getelementptr inbounds %object.TypeInfo_Class, %object.TypeInfo_Class* %6, i32 0, i32 3 | |
* * DtoDefineFunction(object.TypeInfo_Interface.opEquals): object.d(531) | |
* * * isMember = this is: object.TypeInfo_Interface | |
* * * DtoFunctionType(bool(Object o)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i1 (%object.TypeInfo_Interface*, %object.Object*) | |
* * * DtoResolveFunction(object.TypeInfo_Interface.opEquals): object.d(531) | |
* * * * DtoDeclareFunction(object.TypeInfo_Interface.opEquals): object.d(531) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Interface | |
* * * * * DtoFunctionType(bool(Object o)) | |
* * * * * func = | |
declare i1 @_D6object18TypeInfo_Interface8opEqualsMFC6ObjectZb(%object.TypeInfo_Interface*, %object.Object*) | |
* * * Doing function body for: opEquals | |
* * * DtoCreateNestedContext for object.TypeInfo_Interface.opEquals | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Interface.opEquals | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(531) | |
* * * * * IfStatement::toIR(): object.d(532) | |
* * * * * * IdentityExp::toElem: this is o @ bool | |
* * * * * * * ThisExp::toElem: this @ object.Object | |
* * * * * * * * normal this exp | |
* * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * function param | |
* * * * * * * * * type: object.Object | |
* * * * * * ReturnStatement::toIR(): object.d(533) | |
* * * * * * * IntegerExp::toElem: true @ bool | |
* * * * * * * * IntegerExp::toConstElem: true @ bool | |
* * * * * * * * * value = i1 true | |
* * * * * ExpStatement::toIR(): object.d(534) | |
* * * * * * DeclarationExp::toElem: (const const(TypeInfo_Interface) c = cast(const(TypeInfo_Interface))o;) | T=void | |
* * * * * * * DtoDeclarationExp: c | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = const(TypeInfo_Interface)) | |
* * * * * * * * * llvm value for decl: %5 = alloca %object.TypeInfo_Interface*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: c = cast(const(TypeInfo_Interface))o | (const(TypeInfo_Interface))(const(TypeInfo_Interface) = const(TypeInfo_Interface)) | |
* * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_Interface) | |
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Interface)') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CastExp::toElem: cast(const(TypeInfo_Interface))o @ const(TypeInfo_Interface) | |
* * * * * * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * type: object.Object | |
* * * * * * * * * * * Casting from 'object.Object' to 'const(TypeInfo_Interface)' | |
* * * * * * * * * * * * DtoCastClass(object.Object, const(TypeInfo_Interface)) | |
* * * * * * * * * * * * * dynamic up cast | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * l : %5 = alloca %object.TypeInfo_Interface*, align 8 | |
* * * * * * * * * * * r : %16 = bitcast i8* %15 to %object.TypeInfo_Interface* | |
* * * * * ReturnStatement::toIR(): object.d(535) | |
* * * * * * LogicalExp::toElem: c && this.info.name == typeid(c).name @ bool | |
* * * * * * * VarExp::toElem: c @ const(TypeInfo_Interface) | |
* * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Interface)') | |
* * * * * * * * * a normal variable | |
* * * * * * * Casting from 'const(TypeInfo_Interface)' to 'bool' | |
* * * * * * * * DtoCastClass(const(TypeInfo_Interface), bool) | |
* * * * * * * * * to bool | |
* * * * * * * EqualExp::toElem: this.info.name == typeid(c).name @ bool | |
* * * * * * * * DotVarExp::toElem: this.info.name @ string | |
* * * * * * * * * DotVarExp::toElem: this.info @ object.TypeInfo_Class | |
* * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Interface | |
* * * * * * * * * * * normal this exp | |
* * * * * * * * * * Indexing aggregate field object.TypeInfo_Interface.info: | |
* * * * * * * * * * * Value: %21 = getelementptr inbounds %object.TypeInfo_Interface, %object.TypeInfo_Interface* %20, i32 0, i32 2 | |
* * * * * * * * * Indexing aggregate field object.TypeInfo_Class.name: | |
* * * * * * * * * * Value: %23 = getelementptr inbounds %object.TypeInfo_Class, %object.TypeInfo_Class* %22, i32 0, i32 3 | |
* * * * * * * * DotVarExp::toElem: typeid(c).name @ string | |
* * * * * * * * * VarExp::toElem: c @ const(TypeInfo_Interface) | |
* * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Interface)') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * Indexing aggregate field object.TypeInfo_Class.name: | |
* * * * * * * * * * Value: %30 = getelementptr inbounds %object.TypeInfo_Class, %object.TypeInfo_Class* %29, i32 0, i32 3 | |
* * * * * * * * static or dynamic array | |
* * * * * * * * Comparing arrays using memcmp | |
* * * * * * * * DtoArrayPtr | |
* * * * * * * * DtoArrayPtr | |
* * * * * * * * DtoArrayLen | |
* * * * * * * * DtoArrayLen | |
* * DtoDefineFunction(object.TypeInfo_Interface.getHash): object.d(538) | |
* * * isMember = this is: object.TypeInfo_Interface | |
* * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_Interface*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Interface.getHash): object.d(538) | |
* * * * DtoDeclareFunction(object.TypeInfo_Interface.getHash): object.d(538) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Interface | |
* * * * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p)) | |
* * * * * func = | |
declare i64 @_D6object18TypeInfo_Interface7getHashMxFNbNexPvZm(%object.TypeInfo_Interface*, i8*) | |
* * * Doing function body for: getHash | |
* * * DtoCreateNestedContext for object.TypeInfo_Interface.getHash | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Interface.getHash | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(538) | |
* * * * * ExpStatement::toIR(): object.d(539) | |
* * * * * * DeclarationExp::toElem: (Interface* pi = **cast(Interface***)*cast(void**)p;) | T=void | |
* * * * * * * DtoDeclarationExp: pi | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = Interface*) | |
* * * * * * * * * Building type: Interface* | |
* * * * * * * * * llvm value for decl: %5 = alloca %object.Interface*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: pi = **cast(Interface***)*cast(void**)p | (Interface*)(Interface* = Interface*) | |
* * * * * * * * * * VarExp::toElem: pi @ Interface* | |
* * * * * * * * * * * DtoSymbolAddress ('pi' of type 'Interface*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * PtrExp::toElem: **cast(Interface***)*cast(void**)p @ Interface* | |
* * * * * * * * * * * PtrExp::toElem: *cast(Interface***)*cast(void**)p @ Interface** | |
* * * * * * * * * * * * CastExp::toElem: cast(Interface***)*cast(void**)p @ Interface*** | |
* * * * * * * * * * * * * PtrExp::toElem: *cast(void**)p @ void* | |
* * * * * * * * * * * * * * CastExp::toElem: cast(void**)p @ void** | |
* * * * * * * * * * * * * * * VarExp::toElem: p @ const(void*) | |
* * * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'const(void*)') | |
* * * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * * * * Casting from 'const(void*)' to 'void**' | |
* * * * * * * * * * * * * * * * src: %7 = load i8*, i8** %4 | |
* * * * * * * * * * * * * * * * to type: i8** | |
* * * * * * * * * * * * * Casting from 'void*' to 'Interface***' | |
* * * * * * * * * * * * * * Building type: Interface*** | |
* * * * * * * * * * * * * * * Building type: Interface** | |
* * * * * * * * * * * * * * src: %9 = load i8*, i8** %8 | |
* * * * * * * * * * * * * * to type: %object.Interface*** | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %5 = alloca %object.Interface*, align 8 | |
* * * * * * * * * * * rhs: %12 = load %object.Interface*, %object.Interface** %11 | |
* * * * * ExpStatement::toIR(): object.d(540) | |
* * * * * * DeclarationExp::toElem: (Object o = cast(Object)(*cast(void**)p - cast(long)(*pi).offset * 1L);) | T=void | |
* * * * * * * DtoDeclarationExp: o | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = object.Object) | |
* * * * * * * * * llvm value for decl: %6 = alloca %object.Object*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: o = cast(Object)(*cast(void**)p - cast(long)(*pi).offset * 1L) | (object.Object)(object.Object = object.Object) | |
* * * * * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CastExp::toElem: cast(Object)(*cast(void**)p - cast(long)(*pi).offset * 1L) @ object.Object | |
* * * * * * * * * * * MinExp::toElem: *cast(void**)p - cast(long)(*pi).offset * 1L @ void* | |
* * * * * * * * * * * * PtrExp::toElem: *cast(void**)p @ void* | |
* * * * * * * * * * * * * CastExp::toElem: cast(void**)p @ void** | |
* * * * * * * * * * * * * * VarExp::toElem: p @ const(void*) | |
* * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'const(void*)') | |
* * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * * * Casting from 'const(void*)' to 'void**' | |
* * * * * * * * * * * * * * * src: %14 = load i8*, i8** %4 | |
* * * * * * * * * * * * * * * to type: i8** | |
* * * * * * * * * * * * Subtracting integer from pointer | |
* * * * * * * * * * * * CastExp::toElem: cast(long)(*pi).offset @ long | |
* * * * * * * * * * * * * DotVarExp::toElem: (*pi).offset @ ulong | |
* * * * * * * * * * * * * * PtrExp::toElem: *pi @ Interface | |
* * * * * * * * * * * * * * * VarExp::toElem: pi @ Interface* | |
* * * * * * * * * * * * * * * * DtoSymbolAddress ('pi' of type 'Interface*') | |
* * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * Indexing aggregate field object.Interface.offset: | |
* * * * * * * * * * * * * * * Value: %18 = getelementptr inbounds %object.Interface, %object.Interface* %17, i32 0, i32 2 | |
* * * * * * * * * * * * * Casting from 'ulong' to 'long' | |
* * * * * * * * * * * Casting from 'void*' to 'object.Object' | |
* * * * * * * * * * * * src: %21 = getelementptr i8, i8* %16, i64 %20 | |
* * * * * * * * * * * * to type: %object.Object* | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * l : %6 = alloca %object.Object*, align 8 | |
* * * * * * * * * * * r : %22 = bitcast i8* %21 to %object.Object* | |
* * * * * ExpStatement::toIR(): object.d(541) | |
* * * * * * AssertExp::toElem: assert(o) | |
* * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * a normal variable | |
* * * * * * * Casting from 'object.Object' to 'bool' | |
* * * * * * * * DtoCastClass(object.Object, bool) | |
* * * * * * * * * to bool | |
* * * * * * * calling class invariant | |
* * * * * ReturnStatement::toIR(): object.d(542) | |
* * * * * * CallExp::toElem: o.toHash() @ ulong | |
* * * * * * * DotVarExp::toElem: o.toHash @ nothrow @trusted ulong() | |
* * * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * * a normal variable | |
* * * * * * * * vthis: %27 = load %object.Object*, %object.Object** %6 | |
* * * * * * * * funcval: %31 = load i8*, i8** %30, align 8 | |
* * * * * * * * isMember = this is: object.Object | |
* * * * * * * * DtoFunctionType(nothrow @trusted ulong()) | |
* * * * * * * * funcval casted: %32 = bitcast i8* %31 to i64 (%object.Object*)* | |
* * * * * * * DtoCallFunction() | |
* * * * * * * * Evaluating argument expressions | |
* * * * * * * * doing normal arguments | |
* * * * * * * * Arguments so far: (1) | |
* * * * * * * * * %33 = load %object.Object*, %object.Object** %6 | |
* * * * * * * * Function type: nothrow @trusted ulong() | |
* * DtoDefineFunction(object.TypeInfo_Interface.equals): object.d(545) | |
* * * isMember = this is: object.TypeInfo_Interface | |
* * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i1 (%object.TypeInfo_Interface*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Interface.equals): object.d(545) | |
* * * * DtoDeclareFunction(object.TypeInfo_Interface.equals): object.d(545) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Interface | |
* * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2)) | |
* * * * * func = | |
declare i1 @_D6object18TypeInfo_Interface6equalsMxFxPvxQdZb(%object.TypeInfo_Interface*, i8*, i8*) | |
* * * Doing function body for: equals | |
* * * DtoCreateNestedContext for object.TypeInfo_Interface.equals | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Interface.equals | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(545) | |
* * * * * ExpStatement::toIR(): object.d(546) | |
* * * * * * DeclarationExp::toElem: (Interface* pi = **cast(Interface***)*cast(void**)p1;) | T=void | |
* * * * * * * DtoDeclarationExp: pi | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = Interface*) | |
* * * * * * * * * llvm value for decl: %7 = alloca %object.Interface*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: pi = **cast(Interface***)*cast(void**)p1 | (Interface*)(Interface* = Interface*) | |
* * * * * * * * * * VarExp::toElem: pi @ Interface* | |
* * * * * * * * * * * DtoSymbolAddress ('pi' of type 'Interface*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * PtrExp::toElem: **cast(Interface***)*cast(void**)p1 @ Interface* | |
* * * * * * * * * * * PtrExp::toElem: *cast(Interface***)*cast(void**)p1 @ Interface** | |
* * * * * * * * * * * * CastExp::toElem: cast(Interface***)*cast(void**)p1 @ Interface*** | |
* * * * * * * * * * * * * PtrExp::toElem: *cast(void**)p1 @ void* | |
* * * * * * * * * * * * * * CastExp::toElem: cast(void**)p1 @ void** | |
* * * * * * * * * * * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * * * * Casting from 'const(void*)' to 'void**' | |
* * * * * * * * * * * * * * * * src: %9 = load i8*, i8** %5 | |
* * * * * * * * * * * * * * * * to type: i8** | |
* * * * * * * * * * * * * Casting from 'void*' to 'Interface***' | |
* * * * * * * * * * * * * * src: %11 = load i8*, i8** %10 | |
* * * * * * * * * * * * * * to type: %object.Interface*** | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %7 = alloca %object.Interface*, align 8 | |
* * * * * * * * * * * rhs: %14 = load %object.Interface*, %object.Interface** %13 | |
* * * * * ExpStatement::toIR(): object.d(547) | |
* * * * * * DeclarationExp::toElem: (Object o1 = cast(Object)(*cast(void**)p1 - cast(long)(*pi).offset * 1L);) | T=void | |
* * * * * * * DtoDeclarationExp: o1 | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = object.Object) | |
* * * * * * * * * llvm value for decl: %8 = alloca %object.Object*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: o1 = cast(Object)(*cast(void**)p1 - cast(long)(*pi).offset * 1L) | (object.Object)(object.Object = object.Object) | |
* * * * * * * * * * VarExp::toElem: o1 @ object.Object | |
* * * * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CastExp::toElem: cast(Object)(*cast(void**)p1 - cast(long)(*pi).offset * 1L) @ object.Object | |
* * * * * * * * * * * MinExp::toElem: *cast(void**)p1 - cast(long)(*pi).offset * 1L @ void* | |
* * * * * * * * * * * * PtrExp::toElem: *cast(void**)p1 @ void* | |
* * * * * * * * * * * * * CastExp::toElem: cast(void**)p1 @ void** | |
* * * * * * * * * * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * * * Casting from 'const(void*)' to 'void**' | |
* * * * * * * * * * * * * * * src: %16 = load i8*, i8** %5 | |
* * * * * * * * * * * * * * * to type: i8** | |
* * * * * * * * * * * * Subtracting integer from pointer | |
* * * * * * * * * * * * CastExp::toElem: cast(long)(*pi).offset @ long | |
* * * * * * * * * * * * * DotVarExp::toElem: (*pi).offset @ ulong | |
* * * * * * * * * * * * * * PtrExp::toElem: *pi @ Interface | |
* * * * * * * * * * * * * * * VarExp::toElem: pi @ Interface* | |
* * * * * * * * * * * * * * * * DtoSymbolAddress ('pi' of type 'Interface*') | |
* * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * Indexing aggregate field object.Interface.offset: | |
* * * * * * * * * * * * * * * Value: %20 = getelementptr inbounds %object.Interface, %object.Interface* %19, i32 0, i32 2 | |
* * * * * * * * * * * * * Casting from 'ulong' to 'long' | |
* * * * * * * * * * * Casting from 'void*' to 'object.Object' | |
* * * * * * * * * * * * src: %23 = getelementptr i8, i8* %18, i64 %22 | |
* * * * * * * * * * * * to type: %object.Object* | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * l : %8 = alloca %object.Object*, align 8 | |
* * * * * * * * * * * r : %24 = bitcast i8* %23 to %object.Object* | |
* * * * * ExpStatement::toIR(): object.d(548) | |
* * * * * * AssignExp::toElem: pi = **cast(Interface***)*cast(void**)p2 | (Interface*)(Interface* = Interface*) | |
* * * * * * * VarExp::toElem: pi @ Interface* | |
* * * * * * * * DtoSymbolAddress ('pi' of type 'Interface*') | |
* * * * * * * * * a normal variable | |
* * * * * * * PtrExp::toElem: **cast(Interface***)*cast(void**)p2 @ Interface* | |
* * * * * * * * PtrExp::toElem: *cast(Interface***)*cast(void**)p2 @ Interface** | |
* * * * * * * * * CastExp::toElem: cast(Interface***)*cast(void**)p2 @ Interface*** | |
* * * * * * * * * * PtrExp::toElem: *cast(void**)p2 @ void* | |
* * * * * * * * * * * CastExp::toElem: cast(void**)p2 @ void** | |
* * * * * * * * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * Casting from 'const(void*)' to 'void**' | |
* * * * * * * * * * * * * src: %25 = load i8*, i8** %6 | |
* * * * * * * * * * * * * to type: i8** | |
* * * * * * * * * * Casting from 'void*' to 'Interface***' | |
* * * * * * * * * * * src: %27 = load i8*, i8** %26 | |
* * * * * * * * * * * to type: %object.Interface*** | |
* * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * DtoAssign() | |
* * * * * * * * lhs: %7 = alloca %object.Interface*, align 8 | |
* * * * * * * * rhs: %30 = load %object.Interface*, %object.Interface** %29 | |
* * * * * ExpStatement::toIR(): object.d(549) | |
* * * * * * DeclarationExp::toElem: (Object o2 = cast(Object)(*cast(void**)p2 - cast(long)(*pi).offset * 1L);) | T=void | |
* * * * * * * DtoDeclarationExp: o2 | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = object.Object) | |
* * * * * * * * * llvm value for decl: %9 = alloca %object.Object*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: o2 = cast(Object)(*cast(void**)p2 - cast(long)(*pi).offset * 1L) | (object.Object)(object.Object = object.Object) | |
* * * * * * * * * * VarExp::toElem: o2 @ object.Object | |
* * * * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CastExp::toElem: cast(Object)(*cast(void**)p2 - cast(long)(*pi).offset * 1L) @ object.Object | |
* * * * * * * * * * * MinExp::toElem: *cast(void**)p2 - cast(long)(*pi).offset * 1L @ void* | |
* * * * * * * * * * * * PtrExp::toElem: *cast(void**)p2 @ void* | |
* * * * * * * * * * * * * CastExp::toElem: cast(void**)p2 @ void** | |
* * * * * * * * * * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * * * Casting from 'const(void*)' to 'void**' | |
* * * * * * * * * * * * * * * src: %32 = load i8*, i8** %6 | |
* * * * * * * * * * * * * * * to type: i8** | |
* * * * * * * * * * * * Subtracting integer from pointer | |
* * * * * * * * * * * * CastExp::toElem: cast(long)(*pi).offset @ long | |
* * * * * * * * * * * * * DotVarExp::toElem: (*pi).offset @ ulong | |
* * * * * * * * * * * * * * PtrExp::toElem: *pi @ Interface | |
* * * * * * * * * * * * * * * VarExp::toElem: pi @ Interface* | |
* * * * * * * * * * * * * * * * DtoSymbolAddress ('pi' of type 'Interface*') | |
* * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * Indexing aggregate field object.Interface.offset: | |
* * * * * * * * * * * * * * * Value: %36 = getelementptr inbounds %object.Interface, %object.Interface* %35, i32 0, i32 2 | |
* * * * * * * * * * * * * Casting from 'ulong' to 'long' | |
* * * * * * * * * * * Casting from 'void*' to 'object.Object' | |
* * * * * * * * * * * * src: %39 = getelementptr i8, i8* %34, i64 %38 | |
* * * * * * * * * * * * to type: %object.Object* | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * l : %9 = alloca %object.Object*, align 8 | |
* * * * * * * * * * * r : %40 = bitcast i8* %39 to %object.Object* | |
* * * * * ReturnStatement::toIR(): object.d(551) | |
* * * * * * LogicalExp::toElem: opEquals(o1, o2) || o1 && o1.opCmp(o2) == 0 @ bool | |
* * * * * * * CallExp::toElem: opEquals(o1, o2) @ bool | |
* * * * * * * * VarExp::toElem: opEquals @ @system bool(Object lhs, Object rhs) | |
* * * * * * * * * DtoSymbolAddress ('opEquals' of type '@system bool(Object lhs, Object rhs)') | |
* * * * * * * * * * FuncDeclaration | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * DtoArgument | |
* * * * * * * * * * * VarExp::toElem: o1 @ object.Object | |
* * * * * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object') | |
* * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * DtoArgument | |
* * * * * * * * * * * VarExp::toElem: o2 @ object.Object | |
* * * * * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object') | |
* * * * * * * * * * * * * a normal variable | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (0) | |
* * * * * * * * * Function type: @system bool(Object lhs, Object rhs) | |
* * * * * * * LogicalExp::toElem: o1 && o1.opCmp(o2) == 0 @ bool | |
* * * * * * * * VarExp::toElem: o1 @ object.Object | |
* * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object') | |
* * * * * * * * * * a normal variable | |
* * * * * * * * Casting from 'object.Object' to 'bool' | |
* * * * * * * * * DtoCastClass(object.Object, bool) | |
* * * * * * * * * * to bool | |
* * * * * * * * EqualExp::toElem: o1.opCmp(o2) == 0 @ bool | |
* * * * * * * * * CallExp::toElem: o1.opCmp(o2) @ int | |
* * * * * * * * * * DotVarExp::toElem: o1.opCmp @ int(Object o) | |
* * * * * * * * * * * VarExp::toElem: o1 @ object.Object | |
* * * * * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object') | |
* * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * vthis: %48 = load %object.Object*, %object.Object** %8 | |
* * * * * * * * * * * funcval: %52 = load i8*, i8** %51, align 8 | |
* * * * * * * * * * * isMember = this is: object.Object | |
* * * * * * * * * * * DtoFunctionType(int(Object o)) | |
* * * * * * * * * * * funcval casted: %53 = bitcast i8* %52 to i32 (%object.Object*, %object.Object*)* | |
* * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * VarExp::toElem: o2 @ object.Object | |
* * * * * * * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object') | |
* * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * %54 = load %object.Object*, %object.Object** %8 | |
* * * * * * * * * * * Function type: int(Object o) | |
* * * * * * * * * IntegerExp::toElem: 0 @ int | |
* * * * * * * * * * IntegerExp::toConstElem: 0 @ int | |
* * * * * * * * * * * value = i32 0 | |
* * * * * * * * * integral or pointer or interface | |
* * * * * * * * * lv: %56 = call i32 %53(%object.Object* nonnull %54, %object.Object* %55) | |
* * * * * * * * * rv: i32 0 | |
* * DtoDefineFunction(object.TypeInfo_Interface.compare): object.d(554) | |
* * * isMember = this is: object.TypeInfo_Interface | |
* * * DtoFunctionType(const int(const(void*) p1, const(void*) p2)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo_Interface*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Interface.compare): object.d(554) | |
* * * * DtoDeclareFunction(object.TypeInfo_Interface.compare): object.d(554) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Interface | |
* * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2)) | |
* * * * * func = | |
declare i32 @_D6object18TypeInfo_Interface7compareMxFxPvxQdZi(%object.TypeInfo_Interface*, i8*, i8*) | |
* * * Doing function body for: compare | |
* * * DtoCreateNestedContext for object.TypeInfo_Interface.compare | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Interface.compare | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(554) | |
* * * * * ExpStatement::toIR(): object.d(555) | |
* * * * * * DeclarationExp::toElem: (Interface* pi = **cast(Interface***)*cast(void**)p1;) | T=void | |
* * * * * * * DtoDeclarationExp: pi | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = Interface*) | |
* * * * * * * * * llvm value for decl: %7 = alloca %object.Interface*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: pi = **cast(Interface***)*cast(void**)p1 | (Interface*)(Interface* = Interface*) | |
* * * * * * * * * * VarExp::toElem: pi @ Interface* | |
* * * * * * * * * * * DtoSymbolAddress ('pi' of type 'Interface*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * PtrExp::toElem: **cast(Interface***)*cast(void**)p1 @ Interface* | |
* * * * * * * * * * * PtrExp::toElem: *cast(Interface***)*cast(void**)p1 @ Interface** | |
* * * * * * * * * * * * CastExp::toElem: cast(Interface***)*cast(void**)p1 @ Interface*** | |
* * * * * * * * * * * * * PtrExp::toElem: *cast(void**)p1 @ void* | |
* * * * * * * * * * * * * * CastExp::toElem: cast(void**)p1 @ void** | |
* * * * * * * * * * * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * * * * Casting from 'const(void*)' to 'void**' | |
* * * * * * * * * * * * * * * * src: %9 = load i8*, i8** %5 | |
* * * * * * * * * * * * * * * * to type: i8** | |
* * * * * * * * * * * * * Casting from 'void*' to 'Interface***' | |
* * * * * * * * * * * * * * src: %11 = load i8*, i8** %10 | |
* * * * * * * * * * * * * * to type: %object.Interface*** | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %7 = alloca %object.Interface*, align 8 | |
* * * * * * * * * * * rhs: %14 = load %object.Interface*, %object.Interface** %13 | |
* * * * * ExpStatement::toIR(): object.d(556) | |
* * * * * * DeclarationExp::toElem: (Object o1 = cast(Object)(*cast(void**)p1 - cast(long)(*pi).offset * 1L);) | T=void | |
* * * * * * * DtoDeclarationExp: o1 | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = object.Object) | |
* * * * * * * * * llvm value for decl: %8 = alloca %object.Object*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: o1 = cast(Object)(*cast(void**)p1 - cast(long)(*pi).offset * 1L) | (object.Object)(object.Object = object.Object) | |
* * * * * * * * * * VarExp::toElem: o1 @ object.Object | |
* * * * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CastExp::toElem: cast(Object)(*cast(void**)p1 - cast(long)(*pi).offset * 1L) @ object.Object | |
* * * * * * * * * * * MinExp::toElem: *cast(void**)p1 - cast(long)(*pi).offset * 1L @ void* | |
* * * * * * * * * * * * PtrExp::toElem: *cast(void**)p1 @ void* | |
* * * * * * * * * * * * * CastExp::toElem: cast(void**)p1 @ void** | |
* * * * * * * * * * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * * * Casting from 'const(void*)' to 'void**' | |
* * * * * * * * * * * * * * * src: %16 = load i8*, i8** %5 | |
* * * * * * * * * * * * * * * to type: i8** | |
* * * * * * * * * * * * Subtracting integer from pointer | |
* * * * * * * * * * * * CastExp::toElem: cast(long)(*pi).offset @ long | |
* * * * * * * * * * * * * DotVarExp::toElem: (*pi).offset @ ulong | |
* * * * * * * * * * * * * * PtrExp::toElem: *pi @ Interface | |
* * * * * * * * * * * * * * * VarExp::toElem: pi @ Interface* | |
* * * * * * * * * * * * * * * * DtoSymbolAddress ('pi' of type 'Interface*') | |
* * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * Indexing aggregate field object.Interface.offset: | |
* * * * * * * * * * * * * * * Value: %20 = getelementptr inbounds %object.Interface, %object.Interface* %19, i32 0, i32 2 | |
* * * * * * * * * * * * * Casting from 'ulong' to 'long' | |
* * * * * * * * * * * Casting from 'void*' to 'object.Object' | |
* * * * * * * * * * * * src: %23 = getelementptr i8, i8* %18, i64 %22 | |
* * * * * * * * * * * * to type: %object.Object* | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * l : %8 = alloca %object.Object*, align 8 | |
* * * * * * * * * * * r : %24 = bitcast i8* %23 to %object.Object* | |
* * * * * ExpStatement::toIR(): object.d(557) | |
* * * * * * AssignExp::toElem: pi = **cast(Interface***)*cast(void**)p2 | (Interface*)(Interface* = Interface*) | |
* * * * * * * VarExp::toElem: pi @ Interface* | |
* * * * * * * * DtoSymbolAddress ('pi' of type 'Interface*') | |
* * * * * * * * * a normal variable | |
* * * * * * * PtrExp::toElem: **cast(Interface***)*cast(void**)p2 @ Interface* | |
* * * * * * * * PtrExp::toElem: *cast(Interface***)*cast(void**)p2 @ Interface** | |
* * * * * * * * * CastExp::toElem: cast(Interface***)*cast(void**)p2 @ Interface*** | |
* * * * * * * * * * PtrExp::toElem: *cast(void**)p2 @ void* | |
* * * * * * * * * * * CastExp::toElem: cast(void**)p2 @ void** | |
* * * * * * * * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * Casting from 'const(void*)' to 'void**' | |
* * * * * * * * * * * * * src: %25 = load i8*, i8** %6 | |
* * * * * * * * * * * * * to type: i8** | |
* * * * * * * * * * Casting from 'void*' to 'Interface***' | |
* * * * * * * * * * * src: %27 = load i8*, i8** %26 | |
* * * * * * * * * * * to type: %object.Interface*** | |
* * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * DtoAssign() | |
* * * * * * * * lhs: %7 = alloca %object.Interface*, align 8 | |
* * * * * * * * rhs: %30 = load %object.Interface*, %object.Interface** %29 | |
* * * * * ExpStatement::toIR(): object.d(558) | |
* * * * * * DeclarationExp::toElem: (Object o2 = cast(Object)(*cast(void**)p2 - cast(long)(*pi).offset * 1L);) | T=void | |
* * * * * * * DtoDeclarationExp: o2 | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = object.Object) | |
* * * * * * * * * llvm value for decl: %9 = alloca %object.Object*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: o2 = cast(Object)(*cast(void**)p2 - cast(long)(*pi).offset * 1L) | (object.Object)(object.Object = object.Object) | |
* * * * * * * * * * VarExp::toElem: o2 @ object.Object | |
* * * * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CastExp::toElem: cast(Object)(*cast(void**)p2 - cast(long)(*pi).offset * 1L) @ object.Object | |
* * * * * * * * * * * MinExp::toElem: *cast(void**)p2 - cast(long)(*pi).offset * 1L @ void* | |
* * * * * * * * * * * * PtrExp::toElem: *cast(void**)p2 @ void* | |
* * * * * * * * * * * * * CastExp::toElem: cast(void**)p2 @ void** | |
* * * * * * * * * * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * * * Casting from 'const(void*)' to 'void**' | |
* * * * * * * * * * * * * * * src: %32 = load i8*, i8** %6 | |
* * * * * * * * * * * * * * * to type: i8** | |
* * * * * * * * * * * * Subtracting integer from pointer | |
* * * * * * * * * * * * CastExp::toElem: cast(long)(*pi).offset @ long | |
* * * * * * * * * * * * * DotVarExp::toElem: (*pi).offset @ ulong | |
* * * * * * * * * * * * * * PtrExp::toElem: *pi @ Interface | |
* * * * * * * * * * * * * * * VarExp::toElem: pi @ Interface* | |
* * * * * * * * * * * * * * * * DtoSymbolAddress ('pi' of type 'Interface*') | |
* * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * Indexing aggregate field object.Interface.offset: | |
* * * * * * * * * * * * * * * Value: %36 = getelementptr inbounds %object.Interface, %object.Interface* %35, i32 0, i32 2 | |
* * * * * * * * * * * * * Casting from 'ulong' to 'long' | |
* * * * * * * * * * * Casting from 'void*' to 'object.Object' | |
* * * * * * * * * * * * src: %39 = getelementptr i8, i8* %34, i64 %38 | |
* * * * * * * * * * * * to type: %object.Object* | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * l : %9 = alloca %object.Object*, align 8 | |
* * * * * * * * * * * r : %40 = bitcast i8* %39 to %object.Object* | |
* * * * * ExpStatement::toIR(): object.d(559) | |
* * * * * * DeclarationExp::toElem: (int c = 0;) | T=void | |
* * * * * * * DtoDeclarationExp: c | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = int) | |
* * * * * * * * * llvm value for decl: %10 = alloca i32, align 4 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: c = 0 | (int)(int = int) | |
* * * * * * * * * * VarExp::toElem: c @ int | |
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'int') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * IntegerExp::toElem: 0 @ int | |
* * * * * * * * * * * IntegerExp::toConstElem: 0 @ int | |
* * * * * * * * * * * * value = i32 0 | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %10 = alloca i32, align 4 | |
* * * * * * * * * * * rhs: i32 0 | |
* * * * * IfStatement::toIR(): object.d(561) | |
* * * * * * NotExp::toElem: !opEquals(o1, o2) @ bool | |
* * * * * * * CallExp::toElem: opEquals(o1, o2) @ bool | |
* * * * * * * * VarExp::toElem: opEquals @ @system bool(Object lhs, Object rhs) | |
* * * * * * * * * DtoSymbolAddress ('opEquals' of type '@system bool(Object lhs, Object rhs)') | |
* * * * * * * * * * FuncDeclaration | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * DtoArgument | |
* * * * * * * * * * * VarExp::toElem: o1 @ object.Object | |
* * * * * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object') | |
* * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * DtoArgument | |
* * * * * * * * * * * VarExp::toElem: o2 @ object.Object | |
* * * * * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object') | |
* * * * * * * * * * * * * a normal variable | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (0) | |
* * * * * * * * * Function type: @system bool(Object lhs, Object rhs) | |
* * * * * * ScopeStatement::toIR(): object.d(561) | |
* * * * * * * IfStatement::toIR(): object.d(562) | |
* * * * * * * * VarExp::toElem: o1 @ object.Object | |
* * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object') | |
* * * * * * * * * * a normal variable | |
* * * * * * * * if conditional: %47 = load %object.Object*, %object.Object** %8 | |
* * * * * * * * Casting from 'object.Object' to 'bool' | |
* * * * * * * * * DtoCastClass(object.Object, bool) | |
* * * * * * * * * * to bool | |
* * * * * * * * ScopeStatement::toIR(): object.d(562) | |
* * * * * * * * * IfStatement::toIR(): object.d(563) | |
* * * * * * * * * * NotExp::toElem: !o2 @ bool | |
* * * * * * * * * * * VarExp::toElem: o2 @ object.Object | |
* * * * * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object') | |
* * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * Casting from 'object.Object' to 'bool' | |
* * * * * * * * * * * * DtoCastClass(object.Object, bool) | |
* * * * * * * * * * * * * to bool | |
* * * * * * * * * * ExpStatement::toIR(): object.d(564) | |
* * * * * * * * * * * AssignExp::toElem: c = 1 | (int)(int = int) | |
* * * * * * * * * * * * VarExp::toElem: c @ int | |
* * * * * * * * * * * * * DtoSymbolAddress ('c' of type 'int') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * IntegerExp::toElem: 1 @ int | |
* * * * * * * * * * * * * IntegerExp::toConstElem: 1 @ int | |
* * * * * * * * * * * * * * value = i32 1 | |
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * lhs: %10 = alloca i32, align 4 | |
* * * * * * * * * * * * * rhs: i32 1 | |
* * * * * * * * * * ExpStatement::toIR(): object.d(566) | |
* * * * * * * * * * * AssignExp::toElem: c = o1.opCmp(o2) | (int)(int = int) | |
* * * * * * * * * * * * VarExp::toElem: c @ int | |
* * * * * * * * * * * * * DtoSymbolAddress ('c' of type 'int') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * CallExp::toElem: o1.opCmp(o2) @ int | |
* * * * * * * * * * * * * DotVarExp::toElem: o1.opCmp @ int(Object o) | |
* * * * * * * * * * * * * * VarExp::toElem: o1 @ object.Object | |
* * * * * * * * * * * * * * * DtoSymbolAddress ('o1' of type 'object.Object') | |
* * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * vthis: %56 = load %object.Object*, %object.Object** %8 | |
* * * * * * * * * * * * * * funcval: %60 = load i8*, i8** %59, align 8 | |
* * * * * * * * * * * * * * isMember = this is: object.Object | |
* * * * * * * * * * * * * * DtoFunctionType(int(Object o)) | |
* * * * * * * * * * * * * * funcval casted: %61 = bitcast i8* %60 to i32 (%object.Object*, %object.Object*)* | |
* * * * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * * VarExp::toElem: o2 @ object.Object | |
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('o2' of type 'object.Object') | |
* * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * * * %62 = load %object.Object*, %object.Object** %8 | |
* * * * * * * * * * * * * * Function type: int(Object o) | |
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * lhs: %10 = alloca i32, align 4 | |
* * * * * * * * * * * * * rhs: %64 = call i32 %61(%object.Object* nonnull %62, %object.Object* %63) | |
* * * * * * * * ExpStatement::toIR(): object.d(568) | |
* * * * * * * * * AssignExp::toElem: c = -1 | (int)(int = int) | |
* * * * * * * * * * VarExp::toElem: c @ int | |
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'int') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * IntegerExp::toElem: -1 @ int | |
* * * * * * * * * * * IntegerExp::toConstElem: -1 @ int | |
* * * * * * * * * * * * value = i32 -1 | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %10 = alloca i32, align 4 | |
* * * * * * * * * * * rhs: i32 -1 | |
* * * * * ReturnStatement::toIR(): object.d(570) | |
* * * * * * VarExp::toElem: c @ int | |
* * * * * * * DtoSymbolAddress ('c' of type 'int') | |
* * * * * * * * a normal variable | |
* * DtoDefineFunction(object.TypeInfo_Interface.tsize): object.d(573) | |
* * * isMember = this is: object.TypeInfo_Interface | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_Interface*) | |
* * * DtoResolveFunction(object.TypeInfo_Interface.tsize): object.d(573) | |
* * * * DtoDeclareFunction(object.TypeInfo_Interface.tsize): object.d(573) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Interface | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object18TypeInfo_Interface5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_Interface*) | |
* * * Doing function body for: tsize | |
* * * DtoCreateNestedContext for object.TypeInfo_Interface.tsize | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Interface.tsize | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(574) | |
* * * * * IntegerExp::toElem: 8LU @ ulong | |
* * * * * * IntegerExp::toConstElem: 8LU @ ulong | |
* * * * * * * value = i64 8 | |
* * DtoDefineFunction(object.TypeInfo_Interface.initializer): object.d(577) | |
* * * isMember = this is: object.TypeInfo_Interface | |
* * * DtoFunctionType(const pure nothrow @nogc @trusted const(void)[]()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Interface*) | |
* * * DtoResolveFunction(object.TypeInfo_Interface.initializer): object.d(577) | |
* * * * DtoDeclareFunction(object.TypeInfo_Interface.initializer): object.d(577) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Interface | |
* * * * * DtoFunctionType(const pure nothrow @nogc @trusted const(void)[]()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object18TypeInfo_Interface11initializerMxFNaNbNiNeZAxv(%object.TypeInfo_Interface*) | |
* * * Doing function body for: initializer | |
* * * DtoCreateNestedContext for object.TypeInfo_Interface.initializer | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Interface.initializer | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(578) | |
* * * * * SliceExp::toElem: null[0..8] @ const(void)[] | |
* * * * * * NullExp::toElem(type=void*): null | |
* * * * * * * NullExp::toConstElem(type=void*): null | |
* * * * * * IntegerExp::toElem: 0LU @ ulong | |
* * * * * * * IntegerExp::toConstElem: 0LU @ ulong | |
* * * * * * * * value = i64 0 | |
* * * * * * IntegerExp::toElem: 8LU @ ulong | |
* * * * * * * IntegerExp::toConstElem: 8LU @ ulong | |
* * * * * * * * value = i64 8 | |
* * DtoDefineFunction(object.TypeInfo_Interface.flags): object.d(581) | |
* * * isMember = this is: object.TypeInfo_Interface | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe uint()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo_Interface*) | |
* * * DtoResolveFunction(object.TypeInfo_Interface.flags): object.d(581) | |
* * * * DtoDeclareFunction(object.TypeInfo_Interface.flags): object.d(581) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Interface | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint()) | |
* * * * * func = | |
declare i32 @_D6object18TypeInfo_Interface5flagsMxFNaNbNdNiNfZk(%object.TypeInfo_Interface*) | |
* * * Doing function body for: flags | |
* * * DtoCreateNestedContext for object.TypeInfo_Interface.flags | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Interface.flags | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(582) | |
* * * * * IntegerExp::toElem: 1u @ uint | |
* * * * * * IntegerExp::toConstElem: 1u @ uint | |
* * * * * * * value = i32 1 | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Interface.info' | |
* * * DtoResolveVariable(object.TypeInfo_Interface.info) | |
* * Building default initializer for object.TypeInfo_Interface | |
* * * Creating initializer constant for TypeInfo_Interface | |
* * * * Field priority for info: 1 | |
* * * * DtoConstExpInit(targetType = object.TypeInfo_Class, exp = null) | |
* * * * * NullExp::toConstElem(type=object.TypeInfo_Class): null | |
* * * * final initializer: %object.TypeInfo_Interface { [19 x i8*]* @_D18TypeInfo_Interface6__vtblZ, i8* null, %object.TypeInfo_Class* null } | |
* * Building vtbl initializer | |
* * DtoDefineClassInfo(TypeInfo_Interface) | |
* * * Building ClassInfo.interfaces | |
* ClassDeclaration::codegen: 'object.TypeInfo_Struct' | |
* * DtoDefineFunction(object.TypeInfo_Struct.toString): object.d(589) | |
* * * isMember = this is: object.TypeInfo_Struct | |
* * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Struct*) | |
* * * DtoResolveFunction(object.TypeInfo_Struct.toString): object.d(589) | |
* * * * DtoDeclareFunction(object.TypeInfo_Struct.toString): object.d(589) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Struct | |
* * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object15TypeInfo_Struct8toStringMxFNaNbNfZAya(%object.TypeInfo_Struct*) | |
* * * Doing function body for: toString | |
* * * DtoCreateNestedContext for object.TypeInfo_Struct.toString | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.toString | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(590) | |
* * * * * DotVarExp::toElem: this.name @ string | |
* * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct) | |
* * * * * * * normal this exp | |
* * * * * * Indexing aggregate field object.TypeInfo_Struct.name: | |
* * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %4, i32 0, i32 2 | |
* * DtoDefineFunction(object.TypeInfo_Struct.opEquals): object.d(593) | |
* * * isMember = this is: object.TypeInfo_Struct | |
* * * DtoFunctionType(bool(Object o)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i1 (%object.TypeInfo_Struct*, %object.Object*) | |
* * * DtoResolveFunction(object.TypeInfo_Struct.opEquals): object.d(593) | |
* * * * DtoDeclareFunction(object.TypeInfo_Struct.opEquals): object.d(593) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Struct | |
* * * * * DtoFunctionType(bool(Object o)) | |
* * * * * func = | |
declare i1 @_D6object15TypeInfo_Struct8opEqualsMFC6ObjectZb(%object.TypeInfo_Struct*, %object.Object*) | |
* * * Doing function body for: opEquals | |
* * * DtoCreateNestedContext for object.TypeInfo_Struct.opEquals | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.opEquals | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(593) | |
* * * * * IfStatement::toIR(): object.d(594) | |
* * * * * * IdentityExp::toElem: this is o @ bool | |
* * * * * * * ThisExp::toElem: this @ object.Object | |
* * * * * * * * normal this exp | |
* * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * function param | |
* * * * * * * * * type: object.Object | |
* * * * * * ReturnStatement::toIR(): object.d(595) | |
* * * * * * * IntegerExp::toElem: true @ bool | |
* * * * * * * * IntegerExp::toConstElem: true @ bool | |
* * * * * * * * * value = i1 true | |
* * * * * ExpStatement::toIR(): object.d(596) | |
* * * * * * DeclarationExp::toElem: (const const(TypeInfo_Struct) s = cast(const(TypeInfo_Struct))o;) | T=void | |
* * * * * * * DtoDeclarationExp: s | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = const(TypeInfo_Struct)) | |
* * * * * * * * * llvm value for decl: %5 = alloca %object.TypeInfo_Struct*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: s = cast(const(TypeInfo_Struct))o | (const(TypeInfo_Struct))(const(TypeInfo_Struct) = const(TypeInfo_Struct)) | |
* * * * * * * * * * VarExp::toElem: s @ const(TypeInfo_Struct) | |
* * * * * * * * * * * DtoSymbolAddress ('s' of type 'const(TypeInfo_Struct)') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CastExp::toElem: cast(const(TypeInfo_Struct))o @ const(TypeInfo_Struct) | |
* * * * * * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * type: object.Object | |
* * * * * * * * * * * Casting from 'object.Object' to 'const(TypeInfo_Struct)' | |
* * * * * * * * * * * * DtoCastClass(object.Object, const(TypeInfo_Struct)) | |
* * * * * * * * * * * * * dynamic up cast | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * l : %5 = alloca %object.TypeInfo_Struct*, align 8 | |
* * * * * * * * * * * r : %16 = bitcast i8* %15 to %object.TypeInfo_Struct* | |
* * * * * ReturnStatement::toIR(): object.d(597) | |
* * * * * * LogicalExp::toElem: s && this.name == s.name && this.initializer().length == s.initializer().length @ bool | |
* * * * * * * LogicalExp::toElem: s && this.name == s.name @ bool | |
* * * * * * * * VarExp::toElem: s @ const(TypeInfo_Struct) | |
* * * * * * * * * DtoSymbolAddress ('s' of type 'const(TypeInfo_Struct)') | |
* * * * * * * * * * a normal variable | |
* * * * * * * * Casting from 'const(TypeInfo_Struct)' to 'bool' | |
* * * * * * * * * DtoCastClass(const(TypeInfo_Struct), bool) | |
* * * * * * * * * * to bool | |
* * * * * * * * EqualExp::toElem: this.name == s.name @ bool | |
* * * * * * * * * DotVarExp::toElem: this.name @ const(string) | |
* * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Struct | |
* * * * * * * * * * * normal this exp | |
* * * * * * * * * * Indexing aggregate field object.TypeInfo_Struct.name: | |
* * * * * * * * * * * Value: %21 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %20, i32 0, i32 2 | |
* * * * * * * * * DotVarExp::toElem: s.name @ const(string) | |
* * * * * * * * * * VarExp::toElem: s @ const(TypeInfo_Struct) | |
* * * * * * * * * * * DtoSymbolAddress ('s' of type 'const(TypeInfo_Struct)') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * Indexing aggregate field object.TypeInfo_Struct.name: | |
* * * * * * * * * * * Value: %23 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %22, i32 0, i32 2 | |
* * * * * * * * * static or dynamic array | |
* * * * * * * * * Comparing arrays using memcmp | |
* * * * * * * * * DtoArrayPtr | |
* * * * * * * * * DtoArrayPtr | |
* * * * * * * * * DtoArrayLen | |
* * * * * * * * * DtoArrayLen | |
* * * * * * * EqualExp::toElem: this.initializer().length == s.initializer().length @ bool | |
* * * * * * * * ArrayLengthExp::toElem: this.initializer().length @ ulong | |
* * * * * * * * * CallExp::toElem: this.initializer() @ const(void)[] | |
* * * * * * * * * * DotVarExp::toElem: this.initializer @ const pure nothrow @nogc @safe const(void)[]() | |
* * * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Struct | |
* * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * isMember = this is: object.TypeInfo_Struct | |
* * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]()) | |
* * * * * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * * * Final function type: { i64, i8* } (%object.TypeInfo_Struct*) | |
* * * * * * * * * * * DtoResolveFunction(object.TypeInfo_Struct.initializer): object.d(637) | |
* * * * * * * * * * * * DtoDeclareFunction(object.TypeInfo_Struct.initializer): object.d(637) | |
* * * * * * * * * * * * * Enter defineAsExternallyAvailable | |
* * * * * * * * * * * * * * Cross-module inlining fully disabled. | |
* * * * * * * * * * * * * isMember = this is: object.TypeInfo_Struct | |
* * * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]()) | |
* * * * * * * * * * * * * func = | |
declare { i64, i8* } @_D6object15TypeInfo_Struct11initializerMxFNaNbNiNfZAxv(%object.TypeInfo_Struct*) | |
* * * * * * * * * * * vthis: %41 = load %object.TypeInfo_Struct*, %object.TypeInfo_Struct** %3 | |
* * * * * * * * * * * funcval: %45 = load i8*, i8** %44, align 8 | |
* * * * * * * * * * * isMember = this is: object.TypeInfo_Struct | |
* * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]()) | |
* * * * * * * * * * * funcval casted: %46 = bitcast i8* %45 to { i64, i8* } (%object.TypeInfo_Struct*)* | |
* * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * Building type: const pure nothrow @nogc @safe const(void)[]() | |
* * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]()) | |
* * * * * * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * * * * Final function type: { i64, i8* } () | |
* * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * %47 = load %object.TypeInfo_Struct*, %object.TypeInfo_Struct** %3 | |
* * * * * * * * * * * Function type: const pure nothrow @nogc @safe const(void)[]() | |
* * * * * * * * * DtoArrayLen | |
* * * * * * * * ArrayLengthExp::toElem: s.initializer().length @ ulong | |
* * * * * * * * * CallExp::toElem: s.initializer() @ const(void)[] | |
* * * * * * * * * * DotVarExp::toElem: s.initializer @ const pure nothrow @nogc @safe const(void)[]() | |
* * * * * * * * * * * VarExp::toElem: s @ const(TypeInfo_Struct) | |
* * * * * * * * * * * * DtoSymbolAddress ('s' of type 'const(TypeInfo_Struct)') | |
* * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * vthis: %50 = load %object.TypeInfo_Struct*, %object.TypeInfo_Struct** %5 | |
* * * * * * * * * * * funcval: %54 = load i8*, i8** %53, align 8 | |
* * * * * * * * * * * isMember = this is: object.TypeInfo_Struct | |
* * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]()) | |
* * * * * * * * * * * funcval casted: %55 = bitcast i8* %54 to { i64, i8* } (%object.TypeInfo_Struct*)* | |
* * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * %56 = load %object.TypeInfo_Struct*, %object.TypeInfo_Struct** %5 | |
* * * * * * * * * * * Function type: const pure nothrow @nogc @safe const(void)[]() | |
* * * * * * * * * DtoArrayLen | |
* * * * * * * * integral or pointer or interface | |
* * * * * * * * lv: %49 = extractvalue { i64, i8* } %48, 0 | |
* * * * * * * * rv: %58 = extractvalue { i64, i8* } %57, 0 | |
* * DtoDefineFunction(object.TypeInfo_Struct.getHash): object.d(600) | |
* * * isMember = this is: object.TypeInfo_Struct | |
* * * DtoFunctionType(const pure nothrow @trusted ulong(const(void*) p)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_Struct*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Struct.getHash): object.d(600) | |
* * * * DtoDeclareFunction(object.TypeInfo_Struct.getHash): object.d(600) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Struct | |
* * * * * DtoFunctionType(const pure nothrow @trusted ulong(const(void*) p)) | |
* * * * * func = | |
declare i64 @_D6object15TypeInfo_Struct7getHashMxFNaNbNexPvZm(%object.TypeInfo_Struct*, i8*) | |
* * * Doing function body for: getHash | |
* * * DtoCreateNestedContext for object.TypeInfo_Struct.getHash | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.getHash | |
* * * CompoundStatement::toIR(): | |
* * * * IfStatement::toIR(): object.d(601) | |
* * * * * DotVarExp::toElem: this.xtoHash @ const(ulong function(const(void*)) pure nothrow @safe) | |
* * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct) | |
* * * * * * * normal this exp | |
* * * * * * Indexing aggregate field object.TypeInfo_Struct.xtoHash: | |
* * * * * * * Value: %7 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %6, i32 0, i32 4 | |
* * * * * if conditional: %8 = load i64 (i8*)*, i64 (i8*)** %7 | |
* * * * * Casting from 'const(ulong function(const(void*)) pure nothrow @safe)' to 'bool' | |
* * * * * ReturnStatement::toIR(): object.d(602) | |
* * * * * * CallExp::toElem: (*this.xtoHash)(p) @ ulong | |
* * * * * * * PtrExp::toElem: *this.xtoHash @ pure nothrow @safe ulong(const(void*)) | |
* * * * * * * * DotVarExp::toElem: this.xtoHash @ const(ulong function(const(void*)) pure nothrow @safe) | |
* * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * * Indexing aggregate field object.TypeInfo_Struct.xtoHash: | |
* * * * * * * * * * Value: %13 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %12, i32 0, i32 4 | |
* * * * * * * DtoCallFunction() | |
* * * * * * * * Evaluating argument expressions | |
* * * * * * * * * DtoArgument | |
* * * * * * * * * * VarExp::toElem: p @ const(void*) | |
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'const(void*)') | |
* * * * * * * * * * * * function param | |
* * * * * * * * * * * * type: const(void*) | |
* * * * * * * * doing normal arguments | |
* * * * * * * * Arguments so far: (0) | |
* * * * * * * * Function type: pure nothrow @safe ulong(const(void*)) | |
* * * * * ReturnStatement::toIR(): object.d(604) | |
* * * * * * CastExp::toElem: cast(ulong)p @ ulong | |
* * * * * * * VarExp::toElem: p @ const(void*) | |
* * * * * * * * DtoSymbolAddress ('p' of type 'const(void*)') | |
* * * * * * * * * function param | |
* * * * * * * * * type: const(void*) | |
* * * * * * * Casting from 'const(void*)' to 'ulong' | |
* * DtoDefineFunction(object.TypeInfo_Struct.equals): object.d(607) | |
* * * isMember = this is: object.TypeInfo_Struct | |
* * * DtoFunctionType(const pure nothrow @trusted bool(const(void*) p1, const(void*) p2)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i1 (%object.TypeInfo_Struct*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Struct.equals): object.d(607) | |
* * * * DtoDeclareFunction(object.TypeInfo_Struct.equals): object.d(607) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Struct | |
* * * * * DtoFunctionType(const pure nothrow @trusted bool(const(void*) p1, const(void*) p2)) | |
* * * * * func = | |
declare i1 @_D6object15TypeInfo_Struct6equalsMxFNaNbNexPvxQdZb(%object.TypeInfo_Struct*, i8*, i8*) | |
* * * Doing function body for: equals | |
* * * DtoCreateNestedContext for object.TypeInfo_Struct.equals | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.equals | |
* * * CompoundStatement::toIR(): | |
* * * * IfStatement::toIR(): object.d(608) | |
* * * * * LogicalExp::toElem: !p1 || !p2 @ bool | |
* * * * * * NotExp::toElem: !p1 @ bool | |
* * * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * function param | |
* * * * * * * * * type: const(void*) | |
* * * * * * * Casting from 'const(void*)' to 'bool' | |
* * * * * * NotExp::toElem: !p2 @ bool | |
* * * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * function param | |
* * * * * * * * * type: const(void*) | |
* * * * * * * Casting from 'const(void*)' to 'bool' | |
* * * * * ReturnStatement::toIR(): object.d(609) | |
* * * * * * IntegerExp::toElem: false @ bool | |
* * * * * * * IntegerExp::toConstElem: false @ bool | |
* * * * * * * * value = i1 false | |
* * * * * IfStatement::toIR(): object.d(610) | |
* * * * * * DotVarExp::toElem: this.xopEquals @ const(bool function(const(void*), const(void*)) pure nothrow @safe) | |
* * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct) | |
* * * * * * * * normal this exp | |
* * * * * * * Indexing aggregate field object.TypeInfo_Struct.xopEquals: | |
* * * * * * * * Value: %21 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %20, i32 0, i32 5 | |
* * * * * * if conditional: %22 = load i1 (i8*, i8*)*, i1 (i8*, i8*)** %21 | |
* * * * * * Casting from 'const(bool function(const(void*), const(void*)) pure nothrow @safe)' to 'bool' | |
* * * * * * ReturnStatement::toIR(): object.d(611) | |
* * * * * * * CallExp::toElem: (*this.xopEquals)(p1, p2) @ bool | |
* * * * * * * * PtrExp::toElem: *this.xopEquals @ pure nothrow @safe bool(const(void*), const(void*)) | |
* * * * * * * * * DotVarExp::toElem: this.xopEquals @ const(bool function(const(void*), const(void*)) pure nothrow @safe) | |
* * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct) | |
* * * * * * * * * * * normal this exp | |
* * * * * * * * * * Indexing aggregate field object.TypeInfo_Struct.xopEquals: | |
* * * * * * * * * * * Value: %27 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %26, i32 0, i32 5 | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * DtoArgument | |
* * * * * * * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * DtoArgument | |
* * * * * * * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (0) | |
* * * * * * * * * Function type: pure nothrow @safe bool(const(void*), const(void*)) | |
* * * * * * IfStatement::toIR(): object.d(612) | |
* * * * * * * IdentityExp::toElem: p1 is p2 @ bool | |
* * * * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * * function param | |
* * * * * * * * * * type: const(void*) | |
* * * * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * * function param | |
* * * * * * * * * * type: const(void*) | |
* * * * * * * ReturnStatement::toIR(): object.d(613) | |
* * * * * * * * IntegerExp::toElem: true @ bool | |
* * * * * * * * * IntegerExp::toConstElem: true @ bool | |
* * * * * * * * * * value = i1 true | |
* * * * * * * ReturnStatement::toIR(): object.d(615) | |
* * * * * * * * EqualExp::toElem: memcmp(p1, p2, this.initializer().length) == 0 @ bool | |
* * * * * * * * * CallExp::toElem: memcmp(p1, p2, this.initializer().length) @ int | |
* * * * * * * * * * VarExp::toElem: memcmp @ pure nothrow @nogc @trusted int(const(void)* src1, const(void)* src2, ulong size) | |
* * * * * * * * * * * DtoSymbolAddress ('memcmp' of type 'pure nothrow @nogc @trusted int(const(void)* src1, const(void)* src2, ulong size)') | |
* * * * * * * * * * * * FuncDeclaration | |
* * * * * * * * * * * * DtoFunctionType(pure nothrow @nogc @trusted int(const(void)* src1, const(void)* src2, ulong size)) | |
* * * * * * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * * * * Final function type: i32 (i64, i8*, i8*) | |
* * * * * * * * * * * * DtoResolveFunction(utils.memcmp): utils.d(9) | |
* * * * * * * * * * * * * DtoDeclareFunction(utils.memcmp): utils.d(9) | |
* * * * * * * * * * * * * * Enter defineAsExternallyAvailable | |
* * * * * * * * * * * * * * * Cross-module inlining fully disabled. | |
* * * * * * * * * * * * * * DtoFunctionType(pure nothrow @nogc @trusted int(const(void)* src1, const(void)* src2, ulong size)) | |
* * * * * * * * * * * * * * func = | |
declare i32 @_D5utils6memcmpFNaNbNiNePxvQdmZi(i64, i8*, i8*) | |
* * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * VarExp::toElem: p1 @ const(void)* | |
* * * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * VarExp::toElem: p2 @ const(void)* | |
* * * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * ArrayLengthExp::toElem: this.initializer().length @ ulong | |
* * * * * * * * * * * * * * CallExp::toElem: this.initializer() @ const(void)[] | |
* * * * * * * * * * * * * * * DotVarExp::toElem: this.initializer @ const pure nothrow @nogc @safe const(void)[]() | |
* * * * * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct) | |
* * * * * * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * * * * * vthis: %40 = load %object.TypeInfo_Struct*, %object.TypeInfo_Struct** %4 | |
* * * * * * * * * * * * * * * * funcval: %44 = load i8*, i8** %43, align 8 | |
* * * * * * * * * * * * * * * * isMember = this is: object.TypeInfo_Struct | |
* * * * * * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]()) | |
* * * * * * * * * * * * * * * * funcval casted: %45 = bitcast i8* %44 to { i64, i8* } (%object.TypeInfo_Struct*)* | |
* * * * * * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * * * * * %46 = load %object.TypeInfo_Struct*, %object.TypeInfo_Struct** %4 | |
* * * * * * * * * * * * * * * * Function type: const pure nothrow @nogc @safe const(void)[]() | |
* * * * * * * * * * * * * * DtoArrayLen | |
* * * * * * * * * * * Building type: pure nothrow @nogc @trusted int(const(void)* src1, const(void)* src2, ulong size) | |
* * * * * * * * * * * * DtoFunctionType(pure nothrow @nogc @trusted int(const(void)* src1, const(void)* src2, ulong size)) | |
* * * * * * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * * * * Final function type: i32 (i64, i8*, i8*) | |
* * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * Arguments so far: (0) | |
* * * * * * * * * * * Function type: pure nothrow @nogc @trusted int(const(void)* src1, const(void)* src2, ulong size) | |
* * * * * * * * * IntegerExp::toElem: 0 @ int | |
* * * * * * * * * * IntegerExp::toConstElem: 0 @ int | |
* * * * * * * * * * * value = i32 0 | |
* * * * * * * * * integral or pointer or interface | |
* * * * * * * * * lv: %51 = call i32 @_D5utils6memcmpFNaNbNiNePxvQdmZi(i64 %48, i8* %50, i8* %49) #0 | |
* * * * * * * * * rv: i32 0 | |
* * DtoDefineFunction(object.TypeInfo_Struct.compare): object.d(618) | |
* * * isMember = this is: object.TypeInfo_Struct | |
* * * DtoFunctionType(const pure nothrow @trusted int(const(void*) p1, const(void*) p2)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo_Struct*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Struct.compare): object.d(618) | |
* * * * DtoDeclareFunction(object.TypeInfo_Struct.compare): object.d(618) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Struct | |
* * * * * DtoFunctionType(const pure nothrow @trusted int(const(void*) p1, const(void*) p2)) | |
* * * * * func = | |
declare i32 @_D6object15TypeInfo_Struct7compareMxFNaNbNexPvxQdZi(%object.TypeInfo_Struct*, i8*, i8*) | |
* * * Doing function body for: compare | |
* * * DtoCreateNestedContext for object.TypeInfo_Struct.compare | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.compare | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(618) | |
* * * * * IfStatement::toIR(): object.d(619) | |
* * * * * * IdentityExp::toElem: p1 !is p2 @ bool | |
* * * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * function param | |
* * * * * * * * * type: const(void*) | |
* * * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * function param | |
* * * * * * * * * type: const(void*) | |
* * * * * * ScopeStatement::toIR(): object.d(619) | |
* * * * * * * IfStatement::toIR(): object.d(620) | |
* * * * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * * function param | |
* * * * * * * * * * type: const(void*) | |
* * * * * * * * if conditional: %12 = load i8*, i8** %5 | |
* * * * * * * * Casting from 'const(void*)' to 'bool' | |
* * * * * * * * ScopeStatement::toIR(): object.d(620) | |
* * * * * * * * * IfStatement::toIR(): object.d(621) | |
* * * * * * * * * * NotExp::toElem: !p2 @ bool | |
* * * * * * * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * Casting from 'const(void*)' to 'bool' | |
* * * * * * * * * * ReturnStatement::toIR(): object.d(622) | |
* * * * * * * * * * * IntegerExp::toElem: 1 @ int | |
* * * * * * * * * * * * IntegerExp::toConstElem: 1 @ int | |
* * * * * * * * * * * * * value = i32 1 | |
* * * * * * * * * * IfStatement::toIR(): object.d(623) | |
* * * * * * * * * * * DotVarExp::toElem: this.xopCmp @ const(int function(const(void*), const(void*)) pure nothrow @safe) | |
* * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct) | |
* * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * Indexing aggregate field object.TypeInfo_Struct.xopCmp: | |
* * * * * * * * * * * * * Value: %23 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %22, i32 0, i32 6 | |
* * * * * * * * * * * if conditional: %24 = load i32 (i8*, i8*)*, i32 (i8*, i8*)** %23 | |
* * * * * * * * * * * Casting from 'const(int function(const(void*), const(void*)) pure nothrow @safe)' to 'bool' | |
* * * * * * * * * * * ReturnStatement::toIR(): object.d(624) | |
* * * * * * * * * * * * CallExp::toElem: (*this.xopCmp)(p2, p1) @ int | |
* * * * * * * * * * * * * PtrExp::toElem: *this.xopCmp @ pure nothrow @safe int(const(void*), const(void*)) | |
* * * * * * * * * * * * * * DotVarExp::toElem: this.xopCmp @ const(int function(const(void*), const(void*)) pure nothrow @safe) | |
* * * * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct) | |
* * * * * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_Struct.xopCmp: | |
* * * * * * * * * * * * * * * * Value: %29 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %28, i32 0, i32 6 | |
* * * * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * * * Arguments so far: (0) | |
* * * * * * * * * * * * * * Function type: pure nothrow @safe int(const(void*), const(void*)) | |
* * * * * * * * * * * ReturnStatement::toIR(): object.d(626) | |
* * * * * * * * * * * * CallExp::toElem: memcmp(p1, p2, this.initializer().length) @ int | |
* * * * * * * * * * * * * VarExp::toElem: memcmp @ pure nothrow @nogc @trusted int(const(void)* src1, const(void)* src2, ulong size) | |
* * * * * * * * * * * * * * DtoSymbolAddress ('memcmp' of type 'pure nothrow @nogc @trusted int(const(void)* src1, const(void)* src2, ulong size)') | |
* * * * * * * * * * * * * * * FuncDeclaration | |
* * * * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * * VarExp::toElem: p1 @ const(void)* | |
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * * VarExp::toElem: p2 @ const(void)* | |
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * * ArrayLengthExp::toElem: this.initializer().length @ ulong | |
* * * * * * * * * * * * * * * * * CallExp::toElem: this.initializer() @ const(void)[] | |
* * * * * * * * * * * * * * * * * * DotVarExp::toElem: this.initializer @ const pure nothrow @nogc @safe const(void)[]() | |
* * * * * * * * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct) | |
* * * * * * * * * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * * * * * * * * vthis: %36 = load %object.TypeInfo_Struct*, %object.TypeInfo_Struct** %4 | |
* * * * * * * * * * * * * * * * * * * funcval: %40 = load i8*, i8** %39, align 8 | |
* * * * * * * * * * * * * * * * * * * isMember = this is: object.TypeInfo_Struct | |
* * * * * * * * * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]()) | |
* * * * * * * * * * * * * * * * * * * funcval casted: %41 = bitcast i8* %40 to { i64, i8* } (%object.TypeInfo_Struct*)* | |
* * * * * * * * * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * * * * * * * * %42 = load %object.TypeInfo_Struct*, %object.TypeInfo_Struct** %4 | |
* * * * * * * * * * * * * * * * * * * Function type: const pure nothrow @nogc @safe const(void)[]() | |
* * * * * * * * * * * * * * * * * DtoArrayLen | |
* * * * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * * * Arguments so far: (0) | |
* * * * * * * * * * * * * * Function type: pure nothrow @nogc @trusted int(const(void)* src1, const(void)* src2, ulong size) | |
* * * * * * * * ReturnStatement::toIR(): object.d(628) | |
* * * * * * * * * IntegerExp::toElem: -1 @ int | |
* * * * * * * * * * IntegerExp::toConstElem: -1 @ int | |
* * * * * * * * * * * value = i32 -1 | |
* * * * * ReturnStatement::toIR(): object.d(630) | |
* * * * * * IntegerExp::toElem: 0 @ int | |
* * * * * * * IntegerExp::toConstElem: 0 @ int | |
* * * * * * * * value = i32 0 | |
* * DtoDefineFunction(object.TypeInfo_Struct.tsize): object.d(633) | |
* * * isMember = this is: object.TypeInfo_Struct | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_Struct*) | |
* * * DtoResolveFunction(object.TypeInfo_Struct.tsize): object.d(633) | |
* * * * DtoDeclareFunction(object.TypeInfo_Struct.tsize): object.d(633) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Struct | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object15TypeInfo_Struct5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_Struct*) | |
* * * Doing function body for: tsize | |
* * * DtoCreateNestedContext for object.TypeInfo_Struct.tsize | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.tsize | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(634) | |
* * * * * ArrayLengthExp::toElem: this.initializer().length @ ulong | |
* * * * * * CallExp::toElem: this.initializer() @ const(void)[] | |
* * * * * * * DotVarExp::toElem: this.initializer @ const pure nothrow @nogc @safe const(void)[]() | |
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct) | |
* * * * * * * * * normal this exp | |
* * * * * * * * vthis: %4 = load %object.TypeInfo_Struct*, %object.TypeInfo_Struct** %2 | |
* * * * * * * * funcval: %8 = load i8*, i8** %7, align 8 | |
* * * * * * * * isMember = this is: object.TypeInfo_Struct | |
* * * * * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]()) | |
* * * * * * * * funcval casted: %9 = bitcast i8* %8 to { i64, i8* } (%object.TypeInfo_Struct*)* | |
* * * * * * * DtoCallFunction() | |
* * * * * * * * Evaluating argument expressions | |
* * * * * * * * doing normal arguments | |
* * * * * * * * Arguments so far: (1) | |
* * * * * * * * * %10 = load %object.TypeInfo_Struct*, %object.TypeInfo_Struct** %2 | |
* * * * * * * * Function type: const pure nothrow @nogc @safe const(void)[]() | |
* * * * * * DtoArrayLen | |
* * DtoDefineFunction(object.TypeInfo_Struct.initializer): object.d(637) | |
* * * Doing function body for: initializer | |
* * * DtoCreateNestedContext for object.TypeInfo_Struct.initializer | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.initializer | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(638) | |
* * * * * DotVarExp::toElem: this.m_init @ const(void)[] | |
* * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct) | |
* * * * * * * normal this exp | |
* * * * * * Indexing aggregate field object.TypeInfo_Struct.m_init: | |
* * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %4, i32 0, i32 3 | |
* * DtoDefineFunction(object.TypeInfo_Struct.flags): object.d(641) | |
* * * isMember = this is: object.TypeInfo_Struct | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe uint()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo_Struct*) | |
* * * DtoResolveFunction(object.TypeInfo_Struct.flags): object.d(641) | |
* * * * DtoDeclareFunction(object.TypeInfo_Struct.flags): object.d(641) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Struct | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint()) | |
* * * * * func = | |
declare i32 @_D6object15TypeInfo_Struct5flagsMxFNaNbNdNiNfZk(%object.TypeInfo_Struct*) | |
* * * Doing function body for: flags | |
* * * DtoCreateNestedContext for object.TypeInfo_Struct.flags | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.flags | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(642) | |
* * * * * CastExp::toElem: cast(uint)this.m_flags @ uint | |
* * * * * * DotVarExp::toElem: this.m_flags @ const(StructFlags) | |
* * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct) | |
* * * * * * * * normal this exp | |
* * * * * * * Indexing aggregate field object.TypeInfo_Struct.m_flags: | |
* * * * * * * * Building type: StructFlags | |
* * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %4, i32 0, i32 8 | |
* * * * * * * Building type: StructFlags | |
* * * * * * Casting from 'const(uint)' to 'uint' | |
* * DtoDefineFunction(object.TypeInfo_Struct.talign): object.d(645) | |
* * * isMember = this is: object.TypeInfo_Struct | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_Struct*) | |
* * * DtoResolveFunction(object.TypeInfo_Struct.talign): object.d(645) | |
* * * * DtoDeclareFunction(object.TypeInfo_Struct.talign): object.d(645) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Struct | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object15TypeInfo_Struct6talignMxFNaNbNdNiNfZm(%object.TypeInfo_Struct*) | |
* * * Doing function body for: talign | |
* * * DtoCreateNestedContext for object.TypeInfo_Struct.talign | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.talign | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(646) | |
* * * * * CastExp::toElem: cast(ulong)this.m_align @ ulong | |
* * * * * * DotVarExp::toElem: this.m_align @ const(uint) | |
* * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct) | |
* * * * * * * * normal this exp | |
* * * * * * * Indexing aggregate field object.TypeInfo_Struct.m_align: | |
* * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %4, i32 0, i32 12 | |
* * * * * * Casting from 'const(uint)' to 'ulong' | |
* * * * * * * cast to: i64 | |
* * DtoDefineFunction(object.TypeInfo_Struct.destroy): object.d(649) | |
* * * isMember = this is: object.TypeInfo_Struct | |
* * * DtoFunctionType(const void(void* p)) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (%object.TypeInfo_Struct*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Struct.destroy): object.d(649) | |
* * * * DtoDeclareFunction(object.TypeInfo_Struct.destroy): object.d(649) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Struct | |
* * * * * DtoFunctionType(const void(void* p)) | |
* * * * * func = | |
declare void @_D6object15TypeInfo_Struct7destroyMxFPvZv(%object.TypeInfo_Struct*, i8*) | |
* * * Doing function body for: destroy | |
* * * DtoCreateNestedContext for object.TypeInfo_Struct.destroy | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.destroy | |
* * * CompoundStatement::toIR(): | |
* * * * IfStatement::toIR(): object.d(650) | |
* * * * * DotVarExp::toElem: this.xdtor @ const(void function(void*)) | |
* * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct) | |
* * * * * * * normal this exp | |
* * * * * * Indexing aggregate field object.TypeInfo_Struct.xdtor: | |
* * * * * * * Value: %7 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %6, i32 0, i32 10 | |
* * * * * if conditional: %8 = load void (i8*)*, void (i8*)** %7 | |
* * * * * Casting from 'const(void function(void*))' to 'bool' | |
* * * * * ScopeStatement::toIR(): object.d(650) | |
* * * * * * IfStatement::toIR(): object.d(651) | |
* * * * * * * AndExp::toElem: this.m_flags & cast(StructFlags)2u @ const(StructFlags) | |
* * * * * * * * DotVarExp::toElem: this.m_flags @ const(StructFlags) | |
* * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * * Indexing aggregate field object.TypeInfo_Struct.m_flags: | |
* * * * * * * * * * Building type: StructFlags | |
* * * * * * * * * * Value: %13 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %12, i32 0, i32 8 | |
* * * * * * * * * Building type: StructFlags | |
* * * * * * * * IntegerExp::toElem: cast(StructFlags)2u @ StructFlags | |
* * * * * * * * * IntegerExp::toConstElem: cast(StructFlags)2u @ StructFlags | |
* * * * * * * * * * Building type: StructFlags | |
* * * * * * * * * * value = i32 2 | |
* * * * * * * * Casting from 'uint' to 'const(StructFlags)' | |
* * * * * * * * * Building type: StructFlags | |
* * * * * * * if conditional: %15 = and i32 %14, 2 | |
* * * * * * * Casting from 'const(uint)' to 'bool' | |
* * * * * * * ExpStatement::toIR(): object.d(652) | |
* * * * * * * * CallExp::toElem: (*this.xdtorti)(p, this) @ void | |
* * * * * * * * * PtrExp::toElem: *this.xdtorti @ void(void*, const(TypeInfo_Struct)) | |
* * * * * * * * * * DotVarExp::toElem: this.xdtorti @ const(void function(void*, const(TypeInfo_Struct))) | |
* * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct) | |
* * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * Indexing aggregate field object.TypeInfo_Struct.xdtorti: | |
* * * * * * * * * * * * Value: %22 = bitcast i8* %21 to void (%object.TypeInfo_Struct*, i8*)** | |
* * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * type: void* | |
* * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct) | |
* * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * Building type: void(void*, const(TypeInfo_Struct)) | |
* * * * * * * * * * * DtoFunctionType(void(void*, const(TypeInfo_Struct))) | |
* * * * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * * * Final function type: void (%object.TypeInfo_Struct*, i8*) | |
* * * * * * * * * * doing normal arguments | |
* * * * * * * * * * Arguments so far: (0) | |
* * * * * * * * * * Function type: void(void*, const(TypeInfo_Struct)) | |
* * * * * * * ExpStatement::toIR(): object.d(654) | |
* * * * * * * * CallExp::toElem: (*this.xdtor)(p) @ void | |
* * * * * * * * * PtrExp::toElem: *this.xdtor @ void(void*) | |
* * * * * * * * * * DotVarExp::toElem: this.xdtor @ const(void function(void*)) | |
* * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct) | |
* * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * Indexing aggregate field object.TypeInfo_Struct.xdtor: | |
* * * * * * * * * * * * Value: %28 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %27, i32 0, i32 10 | |
* * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * type: void* | |
* * * * * * * * * * doing normal arguments | |
* * * * * * * * * * Arguments so far: (0) | |
* * * * * * * * * * Function type: void(void*) | |
* * DtoDefineFunction(object.TypeInfo_Struct.postblit): object.d(658) | |
* * * isMember = this is: object.TypeInfo_Struct | |
* * * DtoFunctionType(const void(void* p)) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (%object.TypeInfo_Struct*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Struct.postblit): object.d(658) | |
* * * * DtoDeclareFunction(object.TypeInfo_Struct.postblit): object.d(658) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Struct | |
* * * * * DtoFunctionType(const void(void* p)) | |
* * * * * func = | |
declare void @_D6object15TypeInfo_Struct8postblitMxFPvZv(%object.TypeInfo_Struct*, i8*) | |
* * * Doing function body for: postblit | |
* * * DtoCreateNestedContext for object.TypeInfo_Struct.postblit | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.postblit | |
* * * CompoundStatement::toIR(): | |
* * * * IfStatement::toIR(): object.d(659) | |
* * * * * DotVarExp::toElem: this.xpostblit @ const(void function(void*)) | |
* * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct) | |
* * * * * * * normal this exp | |
* * * * * * Indexing aggregate field object.TypeInfo_Struct.xpostblit: | |
* * * * * * * Value: %7 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %6, i32 0, i32 11 | |
* * * * * if conditional: %8 = load void (i8*)*, void (i8*)** %7 | |
* * * * * Casting from 'const(void function(void*))' to 'bool' | |
* * * * * ExpStatement::toIR(): object.d(660) | |
* * * * * * CallExp::toElem: (*this.xpostblit)(p) @ void | |
* * * * * * * PtrExp::toElem: *this.xpostblit @ void(void*) | |
* * * * * * * * DotVarExp::toElem: this.xpostblit @ const(void function(void*)) | |
* * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * * Indexing aggregate field object.TypeInfo_Struct.xpostblit: | |
* * * * * * * * * * Value: %13 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %12, i32 0, i32 11 | |
* * * * * * * DtoCallFunction() | |
* * * * * * * * Evaluating argument expressions | |
* * * * * * * * * DtoArgument | |
* * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * function param | |
* * * * * * * * * * * * type: void* | |
* * * * * * * * doing normal arguments | |
* * * * * * * * Arguments so far: (0) | |
* * * * * * * * Function type: void(void*) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.name' | |
* * * DtoResolveVariable(object.TypeInfo_Struct.name) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.m_init' | |
* * * DtoResolveVariable(object.TypeInfo_Struct.m_init) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.xtoHash' | |
* * * DtoResolveVariable(object.TypeInfo_Struct.xtoHash) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.xopEquals' | |
* * * DtoResolveVariable(object.TypeInfo_Struct.xopEquals) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.xopCmp' | |
* * * DtoResolveVariable(object.TypeInfo_Struct.xopCmp) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.xtoString' | |
* * * DtoResolveVariable(object.TypeInfo_Struct.xtoString) | |
* * Ignoring EnumDeclaration::codegen: 'object.TypeInfo_Struct.StructFlags' | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.m_flags' | |
* * * DtoResolveVariable(object.TypeInfo_Struct.m_flags) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.xdtor' | |
* * * DtoResolveVariable(object.TypeInfo_Struct.xdtor) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.xdtorti' | |
* * * DtoResolveVariable(object.TypeInfo_Struct.xdtorti) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.xpostblit' | |
* * * DtoResolveVariable(object.TypeInfo_Struct.xpostblit) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.m_align' | |
* * * DtoResolveVariable(object.TypeInfo_Struct.m_align) | |
* * DtoDefineFunction(object.TypeInfo_Struct.rtInfo): object.d(691) | |
* * * isMember = this is: object.TypeInfo_Struct | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe immutable(void)*()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i8* (%object.TypeInfo_Struct*) | |
* * * DtoResolveFunction(object.TypeInfo_Struct.rtInfo): object.d(691) | |
* * * * DtoDeclareFunction(object.TypeInfo_Struct.rtInfo): object.d(691) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Struct | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe immutable(void)*()) | |
* * * * * func = | |
declare i8* @_D6object15TypeInfo_Struct6rtInfoMxFNaNbNdNiNfZPyv(%object.TypeInfo_Struct*) | |
* * * Doing function body for: rtInfo | |
* * * DtoCreateNestedContext for object.TypeInfo_Struct.rtInfo | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.rtInfo | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(692) | |
* * * * * DotVarExp::toElem: this.m_RTInfo @ immutable(void)* | |
* * * * * * ThisExp::toElem: this @ const(TypeInfo_Struct) | |
* * * * * * * normal this exp | |
* * * * * * Indexing aggregate field object.TypeInfo_Struct.m_RTInfo: | |
* * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %4, i32 0, i32 16 | |
* * DtoDefineFunction(object.TypeInfo_Struct.argTypes): object.d(696) | |
* * * isMember = this is: object.TypeInfo_Struct | |
* * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo_Struct*, %object.TypeInfo**, %object.TypeInfo**) | |
* * * DtoResolveFunction(object.TypeInfo_Struct.argTypes): object.d(696) | |
* * * * DtoDeclareFunction(object.TypeInfo_Struct.argTypes): object.d(696) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Struct | |
* * * * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2)) | |
* * * * * func = | |
declare i32 @_D6object15TypeInfo_Struct8argTypesMFNbNfJC8TypeInfoJQlZi(%object.TypeInfo_Struct*, %object.TypeInfo**, %object.TypeInfo**) | |
* * * Doing function body for: argTypes | |
* * * DtoCreateNestedContext for object.TypeInfo_Struct.argTypes | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Struct.argTypes | |
* * * CompoundStatement::toIR(): | |
* * * * ExpStatement::toIR(): | |
* * * * * AssignExp::toElem: arg1 = null | (object.TypeInfo)(object.TypeInfo = object.TypeInfo) | |
* * * * * * VarExp::toElem: arg1 @ object.TypeInfo | |
* * * * * * * DtoSymbolAddress ('arg1' of type 'object.TypeInfo') | |
* * * * * * * * function param | |
* * * * * * * * type: object.TypeInfo | |
* * * * * * NullExp::toElem(type=object.TypeInfo): null | |
* * * * * * * NullExp::toConstElem(type=object.TypeInfo): null | |
* * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * DtoAssign() | |
* * * * * * * l : %object.TypeInfo** %2 | |
* * * * * * * r : %object.TypeInfo* null | |
* * * * ExpStatement::toIR(): | |
* * * * * AssignExp::toElem: arg2 = null | (object.TypeInfo)(object.TypeInfo = object.TypeInfo) | |
* * * * * * VarExp::toElem: arg2 @ object.TypeInfo | |
* * * * * * * DtoSymbolAddress ('arg2' of type 'object.TypeInfo') | |
* * * * * * * * function param | |
* * * * * * * * type: object.TypeInfo | |
* * * * * * NullExp::toElem(type=object.TypeInfo): null | |
* * * * * * * NullExp::toConstElem(type=object.TypeInfo): null | |
* * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * DtoAssign() | |
* * * * * * * l : %object.TypeInfo** %1 | |
* * * * * * * r : %object.TypeInfo* null | |
* * * * CompoundStatement::toIR(): object.d(696) | |
* * * * * ExpStatement::toIR(): object.d(697) | |
* * * * * * AssignExp::toElem: arg1 = this.m_arg1 | (object.TypeInfo)(object.TypeInfo = object.TypeInfo) | |
* * * * * * * VarExp::toElem: arg1 @ object.TypeInfo | |
* * * * * * * * DtoSymbolAddress ('arg1' of type 'object.TypeInfo') | |
* * * * * * * * * function param | |
* * * * * * * * * type: object.TypeInfo | |
* * * * * * * DotVarExp::toElem: this.m_arg1 @ object.TypeInfo | |
* * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Struct | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_Struct.m_arg1: | |
* * * * * * * * * Value: %7 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %6, i32 0, i32 14 | |
* * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * DtoAssign() | |
* * * * * * * * l : %object.TypeInfo** %2 | |
* * * * * * * * r : %8 = load %object.TypeInfo*, %object.TypeInfo** %7 | |
* * * * * ExpStatement::toIR(): object.d(698) | |
* * * * * * AssignExp::toElem: arg2 = this.m_arg2 | (object.TypeInfo)(object.TypeInfo = object.TypeInfo) | |
* * * * * * * VarExp::toElem: arg2 @ object.TypeInfo | |
* * * * * * * * DtoSymbolAddress ('arg2' of type 'object.TypeInfo') | |
* * * * * * * * * function param | |
* * * * * * * * * type: object.TypeInfo | |
* * * * * * * DotVarExp::toElem: this.m_arg2 @ object.TypeInfo | |
* * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Struct | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_Struct.m_arg2: | |
* * * * * * * * * Value: %10 = getelementptr inbounds %object.TypeInfo_Struct, %object.TypeInfo_Struct* %9, i32 0, i32 15 | |
* * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * DtoAssign() | |
* * * * * * * * l : %object.TypeInfo** %1 | |
* * * * * * * * r : %11 = load %object.TypeInfo*, %object.TypeInfo** %10 | |
* * * * * ReturnStatement::toIR(): object.d(699) | |
* * * * * * IntegerExp::toElem: 0 @ int | |
* * * * * * * IntegerExp::toConstElem: 0 @ int | |
* * * * * * * * value = i32 0 | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.m_arg1' | |
* * * DtoResolveVariable(object.TypeInfo_Struct.m_arg1) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.m_arg2' | |
* * * DtoResolveVariable(object.TypeInfo_Struct.m_arg2) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Struct.m_RTInfo' | |
* * * DtoResolveVariable(object.TypeInfo_Struct.m_RTInfo) | |
* * Building default initializer for object.TypeInfo_Struct | |
* * * Creating initializer constant for TypeInfo_Struct | |
* * * * Field priority for name: 1 | |
* * * * Field priority for m_init: 1 | |
* * * * Field priority for xtoHash: 1 | |
* * * * Field priority for xopEquals: 1 | |
* * * * Field priority for xopCmp: 1 | |
* * * * Field priority for xtoString: 1 | |
* * * * Field priority for m_flags: 1 | |
* * * * Field priority for xdtor: 1 | |
* * * * Field priority for xdtorti: 1 | |
* * * * Field priority for xpostblit: 1 | |
* * * * Field priority for m_align: 1 | |
* * * * Field priority for m_arg1: 1 | |
* * * * Field priority for m_arg2: 1 | |
* * * * Field priority for m_RTInfo: 1 | |
* * * * Building type: StructFlags | |
* * * * Building type: StructFlags | |
* * * * DtoConstExpInit(targetType = string, exp = null) | |
* * * * * NullExp::toConstElem(type=string): null | |
* * * * DtoConstExpInit(targetType = void[], exp = null) | |
* * * * * NullExp::toConstElem(type=void[]): null | |
* * * * DtoConstExpInit(targetType = ulong function(const(void*)) pure nothrow @safe, exp = null) | |
* * * * * NullExp::toConstElem(type=ulong function(const(void*)) pure nothrow @safe): null | |
* * * * DtoConstExpInit(targetType = bool function(const(void*), const(void*)) pure nothrow @safe, exp = null) | |
* * * * * NullExp::toConstElem(type=bool function(const(void*), const(void*)) pure nothrow @safe): null | |
* * * * DtoConstExpInit(targetType = int function(const(void*), const(void*)) pure nothrow @safe, exp = null) | |
* * * * * NullExp::toConstElem(type=int function(const(void*), const(void*)) pure nothrow @safe): null | |
* * * * DtoConstExpInit(targetType = string function(const(void*)) pure nothrow @safe, exp = null) | |
* * * * * NullExp::toConstElem(type=string function(const(void*)) pure nothrow @safe): null | |
* * * * DtoConstExpInit(targetType = StructFlags, exp = cast(StructFlags)1u) | |
* * * * * IntegerExp::toConstElem: cast(StructFlags)1u @ StructFlags | |
* * * * * * Building type: StructFlags | |
* * * * * * value = i32 1 | |
* * * * DtoConstExpInit(targetType = void function(void*), exp = null) | |
* * * * * NullExp::toConstElem(type=void function(void*)): null | |
* * * * DtoConstExpInit(targetType = void function(void*), exp = null) | |
* * * * * NullExp::toConstElem(type=void function(void*)): null | |
* * * * DtoConstExpInit(targetType = uint, exp = 0u) | |
* * * * * IntegerExp::toConstElem: 0u @ uint | |
* * * * * * value = i32 0 | |
* * * * DtoConstExpInit(targetType = object.TypeInfo, exp = null) | |
* * * * * NullExp::toConstElem(type=object.TypeInfo): null | |
* * * * DtoConstExpInit(targetType = object.TypeInfo, exp = null) | |
* * * * * NullExp::toConstElem(type=object.TypeInfo): null | |
* * * * DtoConstExpInit(targetType = immutable(void)*, exp = null) | |
* * * * * NullExp::toConstElem(type=immutable(void)*): null | |
* * * * final initializer: %object.TypeInfo_Struct { [19 x i8*]* @_D15TypeInfo_Struct6__vtblZ, i8* null, { i64, i8* } zeroinitializer, { i64, i8* } zeroinitializer, i64 (i8*)* null, i1 (i8*, i8*)* null, i32 (i8*, i8*)* null, { i64, i8* } (i8*)* null, i32 1, [4 x i8] zeroinitializer, void (i8*)* null, void (i8*)* null, i32 0, [4 x i8] zeroinitializer, %object.TypeInfo* null, %object.TypeInfo* null, i8* null } | |
* * Building vtbl initializer | |
* * DtoDefineClassInfo(TypeInfo_Struct) | |
* * * Building ClassInfo.interfaces | |
* ClassDeclaration::codegen: 'object.TypeInfo_Pointer' | |
* * DtoDefineFunction(object.TypeInfo_Pointer.toString): object.d(709) | |
* * * isMember = this is: object.TypeInfo_Pointer | |
* * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Pointer*) | |
* * * DtoResolveFunction(object.TypeInfo_Pointer.toString): object.d(709) | |
* * * * DtoDeclareFunction(object.TypeInfo_Pointer.toString): object.d(709) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Pointer | |
* * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object16TypeInfo_Pointer8toStringMxFNaNbNfZAya(%object.TypeInfo_Pointer*) | |
* * * Doing function body for: toString | |
* * * DtoCreateNestedContext for object.TypeInfo_Pointer.toString | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Pointer.toString | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(710) | |
* * * * * StringExp::toElem: "UNK*" @ string | |
* * * * * * type: [5 x i8] | |
* * * * * * init: [5 x i8] c"UNK*\00" | |
* * DtoDefineFunction(object.TypeInfo_Pointer.opEquals): object.d(713) | |
* * * isMember = this is: object.TypeInfo_Pointer | |
* * * DtoFunctionType(bool(Object o)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i1 (%object.TypeInfo_Pointer*, %object.Object*) | |
* * * DtoResolveFunction(object.TypeInfo_Pointer.opEquals): object.d(713) | |
* * * * DtoDeclareFunction(object.TypeInfo_Pointer.opEquals): object.d(713) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Pointer | |
* * * * * DtoFunctionType(bool(Object o)) | |
* * * * * func = | |
declare i1 @_D6object16TypeInfo_Pointer8opEqualsMFC6ObjectZb(%object.TypeInfo_Pointer*, %object.Object*) | |
* * * Doing function body for: opEquals | |
* * * DtoCreateNestedContext for object.TypeInfo_Pointer.opEquals | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Pointer.opEquals | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(713) | |
* * * * * IfStatement::toIR(): object.d(714) | |
* * * * * * IdentityExp::toElem: this is o @ bool | |
* * * * * * * ThisExp::toElem: this @ object.Object | |
* * * * * * * * normal this exp | |
* * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * function param | |
* * * * * * * * * type: object.Object | |
* * * * * * ReturnStatement::toIR(): object.d(715) | |
* * * * * * * IntegerExp::toElem: true @ bool | |
* * * * * * * * IntegerExp::toConstElem: true @ bool | |
* * * * * * * * * value = i1 true | |
* * * * * ExpStatement::toIR(): object.d(716) | |
* * * * * * DeclarationExp::toElem: (const const(TypeInfo_Pointer) c = cast(const(TypeInfo_Pointer))o;) | T=void | |
* * * * * * * DtoDeclarationExp: c | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = const(TypeInfo_Pointer)) | |
* * * * * * * * * llvm value for decl: %5 = alloca %object.TypeInfo_Pointer*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: c = cast(const(TypeInfo_Pointer))o | (const(TypeInfo_Pointer))(const(TypeInfo_Pointer) = const(TypeInfo_Pointer)) | |
* * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_Pointer) | |
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Pointer)') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CastExp::toElem: cast(const(TypeInfo_Pointer))o @ const(TypeInfo_Pointer) | |
* * * * * * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * type: object.Object | |
* * * * * * * * * * * Casting from 'object.Object' to 'const(TypeInfo_Pointer)' | |
* * * * * * * * * * * * DtoCastClass(object.Object, const(TypeInfo_Pointer)) | |
* * * * * * * * * * * * * dynamic up cast | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * l : %5 = alloca %object.TypeInfo_Pointer*, align 8 | |
* * * * * * * * * * * r : %16 = bitcast i8* %15 to %object.TypeInfo_Pointer* | |
* * * * * ReturnStatement::toIR(): object.d(717) | |
* * * * * * LogicalExp::toElem: c && opEquals(this.m_next, c.m_next) @ bool | |
* * * * * * * VarExp::toElem: c @ const(TypeInfo_Pointer) | |
* * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Pointer)') | |
* * * * * * * * * a normal variable | |
* * * * * * * Casting from 'const(TypeInfo_Pointer)' to 'bool' | |
* * * * * * * * DtoCastClass(const(TypeInfo_Pointer), bool) | |
* * * * * * * * * to bool | |
* * * * * * * CallExp::toElem: opEquals(this.m_next, c.m_next) @ bool | |
* * * * * * * * VarExp::toElem: opEquals @ @system bool(const(Object) lhs, const(Object) rhs) | |
* * * * * * * * * DtoSymbolAddress ('opEquals' of type '@system bool(const(Object) lhs, const(Object) rhs)') | |
* * * * * * * * * * FuncDeclaration | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * DtoArgument | |
* * * * * * * * * * * DotVarExp::toElem: this.m_next @ const(Object) | |
* * * * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Pointer | |
* * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * Indexing aggregate field object.TypeInfo_Pointer.m_next: | |
* * * * * * * * * * * * * Value: %21 = getelementptr inbounds %object.TypeInfo_Pointer, %object.TypeInfo_Pointer* %20, i32 0, i32 2 | |
* * * * * * * * * * DtoArgument | |
* * * * * * * * * * * DotVarExp::toElem: c.m_next @ const(Object) | |
* * * * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_Pointer) | |
* * * * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Pointer)') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * Indexing aggregate field object.TypeInfo_Pointer.m_next: | |
* * * * * * * * * * * * * Value: %24 = getelementptr inbounds %object.TypeInfo_Pointer, %object.TypeInfo_Pointer* %23, i32 0, i32 2 | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (0) | |
* * * * * * * * * Function type: @system bool(const(Object) lhs, const(Object) rhs) | |
* * DtoDefineFunction(object.TypeInfo_Pointer.getHash): object.d(720) | |
* * * isMember = this is: object.TypeInfo_Pointer | |
* * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_Pointer*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Pointer.getHash): object.d(720) | |
* * * * DtoDeclareFunction(object.TypeInfo_Pointer.getHash): object.d(720) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Pointer | |
* * * * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p)) | |
* * * * * func = | |
declare i64 @_D6object16TypeInfo_Pointer7getHashMxFNbNexPvZm(%object.TypeInfo_Pointer*, i8*) | |
* * * Doing function body for: getHash | |
* * * DtoCreateNestedContext for object.TypeInfo_Pointer.getHash | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Pointer.getHash | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(721) | |
* * * * * CastExp::toElem: cast(ulong)*cast(void**)p @ ulong | |
* * * * * * PtrExp::toElem: *cast(void**)p @ void* | |
* * * * * * * CastExp::toElem: cast(void**)p @ void** | |
* * * * * * * * VarExp::toElem: p @ const(void*) | |
* * * * * * * * * DtoSymbolAddress ('p' of type 'const(void*)') | |
* * * * * * * * * * function param | |
* * * * * * * * * * type: const(void*) | |
* * * * * * * * Casting from 'const(void*)' to 'void**' | |
* * * * * * * * * src: %6 = load i8*, i8** %4 | |
* * * * * * * * * to type: i8** | |
* * * * * * Casting from 'void*' to 'ulong' | |
* * DtoDefineFunction(object.TypeInfo_Pointer.equals): object.d(724) | |
* * * isMember = this is: object.TypeInfo_Pointer | |
* * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i1 (%object.TypeInfo_Pointer*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Pointer.equals): object.d(724) | |
* * * * DtoDeclareFunction(object.TypeInfo_Pointer.equals): object.d(724) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Pointer | |
* * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2)) | |
* * * * * func = | |
declare i1 @_D6object16TypeInfo_Pointer6equalsMxFxPvxQdZb(%object.TypeInfo_Pointer*, i8*, i8*) | |
* * * Doing function body for: equals | |
* * * DtoCreateNestedContext for object.TypeInfo_Pointer.equals | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Pointer.equals | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(725) | |
* * * * * IdentityExp::toElem: *cast(void**)p1 is *cast(void**)p2 @ bool | |
* * * * * * PtrExp::toElem: *cast(void**)p1 @ void* | |
* * * * * * * CastExp::toElem: cast(void**)p1 @ void** | |
* * * * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * * function param | |
* * * * * * * * * * type: const(void*) | |
* * * * * * * * Casting from 'const(void*)' to 'void**' | |
* * * * * * * * * src: %8 = load i8*, i8** %5 | |
* * * * * * * * * to type: i8** | |
* * * * * * PtrExp::toElem: *cast(void**)p2 @ void* | |
* * * * * * * CastExp::toElem: cast(void**)p2 @ void** | |
* * * * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * * function param | |
* * * * * * * * * * type: const(void*) | |
* * * * * * * * Casting from 'const(void*)' to 'void**' | |
* * * * * * * * * src: %10 = load i8*, i8** %6 | |
* * * * * * * * * to type: i8** | |
* * DtoDefineFunction(object.TypeInfo_Pointer.compare): object.d(728) | |
* * * isMember = this is: object.TypeInfo_Pointer | |
* * * DtoFunctionType(const int(const(void*) p1, const(void*) p2)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo_Pointer*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Pointer.compare): object.d(728) | |
* * * * DtoDeclareFunction(object.TypeInfo_Pointer.compare): object.d(728) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Pointer | |
* * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2)) | |
* * * * * func = | |
declare i32 @_D6object16TypeInfo_Pointer7compareMxFxPvxQdZi(%object.TypeInfo_Pointer*, i8*, i8*) | |
* * * Doing function body for: compare | |
* * * DtoCreateNestedContext for object.TypeInfo_Pointer.compare | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Pointer.compare | |
* * * CompoundStatement::toIR(): | |
* * * * IfStatement::toIR(): object.d(729) | |
* * * * * CmpExp::toElem: *cast(void**)p1 < *cast(void**)p2 @ bool | |
* * * * * * PtrExp::toElem: *cast(void**)p1 @ void* | |
* * * * * * * CastExp::toElem: cast(void**)p1 @ void** | |
* * * * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * * function param | |
* * * * * * * * * * type: const(void*) | |
* * * * * * * * Casting from 'const(void*)' to 'void**' | |
* * * * * * * * * src: %8 = load i8*, i8** %5 | |
* * * * * * * * * to type: i8** | |
* * * * * * PtrExp::toElem: *cast(void**)p2 @ void* | |
* * * * * * * CastExp::toElem: cast(void**)p2 @ void** | |
* * * * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * * function param | |
* * * * * * * * * * type: const(void*) | |
* * * * * * * * Casting from 'const(void*)' to 'void**' | |
* * * * * * * * * src: %10 = load i8*, i8** %6 | |
* * * * * * * * * to type: i8** | |
* * * * * * type 1: %12 = load i8*, i8** %9 | |
* * * * * * type 2: %13 = load i8*, i8** %11 | |
* * * * * ReturnStatement::toIR(): object.d(730) | |
* * * * * * IntegerExp::toElem: -1 @ int | |
* * * * * * * IntegerExp::toConstElem: -1 @ int | |
* * * * * * * * value = i32 -1 | |
* * * * * IfStatement::toIR(): object.d(731) | |
* * * * * * CmpExp::toElem: *cast(void**)p1 > *cast(void**)p2 @ bool | |
* * * * * * * PtrExp::toElem: *cast(void**)p1 @ void* | |
* * * * * * * * CastExp::toElem: cast(void**)p1 @ void** | |
* * * * * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: const(void*) | |
* * * * * * * * * Casting from 'const(void*)' to 'void**' | |
* * * * * * * * * * src: %18 = load i8*, i8** %5 | |
* * * * * * * * * * to type: i8** | |
* * * * * * * PtrExp::toElem: *cast(void**)p2 @ void* | |
* * * * * * * * CastExp::toElem: cast(void**)p2 @ void** | |
* * * * * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: const(void*) | |
* * * * * * * * * Casting from 'const(void*)' to 'void**' | |
* * * * * * * * * * src: %20 = load i8*, i8** %6 | |
* * * * * * * * * * to type: i8** | |
* * * * * * * type 1: %22 = load i8*, i8** %19 | |
* * * * * * * type 2: %23 = load i8*, i8** %21 | |
* * * * * * ReturnStatement::toIR(): object.d(732) | |
* * * * * * * IntegerExp::toElem: 1 @ int | |
* * * * * * * * IntegerExp::toConstElem: 1 @ int | |
* * * * * * * * * value = i32 1 | |
* * * * * * ReturnStatement::toIR(): object.d(734) | |
* * * * * * * IntegerExp::toElem: 0 @ int | |
* * * * * * * * IntegerExp::toConstElem: 0 @ int | |
* * * * * * * * * value = i32 0 | |
* * DtoDefineFunction(object.TypeInfo_Pointer.tsize): object.d(737) | |
* * * isMember = this is: object.TypeInfo_Pointer | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_Pointer*) | |
* * * DtoResolveFunction(object.TypeInfo_Pointer.tsize): object.d(737) | |
* * * * DtoDeclareFunction(object.TypeInfo_Pointer.tsize): object.d(737) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Pointer | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object16TypeInfo_Pointer5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_Pointer*) | |
* * * Doing function body for: tsize | |
* * * DtoCreateNestedContext for object.TypeInfo_Pointer.tsize | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Pointer.tsize | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(738) | |
* * * * * IntegerExp::toElem: 8LU @ ulong | |
* * * * * * IntegerExp::toConstElem: 8LU @ ulong | |
* * * * * * * value = i64 8 | |
* * DtoDefineFunction(object.TypeInfo_Pointer.initializer): object.d(741) | |
* * * isMember = this is: object.TypeInfo_Pointer | |
* * * DtoFunctionType(const pure nothrow @nogc @trusted const(void)[]()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Pointer*) | |
* * * DtoResolveFunction(object.TypeInfo_Pointer.initializer): object.d(741) | |
* * * * DtoDeclareFunction(object.TypeInfo_Pointer.initializer): object.d(741) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Pointer | |
* * * * * DtoFunctionType(const pure nothrow @nogc @trusted const(void)[]()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object16TypeInfo_Pointer11initializerMxFNaNbNiNeZAxv(%object.TypeInfo_Pointer*) | |
* * * Doing function body for: initializer | |
* * * DtoCreateNestedContext for object.TypeInfo_Pointer.initializer | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Pointer.initializer | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(742) | |
* * * * * SliceExp::toElem: null[0..8] @ const(void)[] | |
* * * * * * NullExp::toElem(type=void*): null | |
* * * * * * * NullExp::toConstElem(type=void*): null | |
* * * * * * IntegerExp::toElem: 0LU @ ulong | |
* * * * * * * IntegerExp::toConstElem: 0LU @ ulong | |
* * * * * * * * value = i64 0 | |
* * * * * * IntegerExp::toElem: 8LU @ ulong | |
* * * * * * * IntegerExp::toConstElem: 8LU @ ulong | |
* * * * * * * * value = i64 8 | |
* * DtoDefineFunction(object.TypeInfo_Pointer.swap): object.d(745) | |
* * * isMember = this is: object.TypeInfo_Pointer | |
* * * DtoFunctionType(const void(void* p1, void* p2)) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (%object.TypeInfo_Pointer*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Pointer.swap): object.d(745) | |
* * * * DtoDeclareFunction(object.TypeInfo_Pointer.swap): object.d(745) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Pointer | |
* * * * * DtoFunctionType(const void(void* p1, void* p2)) | |
* * * * * func = | |
declare void @_D6object16TypeInfo_Pointer4swapMxFPvQcZv(%object.TypeInfo_Pointer*, i8*, i8*) | |
* * * Doing function body for: swap | |
* * * DtoCreateNestedContext for object.TypeInfo_Pointer.swap | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Pointer.swap | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(745) | |
* * * * * ExpStatement::toIR(): object.d(746) | |
* * * * * * DeclarationExp::toElem: (void* tmp = *cast(void**)p1;) | T=void | |
* * * * * * * DtoDeclarationExp: tmp | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = void*) | |
* * * * * * * * * llvm value for decl: %7 = alloca i8*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: tmp = *cast(void**)p1 | (void*)(void* = void*) | |
* * * * * * * * * * VarExp::toElem: tmp @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('tmp' of type 'void*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * PtrExp::toElem: *cast(void**)p1 @ void* | |
* * * * * * * * * * * CastExp::toElem: cast(void**)p1 @ void** | |
* * * * * * * * * * * * VarExp::toElem: p1 @ void* | |
* * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'void*') | |
* * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * type: void* | |
* * * * * * * * * * * * Casting from 'void*' to 'void**' | |
* * * * * * * * * * * * * src: %9 = load i8*, i8** %5 | |
* * * * * * * * * * * * * to type: i8** | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %7 = alloca i8*, align 8 | |
* * * * * * * * * * * rhs: %11 = load i8*, i8** %10 | |
* * * * * ExpStatement::toIR(): object.d(747) | |
* * * * * * AssignExp::toElem: *cast(void**)p1 = *cast(void**)p2 | (void*)(void* = void*) | |
* * * * * * * PtrExp::toElem: *cast(void**)p1 @ void* | |
* * * * * * * * CastExp::toElem: cast(void**)p1 @ void** | |
* * * * * * * * * VarExp::toElem: p1 @ void* | |
* * * * * * * * * * DtoSymbolAddress ('p1' of type 'void*') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: void* | |
* * * * * * * * * Casting from 'void*' to 'void**' | |
* * * * * * * * * * src: %12 = load i8*, i8** %5 | |
* * * * * * * * * * to type: i8** | |
* * * * * * * PtrExp::toElem: *cast(void**)p2 @ void* | |
* * * * * * * * CastExp::toElem: cast(void**)p2 @ void** | |
* * * * * * * * * VarExp::toElem: p2 @ void* | |
* * * * * * * * * * DtoSymbolAddress ('p2' of type 'void*') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: void* | |
* * * * * * * * * Casting from 'void*' to 'void**' | |
* * * * * * * * * * src: %14 = load i8*, i8** %6 | |
* * * * * * * * * * to type: i8** | |
* * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * DtoAssign() | |
* * * * * * * * lhs: %13 = bitcast i8* %12 to i8** | |
* * * * * * * * rhs: %16 = load i8*, i8** %15 | |
* * * * * ExpStatement::toIR(): object.d(748) | |
* * * * * * AssignExp::toElem: *cast(void**)p2 = tmp | (void*)(void* = void*) | |
* * * * * * * PtrExp::toElem: *cast(void**)p2 @ void* | |
* * * * * * * * CastExp::toElem: cast(void**)p2 @ void** | |
* * * * * * * * * VarExp::toElem: p2 @ void* | |
* * * * * * * * * * DtoSymbolAddress ('p2' of type 'void*') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: void* | |
* * * * * * * * * Casting from 'void*' to 'void**' | |
* * * * * * * * * * src: %17 = load i8*, i8** %6 | |
* * * * * * * * * * to type: i8** | |
* * * * * * * VarExp::toElem: tmp @ void* | |
* * * * * * * * DtoSymbolAddress ('tmp' of type 'void*') | |
* * * * * * * * * a normal variable | |
* * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * DtoAssign() | |
* * * * * * * * lhs: %18 = bitcast i8* %17 to i8** | |
* * * * * * * * rhs: %19 = load i8*, i8** %7 | |
* * DtoDefineFunction(object.TypeInfo_Pointer.next): object.d(751) | |
* * * isMember = this is: object.TypeInfo_Pointer | |
* * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: %object.TypeInfo* (%object.TypeInfo_Pointer*) | |
* * * DtoResolveFunction(object.TypeInfo_Pointer.next): object.d(751) | |
* * * * DtoDeclareFunction(object.TypeInfo_Pointer.next): object.d(751) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Pointer | |
* * * * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)()) | |
* * * * * func = | |
declare %object.TypeInfo* @_D6object16TypeInfo_Pointer4nextMNgFNaNbNdNiZNgC8TypeInfo(%object.TypeInfo_Pointer*) | |
* * * Doing function body for: next | |
* * * DtoCreateNestedContext for object.TypeInfo_Pointer.next | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Pointer.next | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(752) | |
* * * * * DotVarExp::toElem: this.m_next @ inout(TypeInfo) | |
* * * * * * ThisExp::toElem: this @ inout(TypeInfo_Pointer) | |
* * * * * * * normal this exp | |
* * * * * * Indexing aggregate field object.TypeInfo_Pointer.m_next: | |
* * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Pointer, %object.TypeInfo_Pointer* %4, i32 0, i32 2 | |
* * DtoDefineFunction(object.TypeInfo_Pointer.flags): object.d(755) | |
* * * isMember = this is: object.TypeInfo_Pointer | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe uint()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo_Pointer*) | |
* * * DtoResolveFunction(object.TypeInfo_Pointer.flags): object.d(755) | |
* * * * DtoDeclareFunction(object.TypeInfo_Pointer.flags): object.d(755) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Pointer | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint()) | |
* * * * * func = | |
declare i32 @_D6object16TypeInfo_Pointer5flagsMxFNaNbNdNiNfZk(%object.TypeInfo_Pointer*) | |
* * * Doing function body for: flags | |
* * * DtoCreateNestedContext for object.TypeInfo_Pointer.flags | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Pointer.flags | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(756) | |
* * * * * IntegerExp::toElem: 1u @ uint | |
* * * * * * IntegerExp::toConstElem: 1u @ uint | |
* * * * * * * value = i32 1 | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Pointer.m_next' | |
* * * DtoResolveVariable(object.TypeInfo_Pointer.m_next) | |
* * Building default initializer for object.TypeInfo_Pointer | |
* * * Creating initializer constant for TypeInfo_Pointer | |
* * * * Field priority for m_next: 1 | |
* * * * DtoConstExpInit(targetType = object.TypeInfo, exp = null) | |
* * * * * NullExp::toConstElem(type=object.TypeInfo): null | |
* * * * final initializer: %object.TypeInfo_Pointer { [19 x i8*]* @_D16TypeInfo_Pointer6__vtblZ, i8* null, %object.TypeInfo* null } | |
* * Building vtbl initializer | |
* * DtoDefineClassInfo(TypeInfo_Pointer) | |
* * * Building ClassInfo.interfaces | |
* ClassDeclaration::codegen: 'object.TypeInfo_Typedef' | |
* * DtoResolveClass(object.TypeInfo_Typedef): object.d(762) | |
* * * Building type: object.TypeInfo_Typedef | |
* * * * Building class type object.TypeInfo_Typedef @ object.d(762) | |
* * * * * Instance size: 56 | |
* * * * * Field priority for base: 1 | |
* * * * * Field priority for name: 1 | |
* * * * * Field priority for m_init: 1 | |
* * * * * class type: %object.TypeInfo_Typedef = type { [19 x i8*]*, i8*, %object.TypeInfo*, { i64, i8* }, { i64, i8* } } | |
* * DtoDefineFunction(object.TypeInfo_Typedef.toString): object.d(763) | |
* * * isMember = this is: object.TypeInfo_Typedef | |
* * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Typedef*) | |
* * * DtoResolveFunction(object.TypeInfo_Typedef.toString): object.d(763) | |
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.toString): object.d(763) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Typedef | |
* * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object16TypeInfo_Typedef8toStringMxFNaNbNfZAya(%object.TypeInfo_Typedef*) | |
* * * Doing function body for: toString | |
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.toString | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.toString | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(764) | |
* * * * * DotVarExp::toElem: this.name @ string | |
* * * * * * ThisExp::toElem: this @ const(TypeInfo_Typedef) | |
* * * * * * * normal this exp | |
* * * * * * Indexing aggregate field object.TypeInfo_Typedef.name: | |
* * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %4, i32 0, i32 3 | |
* * DtoDefineFunction(object.TypeInfo_Typedef.opEquals): object.d(767) | |
* * * isMember = this is: object.TypeInfo_Typedef | |
* * * DtoFunctionType(bool(Object o)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i1 (%object.TypeInfo_Typedef*, %object.Object*) | |
* * * DtoResolveFunction(object.TypeInfo_Typedef.opEquals): object.d(767) | |
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.opEquals): object.d(767) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Typedef | |
* * * * * DtoFunctionType(bool(Object o)) | |
* * * * * func = | |
declare i1 @_D6object16TypeInfo_Typedef8opEqualsMFC6ObjectZb(%object.TypeInfo_Typedef*, %object.Object*) | |
* * * Doing function body for: opEquals | |
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.opEquals | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.opEquals | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(767) | |
* * * * * IfStatement::toIR(): object.d(768) | |
* * * * * * IdentityExp::toElem: this is o @ bool | |
* * * * * * * ThisExp::toElem: this @ object.Object | |
* * * * * * * * normal this exp | |
* * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * function param | |
* * * * * * * * * type: object.Object | |
* * * * * * ReturnStatement::toIR(): object.d(769) | |
* * * * * * * IntegerExp::toElem: true @ bool | |
* * * * * * * * IntegerExp::toConstElem: true @ bool | |
* * * * * * * * * value = i1 true | |
* * * * * ExpStatement::toIR(): object.d(770) | |
* * * * * * DeclarationExp::toElem: (const const(TypeInfo_Typedef) c = cast(const(TypeInfo_Typedef))o;) | T=void | |
* * * * * * * DtoDeclarationExp: c | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = const(TypeInfo_Typedef)) | |
* * * * * * * * * llvm value for decl: %5 = alloca %object.TypeInfo_Typedef*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: c = cast(const(TypeInfo_Typedef))o | (const(TypeInfo_Typedef))(const(TypeInfo_Typedef) = const(TypeInfo_Typedef)) | |
* * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_Typedef) | |
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Typedef)') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CastExp::toElem: cast(const(TypeInfo_Typedef))o @ const(TypeInfo_Typedef) | |
* * * * * * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * type: object.Object | |
* * * * * * * * * * * Casting from 'object.Object' to 'const(TypeInfo_Typedef)' | |
* * * * * * * * * * * * DtoCastClass(object.Object, const(TypeInfo_Typedef)) | |
* * * * * * * * * * * * * dynamic up cast | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * l : %5 = alloca %object.TypeInfo_Typedef*, align 8 | |
* * * * * * * * * * * r : %16 = bitcast i8* %15 to %object.TypeInfo_Typedef* | |
* * * * * ReturnStatement::toIR(): object.d(771) | |
* * * * * * LogicalExp::toElem: c && this.name == c.name && opEquals(this.base, c.base) @ bool | |
* * * * * * * LogicalExp::toElem: c && this.name == c.name @ bool | |
* * * * * * * * VarExp::toElem: c @ const(TypeInfo_Typedef) | |
* * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Typedef)') | |
* * * * * * * * * * a normal variable | |
* * * * * * * * Casting from 'const(TypeInfo_Typedef)' to 'bool' | |
* * * * * * * * * DtoCastClass(const(TypeInfo_Typedef), bool) | |
* * * * * * * * * * to bool | |
* * * * * * * * EqualExp::toElem: this.name == c.name @ bool | |
* * * * * * * * * DotVarExp::toElem: this.name @ const(string) | |
* * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Typedef | |
* * * * * * * * * * * normal this exp | |
* * * * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.name: | |
* * * * * * * * * * * Value: %21 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %20, i32 0, i32 3 | |
* * * * * * * * * DotVarExp::toElem: c.name @ const(string) | |
* * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_Typedef) | |
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Typedef)') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.name: | |
* * * * * * * * * * * Value: %23 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %22, i32 0, i32 3 | |
* * * * * * * * * static or dynamic array | |
* * * * * * * * * Comparing arrays using memcmp | |
* * * * * * * * * DtoArrayPtr | |
* * * * * * * * * DtoArrayPtr | |
* * * * * * * * * DtoArrayLen | |
* * * * * * * * * DtoArrayLen | |
* * * * * * * CallExp::toElem: opEquals(this.base, c.base) @ bool | |
* * * * * * * * VarExp::toElem: opEquals @ @system bool(const(Object) lhs, const(Object) rhs) | |
* * * * * * * * * DtoSymbolAddress ('opEquals' of type '@system bool(const(Object) lhs, const(Object) rhs)') | |
* * * * * * * * * * FuncDeclaration | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * DtoArgument | |
* * * * * * * * * * * DotVarExp::toElem: this.base @ const(Object) | |
* * * * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Typedef | |
* * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base: | |
* * * * * * * * * * * * * Value: %42 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %41, i32 0, i32 2 | |
* * * * * * * * * * DtoArgument | |
* * * * * * * * * * * DotVarExp::toElem: c.base @ const(Object) | |
* * * * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_Typedef) | |
* * * * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Typedef)') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base: | |
* * * * * * * * * * * * * Value: %45 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %44, i32 0, i32 2 | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (0) | |
* * * * * * * * * Function type: @system bool(const(Object) lhs, const(Object) rhs) | |
* * DtoDefineFunction(object.TypeInfo_Typedef.getHash): object.d(774) | |
* * * isMember = this is: object.TypeInfo_Typedef | |
* * * DtoFunctionType(const nothrow @safe ulong(const(void*) p)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_Typedef*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Typedef.getHash): object.d(774) | |
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.getHash): object.d(774) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Typedef | |
* * * * * DtoFunctionType(const nothrow @safe ulong(const(void*) p)) | |
* * * * * func = | |
declare i64 @_D6object16TypeInfo_Typedef7getHashMxFNbNfxPvZm(%object.TypeInfo_Typedef*, i8*) | |
* * * Doing function body for: getHash | |
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.getHash | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.getHash | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(775) | |
* * * * * CallExp::toElem: this.base.getHash(p) @ ulong | |
* * * * * * DotVarExp::toElem: this.base.getHash @ const nothrow @trusted ulong(const(void*) p) | |
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo) | |
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Typedef) | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base: | |
* * * * * * * * * Value: %7 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %6, i32 0, i32 2 | |
* * * * * * * vthis: %8 = load %object.TypeInfo*, %object.TypeInfo** %7 | |
* * * * * * * funcval: %12 = load i8*, i8** %11, align 8 | |
* * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p)) | |
* * * * * * * funcval casted: %13 = bitcast i8* %12 to i64 (%object.TypeInfo*, i8*)* | |
* * * * * * DtoCallFunction() | |
* * * * * * * Evaluating argument expressions | |
* * * * * * * * DtoArgument | |
* * * * * * * * * VarExp::toElem: p @ const(void*) | |
* * * * * * * * * * DtoSymbolAddress ('p' of type 'const(void*)') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: const(void*) | |
* * * * * * * Building type: const nothrow @trusted ulong(const(void*) p) | |
* * * * * * * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p)) | |
* * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * Final function type: i64 (i8*) | |
* * * * * * * doing normal arguments | |
* * * * * * * Arguments so far: (1) | |
* * * * * * * * %14 = load %object.TypeInfo*, %object.TypeInfo** %7 | |
* * * * * * * Function type: const nothrow @trusted ulong(const(void*) p) | |
* * DtoDefineFunction(object.TypeInfo_Typedef.equals): object.d(778) | |
* * * isMember = this is: object.TypeInfo_Typedef | |
* * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i1 (%object.TypeInfo_Typedef*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Typedef.equals): object.d(778) | |
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.equals): object.d(778) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Typedef | |
* * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2)) | |
* * * * * func = | |
declare i1 @_D6object16TypeInfo_Typedef6equalsMxFxPvxQdZb(%object.TypeInfo_Typedef*, i8*, i8*) | |
* * * Doing function body for: equals | |
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.equals | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.equals | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(779) | |
* * * * * CallExp::toElem: this.base.equals(p1, p2) @ bool | |
* * * * * * DotVarExp::toElem: this.base.equals @ const bool(const(void*) p1, const(void*) p2) | |
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo) | |
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Typedef) | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base: | |
* * * * * * * * * Value: %9 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %8, i32 0, i32 2 | |
* * * * * * * vthis: %10 = load %object.TypeInfo*, %object.TypeInfo** %9 | |
* * * * * * * funcval: %14 = load i8*, i8** %13, align 8 | |
* * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2)) | |
* * * * * * * funcval casted: %15 = bitcast i8* %14 to i1 (%object.TypeInfo*, i8*, i8*)* | |
* * * * * * DtoCallFunction() | |
* * * * * * * Evaluating argument expressions | |
* * * * * * * * DtoArgument | |
* * * * * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: const(void*) | |
* * * * * * * * DtoArgument | |
* * * * * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: const(void*) | |
* * * * * * * Building type: const bool(const(void*) p1, const(void*) p2) | |
* * * * * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2)) | |
* * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * Final function type: i1 (i8*, i8*) | |
* * * * * * * doing normal arguments | |
* * * * * * * Arguments so far: (1) | |
* * * * * * * * %16 = load %object.TypeInfo*, %object.TypeInfo** %9 | |
* * * * * * * Function type: const bool(const(void*) p1, const(void*) p2) | |
* * DtoDefineFunction(object.TypeInfo_Typedef.compare): object.d(782) | |
* * * isMember = this is: object.TypeInfo_Typedef | |
* * * DtoFunctionType(const int(const(void*) p1, const(void*) p2)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo_Typedef*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Typedef.compare): object.d(782) | |
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.compare): object.d(782) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Typedef | |
* * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2)) | |
* * * * * func = | |
declare i32 @_D6object16TypeInfo_Typedef7compareMxFxPvxQdZi(%object.TypeInfo_Typedef*, i8*, i8*) | |
* * * Doing function body for: compare | |
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.compare | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.compare | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(783) | |
* * * * * CallExp::toElem: this.base.compare(p1, p2) @ int | |
* * * * * * DotVarExp::toElem: this.base.compare @ const int(const(void*) p1, const(void*) p2) | |
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo) | |
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Typedef) | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base: | |
* * * * * * * * * Value: %9 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %8, i32 0, i32 2 | |
* * * * * * * vthis: %10 = load %object.TypeInfo*, %object.TypeInfo** %9 | |
* * * * * * * funcval: %14 = load i8*, i8** %13, align 8 | |
* * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2)) | |
* * * * * * * funcval casted: %15 = bitcast i8* %14 to i32 (%object.TypeInfo*, i8*, i8*)* | |
* * * * * * DtoCallFunction() | |
* * * * * * * Evaluating argument expressions | |
* * * * * * * * DtoArgument | |
* * * * * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: const(void*) | |
* * * * * * * * DtoArgument | |
* * * * * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: const(void*) | |
* * * * * * * Building type: const int(const(void*) p1, const(void*) p2) | |
* * * * * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2)) | |
* * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * Final function type: i32 (i8*, i8*) | |
* * * * * * * doing normal arguments | |
* * * * * * * Arguments so far: (1) | |
* * * * * * * * %16 = load %object.TypeInfo*, %object.TypeInfo** %9 | |
* * * * * * * Function type: const int(const(void*) p1, const(void*) p2) | |
* * DtoDefineFunction(object.TypeInfo_Typedef.tsize): object.d(786) | |
* * * isMember = this is: object.TypeInfo_Typedef | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_Typedef*) | |
* * * DtoResolveFunction(object.TypeInfo_Typedef.tsize): object.d(786) | |
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.tsize): object.d(786) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Typedef | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object16TypeInfo_Typedef5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_Typedef*) | |
* * * Doing function body for: tsize | |
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.tsize | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.tsize | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(787) | |
* * * * * CallExp::toElem: this.base.tsize() @ ulong | |
* * * * * * DotVarExp::toElem: this.base.tsize @ const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo) | |
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Typedef) | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base: | |
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %4, i32 0, i32 2 | |
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8 | |
* * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * * * funcval casted: %11 = bitcast i8* %10 to i64 (%object.TypeInfo*)* | |
* * * * * * DtoCallFunction() | |
* * * * * * * Evaluating argument expressions | |
* * * * * * * doing normal arguments | |
* * * * * * * Arguments so far: (1) | |
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * Function type: const pure nothrow @nogc @property @safe ulong() | |
* * DtoDefineFunction(object.TypeInfo_Typedef.swap): object.d(790) | |
* * * isMember = this is: object.TypeInfo_Typedef | |
* * * DtoFunctionType(const void(void* p1, void* p2)) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (%object.TypeInfo_Typedef*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Typedef.swap): object.d(790) | |
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.swap): object.d(790) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Typedef | |
* * * * * DtoFunctionType(const void(void* p1, void* p2)) | |
* * * * * func = | |
declare void @_D6object16TypeInfo_Typedef4swapMxFPvQcZv(%object.TypeInfo_Typedef*, i8*, i8*) | |
* * * Doing function body for: swap | |
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.swap | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.swap | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(790) | |
* * * * * ExpStatement::toIR(): object.d(791) | |
* * * * * * CallExp::toElem: this.base.swap(p1, p2) @ void | |
* * * * * * * DotVarExp::toElem: this.base.swap @ const void(void* p1, void* p2) | |
* * * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo) | |
* * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Typedef) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base: | |
* * * * * * * * * * Value: %9 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %8, i32 0, i32 2 | |
* * * * * * * * vthis: %10 = load %object.TypeInfo*, %object.TypeInfo** %9 | |
* * * * * * * * funcval: %14 = load i8*, i8** %13, align 8 | |
* * * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * * DtoFunctionType(const void(void* p1, void* p2)) | |
* * * * * * * * funcval casted: %15 = bitcast i8* %14 to void (%object.TypeInfo*, i8*, i8*)* | |
* * * * * * * DtoCallFunction() | |
* * * * * * * * Evaluating argument expressions | |
* * * * * * * * * DtoArgument | |
* * * * * * * * * * VarExp::toElem: p1 @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p1' of type 'void*') | |
* * * * * * * * * * * * function param | |
* * * * * * * * * * * * type: void* | |
* * * * * * * * * DtoArgument | |
* * * * * * * * * * VarExp::toElem: p2 @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p2' of type 'void*') | |
* * * * * * * * * * * * function param | |
* * * * * * * * * * * * type: void* | |
* * * * * * * * Building type: const void(void* p1, void* p2) | |
* * * * * * * * * DtoFunctionType(const void(void* p1, void* p2)) | |
* * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * Final function type: void (i8*, i8*) | |
* * * * * * * * doing normal arguments | |
* * * * * * * * Arguments so far: (1) | |
* * * * * * * * * %16 = load %object.TypeInfo*, %object.TypeInfo** %9 | |
* * * * * * * * Function type: const void(void* p1, void* p2) | |
* * * * * ReturnStatement::toIR(): object.d(791) | |
* * DtoDefineFunction(object.TypeInfo_Typedef.next): object.d(794) | |
* * * isMember = this is: object.TypeInfo_Typedef | |
* * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: %object.TypeInfo* (%object.TypeInfo_Typedef*) | |
* * * DtoResolveFunction(object.TypeInfo_Typedef.next): object.d(794) | |
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.next): object.d(794) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Typedef | |
* * * * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)()) | |
* * * * * func = | |
declare %object.TypeInfo* @_D6object16TypeInfo_Typedef4nextMNgFNaNbNdNiZNgC8TypeInfo(%object.TypeInfo_Typedef*) | |
* * * Doing function body for: next | |
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.next | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.next | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(795) | |
* * * * * CallExp::toElem: this.base.next() @ inout(TypeInfo) | |
* * * * * * DotVarExp::toElem: this.base.next @ inout pure nothrow @nogc @property inout(TypeInfo)() | |
* * * * * * * DotVarExp::toElem: this.base @ inout(TypeInfo) | |
* * * * * * * * ThisExp::toElem: this @ inout(TypeInfo_Typedef) | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base: | |
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %4, i32 0, i32 2 | |
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8 | |
* * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)()) | |
* * * * * * * funcval casted: %11 = bitcast i8* %10 to %object.TypeInfo* (%object.TypeInfo*)* | |
* * * * * * DtoCallFunction() | |
* * * * * * * Evaluating argument expressions | |
* * * * * * * Building type: inout pure nothrow @nogc @property inout(TypeInfo)() | |
* * * * * * * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)()) | |
* * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * Final function type: %object.TypeInfo* () | |
* * * * * * * doing normal arguments | |
* * * * * * * Arguments so far: (1) | |
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * Function type: inout pure nothrow @nogc @property inout(TypeInfo)() | |
* * DtoDefineFunction(object.TypeInfo_Typedef.flags): object.d(798) | |
* * * isMember = this is: object.TypeInfo_Typedef | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe uint()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo_Typedef*) | |
* * * DtoResolveFunction(object.TypeInfo_Typedef.flags): object.d(798) | |
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.flags): object.d(798) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Typedef | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint()) | |
* * * * * func = | |
declare i32 @_D6object16TypeInfo_Typedef5flagsMxFNaNbNdNiNfZk(%object.TypeInfo_Typedef*) | |
* * * Doing function body for: flags | |
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.flags | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.flags | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(799) | |
* * * * * CallExp::toElem: this.base.flags() @ uint | |
* * * * * * DotVarExp::toElem: this.base.flags @ const pure nothrow @nogc @property @safe uint() | |
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo) | |
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Typedef) | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base: | |
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %4, i32 0, i32 2 | |
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8 | |
* * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint()) | |
* * * * * * * funcval casted: %11 = bitcast i8* %10 to i32 (%object.TypeInfo*)* | |
* * * * * * DtoCallFunction() | |
* * * * * * * Evaluating argument expressions | |
* * * * * * * Building type: const pure nothrow @nogc @property @safe uint() | |
* * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint()) | |
* * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * Final function type: i32 () | |
* * * * * * * doing normal arguments | |
* * * * * * * Arguments so far: (1) | |
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * Function type: const pure nothrow @nogc @property @safe uint() | |
* * DtoDefineFunction(object.TypeInfo_Typedef.initializer): object.d(802) | |
* * * isMember = this is: object.TypeInfo_Typedef | |
* * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Typedef*) | |
* * * DtoResolveFunction(object.TypeInfo_Typedef.initializer): object.d(802) | |
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.initializer): object.d(802) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Typedef | |
* * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object16TypeInfo_Typedef11initializerMxFNaNbNiNfZAxv(%object.TypeInfo_Typedef*) | |
* * * Doing function body for: initializer | |
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.initializer | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.initializer | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(803) | |
* * * * * CondExp::toElem: this.m_init.length ? this.m_init : this.base.initializer() @ const(void)[] | |
* * * * * * Building type: const(void)[]* | |
* * * * * * ArrayLengthExp::toElem: this.m_init.length @ ulong | |
* * * * * * * DotVarExp::toElem: this.m_init @ const(void[]) | |
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Typedef) | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.m_init: | |
* * * * * * * * * Value: %6 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %5, i32 0, i32 4 | |
* * * * * * * DtoArrayLen | |
* * * * * * Casting from 'ulong' to 'bool' | |
* * * * * * DotVarExp::toElem: this.m_init @ const(void)[] | |
* * * * * * * ThisExp::toElem: this @ const(TypeInfo_Typedef) | |
* * * * * * * * normal this exp | |
* * * * * * * Indexing aggregate field object.TypeInfo_Typedef.m_init: | |
* * * * * * * * Value: %12 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %11, i32 0, i32 4 | |
* * * * * * CallExp::toElem: this.base.initializer() @ const(void)[] | |
* * * * * * * DotVarExp::toElem: this.base.initializer @ const pure nothrow @nogc @safe const(void)[]() | |
* * * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo) | |
* * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Typedef) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base: | |
* * * * * * * * * * Value: %15 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %14, i32 0, i32 2 | |
* * * * * * * * vthis: %16 = load %object.TypeInfo*, %object.TypeInfo** %15 | |
* * * * * * * * funcval: %20 = load i8*, i8** %19, align 8 | |
* * * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]()) | |
* * * * * * * * funcval casted: %21 = bitcast i8* %20 to { i64, i8* } (%object.TypeInfo*)* | |
* * * * * * * DtoCallFunction() | |
* * * * * * * * Evaluating argument expressions | |
* * * * * * * * Building type: const pure nothrow @nogc @safe const(void)[]() | |
* * * * * * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]()) | |
* * * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * Final function type: { i64, i8* } () | |
* * * * * * * * doing normal arguments | |
* * * * * * * * Arguments so far: (1) | |
* * * * * * * * * %22 = load %object.TypeInfo*, %object.TypeInfo** %15 | |
* * * * * * * * Function type: const pure nothrow @nogc @safe const(void)[]() | |
* * DtoDefineFunction(object.TypeInfo_Typedef.talign): object.d(806) | |
* * * isMember = this is: object.TypeInfo_Typedef | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_Typedef*) | |
* * * DtoResolveFunction(object.TypeInfo_Typedef.talign): object.d(806) | |
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.talign): object.d(806) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Typedef | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object16TypeInfo_Typedef6talignMxFNaNbNdNiNfZm(%object.TypeInfo_Typedef*) | |
* * * Doing function body for: talign | |
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.talign | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.talign | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(807) | |
* * * * * CallExp::toElem: this.base.talign() @ ulong | |
* * * * * * DotVarExp::toElem: this.base.talign @ const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo) | |
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Typedef) | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base: | |
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %4, i32 0, i32 2 | |
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8 | |
* * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * * * funcval casted: %11 = bitcast i8* %10 to i64 (%object.TypeInfo*)* | |
* * * * * * DtoCallFunction() | |
* * * * * * * Evaluating argument expressions | |
* * * * * * * Building type: const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * Final function type: i64 () | |
* * * * * * * doing normal arguments | |
* * * * * * * Arguments so far: (1) | |
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * Function type: const pure nothrow @nogc @property @safe ulong() | |
* * DtoDefineFunction(object.TypeInfo_Typedef.argTypes): object.d(810) | |
* * * isMember = this is: object.TypeInfo_Typedef | |
* * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo_Typedef*, %object.TypeInfo**, %object.TypeInfo**) | |
* * * DtoResolveFunction(object.TypeInfo_Typedef.argTypes): object.d(810) | |
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.argTypes): object.d(810) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Typedef | |
* * * * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2)) | |
* * * * * func = | |
declare i32 @_D6object16TypeInfo_Typedef8argTypesMFNbNfJC8TypeInfoJQlZi(%object.TypeInfo_Typedef*, %object.TypeInfo**, %object.TypeInfo**) | |
* * * Doing function body for: argTypes | |
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.argTypes | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.argTypes | |
* * * CompoundStatement::toIR(): | |
* * * * ExpStatement::toIR(): | |
* * * * * AssignExp::toElem: arg1 = null | (object.TypeInfo)(object.TypeInfo = object.TypeInfo) | |
* * * * * * VarExp::toElem: arg1 @ object.TypeInfo | |
* * * * * * * DtoSymbolAddress ('arg1' of type 'object.TypeInfo') | |
* * * * * * * * function param | |
* * * * * * * * type: object.TypeInfo | |
* * * * * * NullExp::toElem(type=object.TypeInfo): null | |
* * * * * * * NullExp::toConstElem(type=object.TypeInfo): null | |
* * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * DtoAssign() | |
* * * * * * * l : %object.TypeInfo** %2 | |
* * * * * * * r : %object.TypeInfo* null | |
* * * * ExpStatement::toIR(): | |
* * * * * AssignExp::toElem: arg2 = null | (object.TypeInfo)(object.TypeInfo = object.TypeInfo) | |
* * * * * * VarExp::toElem: arg2 @ object.TypeInfo | |
* * * * * * * DtoSymbolAddress ('arg2' of type 'object.TypeInfo') | |
* * * * * * * * function param | |
* * * * * * * * type: object.TypeInfo | |
* * * * * * NullExp::toElem(type=object.TypeInfo): null | |
* * * * * * * NullExp::toConstElem(type=object.TypeInfo): null | |
* * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * DtoAssign() | |
* * * * * * * l : %object.TypeInfo** %1 | |
* * * * * * * r : %object.TypeInfo* null | |
* * * * ReturnStatement::toIR(): object.d(811) | |
* * * * * CallExp::toElem: this.base.argTypes(arg1, arg2) @ int | |
* * * * * * DotVarExp::toElem: this.base.argTypes @ nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2) | |
* * * * * * * DotVarExp::toElem: this.base @ object.TypeInfo | |
* * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Typedef | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base: | |
* * * * * * * * * Value: %7 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %6, i32 0, i32 2 | |
* * * * * * * vthis: %8 = load %object.TypeInfo*, %object.TypeInfo** %7 | |
* * * * * * * funcval: %12 = load i8*, i8** %11, align 8 | |
* * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2)) | |
* * * * * * * funcval casted: %13 = bitcast i8* %12 to i32 (%object.TypeInfo*, %object.TypeInfo**, %object.TypeInfo**)* | |
* * * * * * DtoCallFunction() | |
* * * * * * * Evaluating argument expressions | |
* * * * * * * * DtoArgument | |
* * * * * * * * * VarExp::toElem: arg1 @ object.TypeInfo | |
* * * * * * * * * * DtoSymbolAddress ('arg1' of type 'object.TypeInfo') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: object.TypeInfo | |
* * * * * * * * DtoArgument | |
* * * * * * * * * VarExp::toElem: arg2 @ object.TypeInfo | |
* * * * * * * * * * DtoSymbolAddress ('arg2' of type 'object.TypeInfo') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: object.TypeInfo | |
* * * * * * * Building type: nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2) | |
* * * * * * * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2)) | |
* * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * Final function type: i32 (%object.TypeInfo**, %object.TypeInfo**) | |
* * * * * * * doing normal arguments | |
* * * * * * * Arguments so far: (1) | |
* * * * * * * * %14 = load %object.TypeInfo*, %object.TypeInfo** %7 | |
* * * * * * * Function type: nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2) | |
* * DtoDefineFunction(object.TypeInfo_Typedef.rtInfo): object.d(814) | |
* * * isMember = this is: object.TypeInfo_Typedef | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe immutable(void)*()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i8* (%object.TypeInfo_Typedef*) | |
* * * DtoResolveFunction(object.TypeInfo_Typedef.rtInfo): object.d(814) | |
* * * * DtoDeclareFunction(object.TypeInfo_Typedef.rtInfo): object.d(814) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Typedef | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe immutable(void)*()) | |
* * * * * func = | |
declare i8* @_D6object16TypeInfo_Typedef6rtInfoMxFNaNbNdNiNfZPyv(%object.TypeInfo_Typedef*) | |
* * * Doing function body for: rtInfo | |
* * * DtoCreateNestedContext for object.TypeInfo_Typedef.rtInfo | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Typedef.rtInfo | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(815) | |
* * * * * CallExp::toElem: this.base.rtInfo() @ immutable(void)* | |
* * * * * * DotVarExp::toElem: this.base.rtInfo @ const pure nothrow @nogc @property @safe immutable(void)*() | |
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo) | |
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Typedef) | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_Typedef.base: | |
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Typedef, %object.TypeInfo_Typedef* %4, i32 0, i32 2 | |
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8 | |
* * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe immutable(void)*()) | |
* * * * * * * funcval casted: %11 = bitcast i8* %10 to i8* (%object.TypeInfo*)* | |
* * * * * * DtoCallFunction() | |
* * * * * * * Evaluating argument expressions | |
* * * * * * * Building type: const pure nothrow @nogc @property @safe immutable(void)*() | |
* * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe immutable(void)*()) | |
* * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * Final function type: i8* () | |
* * * * * * * doing normal arguments | |
* * * * * * * Arguments so far: (1) | |
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * Function type: const pure nothrow @nogc @property @safe immutable(void)*() | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Typedef.base' | |
* * * DtoResolveVariable(object.TypeInfo_Typedef.base) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Typedef.name' | |
* * * DtoResolveVariable(object.TypeInfo_Typedef.name) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Typedef.m_init' | |
* * * DtoResolveVariable(object.TypeInfo_Typedef.m_init) | |
* * Building default initializer for object.TypeInfo_Typedef | |
* * * Creating initializer constant for TypeInfo_Typedef | |
* * * * Field priority for base: 1 | |
* * * * Field priority for name: 1 | |
* * * * Field priority for m_init: 1 | |
* * * * DtoConstExpInit(targetType = object.TypeInfo, exp = null) | |
* * * * * NullExp::toConstElem(type=object.TypeInfo): null | |
* * * * DtoConstExpInit(targetType = string, exp = null) | |
* * * * * NullExp::toConstElem(type=string): null | |
* * * * DtoConstExpInit(targetType = void[], exp = null) | |
* * * * * NullExp::toConstElem(type=void[]): null | |
* * * * final initializer: %object.TypeInfo_Typedef { [19 x i8*]* @_D16TypeInfo_Typedef6__vtblZ, i8* null, %object.TypeInfo* null, { i64, i8* } zeroinitializer, { i64, i8* } zeroinitializer } | |
* * Building vtbl initializer | |
* * DtoDefineClassInfo(TypeInfo_Typedef) | |
* * * Building ClassInfo.interfaces | |
* ClassDeclaration::codegen: 'object.TypeInfo_Enum' | |
* * DtoResolveClass(object.TypeInfo_Enum): object.d(823) | |
* * * Building type: object.TypeInfo_Enum | |
* * * * Building class type object.TypeInfo_Enum @ object.d(823) | |
* * * * * Instance size: 56 | |
* * * * * Field priority for base: 1 | |
* * * * * Field priority for name: 1 | |
* * * * * Field priority for m_init: 1 | |
* * * * * class type: %object.TypeInfo_Enum = type { [19 x i8*]*, i8*, %object.TypeInfo*, { i64, i8* }, { i64, i8* } } | |
* * Building default initializer for object.TypeInfo_Enum | |
* * * Creating initializer constant for TypeInfo_Enum | |
* * * * Field priority for base: 1 | |
* * * * Field priority for name: 1 | |
* * * * Field priority for m_init: 1 | |
* * * * DtoConstExpInit(targetType = object.TypeInfo, exp = null) | |
* * * * * NullExp::toConstElem(type=object.TypeInfo): null | |
* * * * DtoConstExpInit(targetType = string, exp = null) | |
* * * * * NullExp::toConstElem(type=string): null | |
* * * * DtoConstExpInit(targetType = void[], exp = null) | |
* * * * * NullExp::toConstElem(type=void[]): null | |
* * * * final initializer: %object.TypeInfo_Enum { [19 x i8*]* @_D13TypeInfo_Enum6__vtblZ, i8* null, %object.TypeInfo* null, { i64, i8* } zeroinitializer, { i64, i8* } zeroinitializer } | |
* * Building vtbl initializer | |
* * DtoDefineClassInfo(TypeInfo_Enum) | |
* * * Building ClassInfo.interfaces | |
* DtoDefineFunction(object.getArrayHash): object.d(827) | |
* * DtoFunctionType(nothrow @trusted ulong(const(TypeInfo) element, const(void*) ptr, const(ulong) count)) | |
* * * x86-64 ABI: Transforming return type | |
* * * x86-64 ABI: Transforming argument types | |
* * * Final function type: i64 (i64, i8*, %object.TypeInfo*) | |
* * DtoResolveFunction(object.getArrayHash): object.d(827) | |
* * * DtoDeclareFunction(object.getArrayHash): object.d(827) | |
* * * * Enter defineAsExternallyAvailable | |
* * * * * Cross-module inlining fully disabled. | |
* * * * DtoFunctionType(nothrow @trusted ulong(const(TypeInfo) element, const(void*) ptr, const(ulong) count)) | |
* * * * func = | |
declare i64 @_D6object12getArrayHashFNbNexC8TypeInfoxPvxmZm(i64, i8*, %object.TypeInfo*) | |
* * Doing function body for: getArrayHash | |
* * DtoCreateNestedContext for object.getArrayHash | |
* * * DtoCreateNestedContextType for object.getArrayHash | |
* * CompoundStatement::toIR(): | |
* * * CompoundStatement::toIR(): object.d(827) | |
* * * * ExpStatement::toIR(): object.d(828) | |
* * * * * DeclarationExp::toElem: (ubyte* p = cast(ubyte*)ptr;) | T=void | |
* * * * * * DtoDeclarationExp: p | |
* * * * * * * VarDeclaration | |
* * * * * * * DtoVarDeclaration(vdtype = ubyte*) | |
* * * * * * * * llvm value for decl: %7 = alloca i8*, align 8 | |
* * * * * * * * expression initializer | |
* * * * * * * * AssignExp::toElem: p = cast(ubyte*)ptr | (ubyte*)(ubyte* = ubyte*) | |
* * * * * * * * * VarExp::toElem: p @ ubyte* | |
* * * * * * * * * * DtoSymbolAddress ('p' of type 'ubyte*') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * CastExp::toElem: cast(ubyte*)ptr @ ubyte* | |
* * * * * * * * * * VarExp::toElem: ptr @ const(void*) | |
* * * * * * * * * * * DtoSymbolAddress ('ptr' of type 'const(void*)') | |
* * * * * * * * * * * * function param | |
* * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * Casting from 'const(void*)' to 'ubyte*' | |
* * * * * * * * * * * src: %9 = load i8*, i8** %5 | |
* * * * * * * * * * * to type: i8* | |
* * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * DtoAssign() | |
* * * * * * * * * * lhs: %7 = alloca i8*, align 8 | |
* * * * * * * * * * rhs: %9 = load i8*, i8** %5 | |
* * * * ExpStatement::toIR(): object.d(829) | |
* * * * * DeclarationExp::toElem: (ulong hash = 0LU;) | T=void | |
* * * * * * DtoDeclarationExp: hash | |
* * * * * * * VarDeclaration | |
* * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * llvm value for decl: %8 = alloca i64, align 8 | |
* * * * * * * * expression initializer | |
* * * * * * * * AssignExp::toElem: hash = 0LU | (ulong)(ulong = ulong) | |
* * * * * * * * * VarExp::toElem: hash @ ulong | |
* * * * * * * * * * DtoSymbolAddress ('hash' of type 'ulong') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * IntegerExp::toElem: 0LU @ ulong | |
* * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong | |
* * * * * * * * * * * value = i64 0 | |
* * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * DtoAssign() | |
* * * * * * * * * * lhs: %8 = alloca i64, align 8 | |
* * * * * * * * * * rhs: i64 0 | |
* * * * ScopeStatement::toIR(): object.d(830) | |
* * * * * CompoundStatement::toIR(): object.d(830) | |
* * * * * * ExpStatement::toIR(): object.d(830) | |
* * * * * * * DeclarationExp::toElem: (ulong __key2 = 0LU;) | T=void | |
* * * * * * * * DtoDeclarationExp: __key2 | |
* * * * * * * * * VarDeclaration | |
* * * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * * llvm value for decl: %9 = alloca i64, align 8 | |
* * * * * * * * * * expression initializer | |
* * * * * * * * * * AssignExp::toElem: __key2 = 0LU | (ulong)(ulong = ulong) | |
* * * * * * * * * * * VarExp::toElem: __key2 @ ulong | |
* * * * * * * * * * * * DtoSymbolAddress ('__key2' of type 'ulong') | |
* * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * IntegerExp::toElem: 0LU @ ulong | |
* * * * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong | |
* * * * * * * * * * * * * value = i64 0 | |
* * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * lhs: %9 = alloca i64, align 8 | |
* * * * * * * * * * * * rhs: i64 0 | |
* * * * * * ExpStatement::toIR(): object.d(830) | |
* * * * * * * DeclarationExp::toElem: (ulong __limit3 = element.tsize() * count;) | T=void | |
* * * * * * * * DtoDeclarationExp: __limit3 | |
* * * * * * * * * VarDeclaration | |
* * * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * * llvm value for decl: %10 = alloca i64, align 8 | |
* * * * * * * * * * expression initializer | |
* * * * * * * * * * AssignExp::toElem: __limit3 = element.tsize() * count | (ulong)(ulong = ulong) | |
* * * * * * * * * * * VarExp::toElem: __limit3 @ ulong | |
* * * * * * * * * * * * DtoSymbolAddress ('__limit3' of type 'ulong') | |
* * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * MulExp::toElem: element.tsize() * count @ ulong | |
* * * * * * * * * * * * CallExp::toElem: element.tsize() @ ulong | |
* * * * * * * * * * * * * DotVarExp::toElem: element.tsize @ const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * * * * * * * * VarExp::toElem: element @ const(TypeInfo) | |
* * * * * * * * * * * * * * * DtoSymbolAddress ('element' of type 'const(TypeInfo)') | |
* * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * type: const(TypeInfo) | |
* * * * * * * * * * * * * * vthis: %13 = load %object.TypeInfo*, %object.TypeInfo** %4 | |
* * * * * * * * * * * * * * funcval: %17 = load i8*, i8** %16, align 8 | |
* * * * * * * * * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * * * * * * * * * * funcval casted: %18 = bitcast i8* %17 to i64 (%object.TypeInfo*)* | |
* * * * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * * * %19 = load %object.TypeInfo*, %object.TypeInfo** %4 | |
* * * * * * * * * * * * * * Function type: const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * * * * * * VarExp::toElem: count @ ulong | |
* * * * * * * * * * * * * DtoSymbolAddress ('count' of type 'const(ulong)') | |
* * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * type: const(ulong) | |
* * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * lhs: %10 = alloca i64, align 8 | |
* * * * * * * * * * * * rhs: %22 = mul i64 %20, %21 | |
* * * * * * ForStatement::toIR(): object.d(830) | |
* * * * * * * CmpExp::toElem: __key2 < __limit3 @ bool | |
* * * * * * * * VarExp::toElem: __key2 @ ulong | |
* * * * * * * * * DtoSymbolAddress ('__key2' of type 'ulong') | |
* * * * * * * * * * a normal variable | |
* * * * * * * * VarExp::toElem: __limit3 @ ulong | |
* * * * * * * * * DtoSymbolAddress ('__limit3' of type 'ulong') | |
* * * * * * * * * * a normal variable | |
* * * * * * * * type 1: %24 = load i64, i64* %9 | |
* * * * * * * * type 2: %25 = load i64, i64* %10 | |
* * * * * * * CompoundStatement::toIR(): object.d(830) | |
* * * * * * * * ExpStatement::toIR(): object.d(830) | |
* * * * * * * * * DeclarationExp::toElem: (ulong i = __key2;) | T=void | |
* * * * * * * * * * DtoDeclarationExp: i | |
* * * * * * * * * * * VarDeclaration | |
* * * * * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * * * * llvm value for decl: %11 = alloca i64, align 8 | |
* * * * * * * * * * * * expression initializer | |
* * * * * * * * * * * * AssignExp::toElem: i = __key2 | (ulong)(ulong = ulong) | |
* * * * * * * * * * * * * VarExp::toElem: i @ ulong | |
* * * * * * * * * * * * * * DtoSymbolAddress ('i' of type 'ulong') | |
* * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * VarExp::toElem: __key2 @ ulong | |
* * * * * * * * * * * * * * DtoSymbolAddress ('__key2' of type 'ulong') | |
* * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * * lhs: %11 = alloca i64, align 8 | |
* * * * * * * * * * * * * * rhs: %29 = load i64, i64* %9 | |
* * * * * * * * ExpStatement::toIR(): object.d(831) | |
* * * * * * * * * AssignExp::toElem: hash = (hash << 4) + cast(ulong)cast(int)*p ^ 57005LU + i | (ulong)(ulong = ulong) | |
* * * * * * * * * * VarExp::toElem: hash @ ulong | |
* * * * * * * * * * * DtoSymbolAddress ('hash' of type 'ulong') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * XorExp::toElem: (hash << 4) + cast(ulong)cast(int)*p ^ 57005LU + i @ ulong | |
* * * * * * * * * * * AddExp::toElem: (hash << 4) + cast(ulong)cast(int)*p @ ulong | |
* * * * * * * * * * * * ShlExp::toElem: hash << 4 @ ulong | |
* * * * * * * * * * * * * VarExp::toElem: hash @ ulong | |
* * * * * * * * * * * * * * DtoSymbolAddress ('hash' of type 'ulong') | |
* * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * IntegerExp::toElem: 4 @ int | |
* * * * * * * * * * * * * * IntegerExp::toConstElem: 4 @ int | |
* * * * * * * * * * * * * * * value = i32 4 | |
* * * * * * * * * * * * * Casting from 'int' to 'ulong' | |
* * * * * * * * * * * * * * cast to: i64 | |
* * * * * * * * * * * * CastExp::toElem: cast(ulong)cast(int)*p @ ulong | |
* * * * * * * * * * * * * CastExp::toElem: cast(int)*p @ int | |
* * * * * * * * * * * * * * PtrExp::toElem: *p @ ubyte | |
* * * * * * * * * * * * * * * VarExp::toElem: p @ ubyte* | |
* * * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'ubyte*') | |
* * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * Casting from 'ubyte' to 'int' | |
* * * * * * * * * * * * * * * cast to: i32 | |
* * * * * * * * * * * * * Casting from 'int' to 'ulong' | |
* * * * * * * * * * * * * * cast to: i64 | |
* * * * * * * * * * * AddExp::toElem: 57005LU + i @ ulong | |
* * * * * * * * * * * * IntegerExp::toElem: 57005LU @ ulong | |
* * * * * * * * * * * * * IntegerExp::toConstElem: 57005LU @ ulong | |
* * * * * * * * * * * * * * value = i64 57005 | |
* * * * * * * * * * * * VarExp::toElem: i @ ulong | |
* * * * * * * * * * * * * DtoSymbolAddress ('i' of type 'ulong') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %8 = alloca i64, align 8 | |
* * * * * * * * * * * rhs: %40 = xor i64 %37, %39 | |
* * * * * * * AddAssignExp::toElem: __key2 += 1LU @ ulong | |
* * * * * * * * VarExp::toElem: __key2 @ ulong | |
* * * * * * * * * DtoSymbolAddress ('__key2' of type 'ulong') | |
* * * * * * * * * * a normal variable | |
* * * * * * * * IntegerExp::toElem: 1LU @ ulong | |
* * * * * * * * * IntegerExp::toConstElem: 1LU @ ulong | |
* * * * * * * * * * value = i64 1 | |
* * * * * * * * DtoAssign() | |
* * * * * * * * * lhs: %9 = alloca i64, align 8 | |
* * * * * * * * * rhs: %43 = add i64 %42, 1 | |
* * * * ReturnStatement::toIR(): object.d(833) | |
* * * * * VarExp::toElem: hash @ ulong | |
* * * * * * DtoSymbolAddress ('hash' of type 'ulong') | |
* * * * * * * a normal variable | |
* ClassDeclaration::codegen: 'object.TypeInfo_Array' | |
* * DtoDefineFunction(object.TypeInfo_Array.toString): object.d(837) | |
* * * isMember = this is: object.TypeInfo_Array | |
* * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Array*) | |
* * * DtoResolveFunction(object.TypeInfo_Array.toString): object.d(837) | |
* * * * DtoDeclareFunction(object.TypeInfo_Array.toString): object.d(837) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Array | |
* * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object14TypeInfo_Array8toStringMxFNaNbNfZAya(%object.TypeInfo_Array*) | |
* * * Doing function body for: toString | |
* * * DtoCreateNestedContext for object.TypeInfo_Array.toString | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Array.toString | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(838) | |
* * * * * StringExp::toElem: "UNK[]" @ string | |
* * * * * * type: [6 x i8] | |
* * * * * * init: [6 x i8] c"UNK[]\00" | |
* * DtoDefineFunction(object.TypeInfo_Array.opEquals): object.d(841) | |
* * * isMember = this is: object.TypeInfo_Array | |
* * * DtoFunctionType(bool(Object o)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i1 (%object.TypeInfo_Array*, %object.Object*) | |
* * * DtoResolveFunction(object.TypeInfo_Array.opEquals): object.d(841) | |
* * * * DtoDeclareFunction(object.TypeInfo_Array.opEquals): object.d(841) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Array | |
* * * * * DtoFunctionType(bool(Object o)) | |
* * * * * func = | |
declare i1 @_D6object14TypeInfo_Array8opEqualsMFC6ObjectZb(%object.TypeInfo_Array*, %object.Object*) | |
* * * Doing function body for: opEquals | |
* * * DtoCreateNestedContext for object.TypeInfo_Array.opEquals | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Array.opEquals | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(841) | |
* * * * * IfStatement::toIR(): object.d(842) | |
* * * * * * IdentityExp::toElem: this is o @ bool | |
* * * * * * * ThisExp::toElem: this @ object.Object | |
* * * * * * * * normal this exp | |
* * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * function param | |
* * * * * * * * * type: object.Object | |
* * * * * * ReturnStatement::toIR(): object.d(843) | |
* * * * * * * IntegerExp::toElem: true @ bool | |
* * * * * * * * IntegerExp::toConstElem: true @ bool | |
* * * * * * * * * value = i1 true | |
* * * * * ExpStatement::toIR(): object.d(844) | |
* * * * * * DeclarationExp::toElem: (const const(TypeInfo_Array) c = cast(const(TypeInfo_Array))o;) | T=void | |
* * * * * * * DtoDeclarationExp: c | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = const(TypeInfo_Array)) | |
* * * * * * * * * llvm value for decl: %5 = alloca %object.TypeInfo_Array*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: c = cast(const(TypeInfo_Array))o | (const(TypeInfo_Array))(const(TypeInfo_Array) = const(TypeInfo_Array)) | |
* * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_Array) | |
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Array)') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CastExp::toElem: cast(const(TypeInfo_Array))o @ const(TypeInfo_Array) | |
* * * * * * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * type: object.Object | |
* * * * * * * * * * * Casting from 'object.Object' to 'const(TypeInfo_Array)' | |
* * * * * * * * * * * * DtoCastClass(object.Object, const(TypeInfo_Array)) | |
* * * * * * * * * * * * * dynamic up cast | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * l : %5 = alloca %object.TypeInfo_Array*, align 8 | |
* * * * * * * * * * * r : %16 = bitcast i8* %15 to %object.TypeInfo_Array* | |
* * * * * ReturnStatement::toIR(): object.d(845) | |
* * * * * * LogicalExp::toElem: c && opEquals(this.value, c.value) @ bool | |
* * * * * * * VarExp::toElem: c @ const(TypeInfo_Array) | |
* * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Array)') | |
* * * * * * * * * a normal variable | |
* * * * * * * Casting from 'const(TypeInfo_Array)' to 'bool' | |
* * * * * * * * DtoCastClass(const(TypeInfo_Array), bool) | |
* * * * * * * * * to bool | |
* * * * * * * CallExp::toElem: opEquals(this.value, c.value) @ bool | |
* * * * * * * * VarExp::toElem: opEquals @ @system bool(const(Object) lhs, const(Object) rhs) | |
* * * * * * * * * DtoSymbolAddress ('opEquals' of type '@system bool(const(Object) lhs, const(Object) rhs)') | |
* * * * * * * * * * FuncDeclaration | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * DtoArgument | |
* * * * * * * * * * * DotVarExp::toElem: this.value @ const(Object) | |
* * * * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Array | |
* * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * Indexing aggregate field object.TypeInfo_Array.value: | |
* * * * * * * * * * * * * Value: %21 = getelementptr inbounds %object.TypeInfo_Array, %object.TypeInfo_Array* %20, i32 0, i32 2 | |
* * * * * * * * * * DtoArgument | |
* * * * * * * * * * * DotVarExp::toElem: c.value @ const(Object) | |
* * * * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_Array) | |
* * * * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_Array)') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * Indexing aggregate field object.TypeInfo_Array.value: | |
* * * * * * * * * * * * * Value: %24 = getelementptr inbounds %object.TypeInfo_Array, %object.TypeInfo_Array* %23, i32 0, i32 2 | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (0) | |
* * * * * * * * * Function type: @system bool(const(Object) lhs, const(Object) rhs) | |
* * DtoDefineFunction(object.TypeInfo_Array.getHash): object.d(848) | |
* * * isMember = this is: object.TypeInfo_Array | |
* * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_Array*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Array.getHash): object.d(848) | |
* * * * DtoDeclareFunction(object.TypeInfo_Array.getHash): object.d(848) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Array | |
* * * * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p)) | |
* * * * * func = | |
declare i64 @_D6object14TypeInfo_Array7getHashMxFNbNexPvZm(%object.TypeInfo_Array*, i8*) | |
* * * Doing function body for: getHash | |
* * * DtoCreateNestedContext for object.TypeInfo_Array.getHash | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Array.getHash | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(848) | |
* * * * * ExpStatement::toIR(): object.d(849) | |
* * * * * * DeclarationExp::toElem: (void[] a = *cast(void[]*)p;) | T=void | |
* * * * * * * DtoDeclarationExp: a | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = void[]) | |
* * * * * * * * * llvm value for decl: %5 = alloca { i64, i8* }, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: a = *cast(void[]*)p | (void[])(void[] = void[]) | |
* * * * * * * * * * VarExp::toElem: a @ void[] | |
* * * * * * * * * * * DtoSymbolAddress ('a' of type 'void[]') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * PtrExp::toElem: *cast(void[]*)p @ void[] | |
* * * * * * * * * * * CastExp::toElem: cast(void[]*)p @ void[]* | |
* * * * * * * * * * * * VarExp::toElem: p @ const(void*) | |
* * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'const(void*)') | |
* * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * Casting from 'const(void*)' to 'void[]*' | |
* * * * * * * * * * * * * src: %7 = load i8*, i8** %4 | |
* * * * * * * * * * * * * to type: { i64, i8* }* | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * DtoArrayAssign | |
* * * * * * * * * * * * DtoArrayPtr | |
* * * * * * * * * * * * DtoArrayLen | |
* * * * * * * * * * * * SetArray | |
* * * * * ReturnStatement::toIR(): object.d(850) | |
* * * * * * CallExp::toElem: getArrayHash(this.value, cast(void*)a, a.length) @ ulong | |
* * * * * * * VarExp::toElem: getArrayHash @ nothrow @trusted ulong(const(TypeInfo) element, const(void*) ptr, const(ulong) count) | |
* * * * * * * * DtoSymbolAddress ('getArrayHash' of type 'nothrow @trusted ulong(const(TypeInfo) element, const(void*) ptr, const(ulong) count)') | |
* * * * * * * * * FuncDeclaration | |
* * * * * * * DtoCallFunction() | |
* * * * * * * * Evaluating argument expressions | |
* * * * * * * * * DtoArgument | |
* * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo) | |
* * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Array) | |
* * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * Indexing aggregate field object.TypeInfo_Array.value: | |
* * * * * * * * * * * * Value: %16 = getelementptr inbounds %object.TypeInfo_Array, %object.TypeInfo_Array* %15, i32 0, i32 2 | |
* * * * * * * * * DtoArgument | |
* * * * * * * * * * CastExp::toElem: cast(void*)a @ const(void*) | |
* * * * * * * * * * * VarExp::toElem: a @ void[] | |
* * * * * * * * * * * * DtoSymbolAddress ('a' of type 'void[]') | |
* * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * Casting from 'void[]' to 'void*' | |
* * * * * * * * * * * * DtoCastArray | |
* * * * * * * * * * * * * from array or sarray | |
* * * * * * * * * * * * * to pointer | |
* * * * * * * * * * * * * DtoArrayPtr | |
* * * * * * * * * * * repainting from 'void*' to 'const(void*)' | |
* * * * * * * * * DtoArgument | |
* * * * * * * * * * ArrayLengthExp::toElem: a.length @ const(ulong) | |
* * * * * * * * * * * VarExp::toElem: a @ void[] | |
* * * * * * * * * * * * DtoSymbolAddress ('a' of type 'void[]') | |
* * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * DtoArrayLen | |
* * * * * * * * Building type: nothrow @trusted ulong(const(TypeInfo) element, const(void*) ptr, const(ulong) count) | |
* * * * * * * * * DtoFunctionType(nothrow @trusted ulong(const(TypeInfo) element, const(void*) ptr, const(ulong) count)) | |
* * * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * Final function type: i64 (i64, i8*, %object.TypeInfo*) | |
* * * * * * * * doing normal arguments | |
* * * * * * * * Arguments so far: (0) | |
* * * * * * * * Function type: nothrow @trusted ulong(const(TypeInfo) element, const(void*) ptr, const(ulong) count) | |
* * DtoDefineFunction(object.TypeInfo_Array.equals): object.d(853) | |
* * * isMember = this is: object.TypeInfo_Array | |
* * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i1 (%object.TypeInfo_Array*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Array.equals): object.d(853) | |
* * * * DtoDeclareFunction(object.TypeInfo_Array.equals): object.d(853) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Array | |
* * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2)) | |
* * * * * func = | |
declare i1 @_D6object14TypeInfo_Array6equalsMxFxPvxQdZb(%object.TypeInfo_Array*, i8*, i8*) | |
* * * Doing function body for: equals | |
* * * DtoCreateNestedContext for object.TypeInfo_Array.equals | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Array.equals | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(853) | |
* * * * * ExpStatement::toIR(): object.d(854) | |
* * * * * * DeclarationExp::toElem: (void[] a1 = *cast(void[]*)p1;) | T=void | |
* * * * * * * DtoDeclarationExp: a1 | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = void[]) | |
* * * * * * * * * llvm value for decl: %7 = alloca { i64, i8* }, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: a1 = *cast(void[]*)p1 | (void[])(void[] = void[]) | |
* * * * * * * * * * VarExp::toElem: a1 @ void[] | |
* * * * * * * * * * * DtoSymbolAddress ('a1' of type 'void[]') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * PtrExp::toElem: *cast(void[]*)p1 @ void[] | |
* * * * * * * * * * * CastExp::toElem: cast(void[]*)p1 @ void[]* | |
* * * * * * * * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * Casting from 'const(void*)' to 'void[]*' | |
* * * * * * * * * * * * * src: %9 = load i8*, i8** %5 | |
* * * * * * * * * * * * * to type: { i64, i8* }* | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * DtoArrayAssign | |
* * * * * * * * * * * * DtoArrayPtr | |
* * * * * * * * * * * * DtoArrayLen | |
* * * * * * * * * * * * SetArray | |
* * * * * ExpStatement::toIR(): object.d(855) | |
* * * * * * DeclarationExp::toElem: (void[] a2 = *cast(void[]*)p2;) | T=void | |
* * * * * * * DtoDeclarationExp: a2 | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = void[]) | |
* * * * * * * * * llvm value for decl: %8 = alloca { i64, i8* }, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: a2 = *cast(void[]*)p2 | (void[])(void[] = void[]) | |
* * * * * * * * * * VarExp::toElem: a2 @ void[] | |
* * * * * * * * * * * DtoSymbolAddress ('a2' of type 'void[]') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * PtrExp::toElem: *cast(void[]*)p2 @ void[] | |
* * * * * * * * * * * CastExp::toElem: cast(void[]*)p2 @ void[]* | |
* * * * * * * * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * Casting from 'const(void*)' to 'void[]*' | |
* * * * * * * * * * * * * src: %18 = load i8*, i8** %6 | |
* * * * * * * * * * * * * to type: { i64, i8* }* | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * DtoArrayAssign | |
* * * * * * * * * * * * DtoArrayPtr | |
* * * * * * * * * * * * DtoArrayLen | |
* * * * * * * * * * * * SetArray | |
* * * * * IfStatement::toIR(): object.d(856) | |
* * * * * * EqualExp::toElem: a1.length != a2.length @ bool | |
* * * * * * * ArrayLengthExp::toElem: a1.length @ ulong | |
* * * * * * * * VarExp::toElem: a1 @ void[] | |
* * * * * * * * * DtoSymbolAddress ('a1' of type 'void[]') | |
* * * * * * * * * * a normal variable | |
* * * * * * * * DtoArrayLen | |
* * * * * * * ArrayLengthExp::toElem: a2.length @ ulong | |
* * * * * * * * VarExp::toElem: a2 @ void[] | |
* * * * * * * * * DtoSymbolAddress ('a2' of type 'void[]') | |
* * * * * * * * * * a normal variable | |
* * * * * * * * DtoArrayLen | |
* * * * * * * integral or pointer or interface | |
* * * * * * * lv: %27 = load i64, i64* %26 | |
* * * * * * * rv: %29 = load i64, i64* %28 | |
* * * * * * ReturnStatement::toIR(): object.d(857) | |
* * * * * * * IntegerExp::toElem: false @ bool | |
* * * * * * * * IntegerExp::toConstElem: false @ bool | |
* * * * * * * * * value = i1 false | |
* * * * * ExpStatement::toIR(): object.d(858) | |
* * * * * * DeclarationExp::toElem: (ulong sz = this.value.tsize();) | T=void | |
* * * * * * * DtoDeclarationExp: sz | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * llvm value for decl: %9 = alloca i64, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: sz = this.value.tsize() | (ulong)(ulong = ulong) | |
* * * * * * * * * * VarExp::toElem: sz @ ulong | |
* * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CallExp::toElem: this.value.tsize() @ ulong | |
* * * * * * * * * * * DotVarExp::toElem: this.value.tsize @ const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo) | |
* * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Array) | |
* * * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_Array.value: | |
* * * * * * * * * * * * * * Value: %36 = getelementptr inbounds %object.TypeInfo_Array, %object.TypeInfo_Array* %35, i32 0, i32 2 | |
* * * * * * * * * * * * vthis: %37 = load %object.TypeInfo*, %object.TypeInfo** %36 | |
* * * * * * * * * * * * funcval: %41 = load i8*, i8** %40, align 8 | |
* * * * * * * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * * * * * * * * funcval casted: %42 = bitcast i8* %41 to i64 (%object.TypeInfo*)* | |
* * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * %43 = load %object.TypeInfo*, %object.TypeInfo** %36 | |
* * * * * * * * * * * * Function type: const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %9 = alloca i64, align 8 | |
* * * * * * * * * * * rhs: %44 = call i64 %42(%object.TypeInfo* nonnull %43) | |
* * * * * ScopeStatement::toIR(): object.d(859) | |
* * * * * * CompoundStatement::toIR(): object.d(859) | |
* * * * * * * ExpStatement::toIR(): object.d(859) | |
* * * * * * * * DeclarationExp::toElem: (ulong i = 0LU;) | T=void | |
* * * * * * * * * DtoDeclarationExp: i | |
* * * * * * * * * * VarDeclaration | |
* * * * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * * * llvm value for decl: %10 = alloca i64, align 8 | |
* * * * * * * * * * * expression initializer | |
* * * * * * * * * * * AssignExp::toElem: i = 0LU | (ulong)(ulong = ulong) | |
* * * * * * * * * * * * VarExp::toElem: i @ ulong | |
* * * * * * * * * * * * * DtoSymbolAddress ('i' of type 'ulong') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * IntegerExp::toElem: 0LU @ ulong | |
* * * * * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong | |
* * * * * * * * * * * * * * value = i64 0 | |
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * lhs: %10 = alloca i64, align 8 | |
* * * * * * * * * * * * * rhs: i64 0 | |
* * * * * * * ForStatement::toIR(): object.d(859) | |
* * * * * * * * CmpExp::toElem: i < a1.length @ bool | |
* * * * * * * * * VarExp::toElem: i @ ulong | |
* * * * * * * * * * DtoSymbolAddress ('i' of type 'ulong') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * ArrayLengthExp::toElem: a1.length @ ulong | |
* * * * * * * * * * VarExp::toElem: a1 @ void[] | |
* * * * * * * * * * * DtoSymbolAddress ('a1' of type 'void[]') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * DtoArrayLen | |
* * * * * * * * * type 1: %49 = load i64, i64* %10 | |
* * * * * * * * * type 2: %48 = load i64, i64* %47 | |
* * * * * * * * ScopeStatement::toIR(): object.d(859) | |
* * * * * * * * * IfStatement::toIR(): object.d(860) | |
* * * * * * * * * * NotExp::toElem: !this.value.equals(cast(void*)a1 + cast(long)(i * sz) * 1L, cast(void*)a2 + cast(long)(i * sz) * 1L) @ bool | |
* * * * * * * * * * * CallExp::toElem: this.value.equals(cast(void*)a1 + cast(long)(i * sz) * 1L, cast(void*)a2 + cast(long)(i * sz) * 1L) @ bool | |
* * * * * * * * * * * * DotVarExp::toElem: this.value.equals @ const bool(const(void*) p1, const(void*) p2) | |
* * * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo) | |
* * * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Array) | |
* * * * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_Array.value: | |
* * * * * * * * * * * * * * * Value: %53 = getelementptr inbounds %object.TypeInfo_Array, %object.TypeInfo_Array* %52, i32 0, i32 2 | |
* * * * * * * * * * * * * vthis: %54 = load %object.TypeInfo*, %object.TypeInfo** %53 | |
* * * * * * * * * * * * * funcval: %58 = load i8*, i8** %57, align 8 | |
* * * * * * * * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * * * * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2)) | |
* * * * * * * * * * * * * funcval casted: %59 = bitcast i8* %58 to i1 (%object.TypeInfo*, i8*, i8*)* | |
* * * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * AddExp::toElem: cast(void*)a1 + cast(long)(i * sz) * 1L @ const(void*) | |
* * * * * * * * * * * * * * * * CastExp::toElem: cast(void*)a1 @ void* | |
* * * * * * * * * * * * * * * * * VarExp::toElem: a1 @ void[] | |
* * * * * * * * * * * * * * * * * * DtoSymbolAddress ('a1' of type 'void[]') | |
* * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * Casting from 'void[]' to 'void*' | |
* * * * * * * * * * * * * * * * * * DtoCastArray | |
* * * * * * * * * * * * * * * * * * * from array or sarray | |
* * * * * * * * * * * * * * * * * * * to pointer | |
* * * * * * * * * * * * * * * * * * * DtoArrayPtr | |
* * * * * * * * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * * * * * * * CastExp::toElem: cast(long)(i * sz) @ long | |
* * * * * * * * * * * * * * * * * MulExp::toElem: i * sz @ ulong | |
* * * * * * * * * * * * * * * * * * VarExp::toElem: i @ ulong | |
* * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('i' of type 'ulong') | |
* * * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * * VarExp::toElem: sz @ ulong | |
* * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong') | |
* * * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * Casting from 'ulong' to 'long' | |
* * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * AddExp::toElem: cast(void*)a2 + cast(long)(i * sz) * 1L @ const(void*) | |
* * * * * * * * * * * * * * * * CastExp::toElem: cast(void*)a2 @ void* | |
* * * * * * * * * * * * * * * * * VarExp::toElem: a2 @ void[] | |
* * * * * * * * * * * * * * * * * * DtoSymbolAddress ('a2' of type 'void[]') | |
* * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * Casting from 'void[]' to 'void*' | |
* * * * * * * * * * * * * * * * * * DtoCastArray | |
* * * * * * * * * * * * * * * * * * * from array or sarray | |
* * * * * * * * * * * * * * * * * * * to pointer | |
* * * * * * * * * * * * * * * * * * * DtoArrayPtr | |
* * * * * * * * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * * * * * * * CastExp::toElem: cast(long)(i * sz) @ long | |
* * * * * * * * * * * * * * * * * MulExp::toElem: i * sz @ ulong | |
* * * * * * * * * * * * * * * * * * VarExp::toElem: i @ ulong | |
* * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('i' of type 'ulong') | |
* * * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * * VarExp::toElem: sz @ ulong | |
* * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong') | |
* * * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * Casting from 'ulong' to 'long' | |
* * * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * * %60 = load %object.TypeInfo*, %object.TypeInfo** %53 | |
* * * * * * * * * * * * * Function type: const bool(const(void*) p1, const(void*) p2) | |
* * * * * * * * * * ReturnStatement::toIR(): object.d(861) | |
* * * * * * * * * * * IntegerExp::toElem: false @ bool | |
* * * * * * * * * * * * IntegerExp::toConstElem: false @ bool | |
* * * * * * * * * * * * * value = i1 false | |
* * * * * * * * PostExp::toElem: i++ @ ulong | |
* * * * * * * * * VarExp::toElem: i @ ulong | |
* * * * * * * * * * DtoSymbolAddress ('i' of type 'ulong') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * IntegerExp::toElem: 1LU @ ulong | |
* * * * * * * * * * IntegerExp::toConstElem: 1LU @ ulong | |
* * * * * * * * * * * value = i64 1 | |
* * * * * ReturnStatement::toIR(): object.d(863) | |
* * * * * * IntegerExp::toElem: true @ bool | |
* * * * * * * IntegerExp::toConstElem: true @ bool | |
* * * * * * * * value = i1 true | |
* * DtoDefineFunction(object.TypeInfo_Array.compare): object.d(866) | |
* * * isMember = this is: object.TypeInfo_Array | |
* * * DtoFunctionType(const int(const(void*) p1, const(void*) p2)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo_Array*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Array.compare): object.d(866) | |
* * * * DtoDeclareFunction(object.TypeInfo_Array.compare): object.d(866) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Array | |
* * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2)) | |
* * * * * func = | |
declare i32 @_D6object14TypeInfo_Array7compareMxFxPvxQdZi(%object.TypeInfo_Array*, i8*, i8*) | |
* * * Doing function body for: compare | |
* * * DtoCreateNestedContext for object.TypeInfo_Array.compare | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Array.compare | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(866) | |
* * * * * ExpStatement::toIR(): object.d(867) | |
* * * * * * DeclarationExp::toElem: (void[] a1 = *cast(void[]*)p1;) | T=void | |
* * * * * * * DtoDeclarationExp: a1 | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = void[]) | |
* * * * * * * * * llvm value for decl: %7 = alloca { i64, i8* }, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: a1 = *cast(void[]*)p1 | (void[])(void[] = void[]) | |
* * * * * * * * * * VarExp::toElem: a1 @ void[] | |
* * * * * * * * * * * DtoSymbolAddress ('a1' of type 'void[]') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * PtrExp::toElem: *cast(void[]*)p1 @ void[] | |
* * * * * * * * * * * CastExp::toElem: cast(void[]*)p1 @ void[]* | |
* * * * * * * * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * Casting from 'const(void*)' to 'void[]*' | |
* * * * * * * * * * * * * src: %9 = load i8*, i8** %5 | |
* * * * * * * * * * * * * to type: { i64, i8* }* | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * DtoArrayAssign | |
* * * * * * * * * * * * DtoArrayPtr | |
* * * * * * * * * * * * DtoArrayLen | |
* * * * * * * * * * * * SetArray | |
* * * * * ExpStatement::toIR(): object.d(868) | |
* * * * * * DeclarationExp::toElem: (void[] a2 = *cast(void[]*)p2;) | T=void | |
* * * * * * * DtoDeclarationExp: a2 | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = void[]) | |
* * * * * * * * * llvm value for decl: %8 = alloca { i64, i8* }, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: a2 = *cast(void[]*)p2 | (void[])(void[] = void[]) | |
* * * * * * * * * * VarExp::toElem: a2 @ void[] | |
* * * * * * * * * * * DtoSymbolAddress ('a2' of type 'void[]') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * PtrExp::toElem: *cast(void[]*)p2 @ void[] | |
* * * * * * * * * * * CastExp::toElem: cast(void[]*)p2 @ void[]* | |
* * * * * * * * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * Casting from 'const(void*)' to 'void[]*' | |
* * * * * * * * * * * * * src: %18 = load i8*, i8** %6 | |
* * * * * * * * * * * * * to type: { i64, i8* }* | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * DtoArrayAssign | |
* * * * * * * * * * * * DtoArrayPtr | |
* * * * * * * * * * * * DtoArrayLen | |
* * * * * * * * * * * * SetArray | |
* * * * * ExpStatement::toIR(): object.d(869) | |
* * * * * * DeclarationExp::toElem: (ulong sz = this.value.tsize();) | T=void | |
* * * * * * * DtoDeclarationExp: sz | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * llvm value for decl: %9 = alloca i64, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: sz = this.value.tsize() | (ulong)(ulong = ulong) | |
* * * * * * * * * * VarExp::toElem: sz @ ulong | |
* * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CallExp::toElem: this.value.tsize() @ ulong | |
* * * * * * * * * * * DotVarExp::toElem: this.value.tsize @ const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo) | |
* * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Array) | |
* * * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_Array.value: | |
* * * * * * * * * * * * * * Value: %28 = getelementptr inbounds %object.TypeInfo_Array, %object.TypeInfo_Array* %27, i32 0, i32 2 | |
* * * * * * * * * * * * vthis: %29 = load %object.TypeInfo*, %object.TypeInfo** %28 | |
* * * * * * * * * * * * funcval: %33 = load i8*, i8** %32, align 8 | |
* * * * * * * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * * * * * * * * funcval casted: %34 = bitcast i8* %33 to i64 (%object.TypeInfo*)* | |
* * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * %35 = load %object.TypeInfo*, %object.TypeInfo** %28 | |
* * * * * * * * * * * * Function type: const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %9 = alloca i64, align 8 | |
* * * * * * * * * * * rhs: %36 = call i64 %34(%object.TypeInfo* nonnull %35) | |
* * * * * ExpStatement::toIR(): object.d(870) | |
* * * * * * DeclarationExp::toElem: (ulong len = a1.length;) | T=void | |
* * * * * * * DtoDeclarationExp: len | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * llvm value for decl: %10 = alloca i64, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: len = a1.length | (ulong)(ulong = ulong) | |
* * * * * * * * * * VarExp::toElem: len @ ulong | |
* * * * * * * * * * * DtoSymbolAddress ('len' of type 'ulong') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * ArrayLengthExp::toElem: a1.length @ ulong | |
* * * * * * * * * * * VarExp::toElem: a1 @ void[] | |
* * * * * * * * * * * * DtoSymbolAddress ('a1' of type 'void[]') | |
* * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * DtoArrayLen | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %10 = alloca i64, align 8 | |
* * * * * * * * * * * rhs: %39 = load i64, i64* %38 | |
* * * * * IfStatement::toIR(): object.d(872) | |
* * * * * * CmpExp::toElem: a2.length < len @ bool | |
* * * * * * * ArrayLengthExp::toElem: a2.length @ ulong | |
* * * * * * * * VarExp::toElem: a2 @ void[] | |
* * * * * * * * * DtoSymbolAddress ('a2' of type 'void[]') | |
* * * * * * * * * * a normal variable | |
* * * * * * * * DtoArrayLen | |
* * * * * * * VarExp::toElem: len @ ulong | |
* * * * * * * * DtoSymbolAddress ('len' of type 'ulong') | |
* * * * * * * * * a normal variable | |
* * * * * * * type 1: %41 = load i64, i64* %40 | |
* * * * * * * type 2: %42 = load i64, i64* %10 | |
* * * * * * ExpStatement::toIR(): object.d(873) | |
* * * * * * * AssignExp::toElem: len = a2.length | (ulong)(ulong = ulong) | |
* * * * * * * * VarExp::toElem: len @ ulong | |
* * * * * * * * * DtoSymbolAddress ('len' of type 'ulong') | |
* * * * * * * * * * a normal variable | |
* * * * * * * * ArrayLengthExp::toElem: a2.length @ ulong | |
* * * * * * * * * VarExp::toElem: a2 @ void[] | |
* * * * * * * * * * DtoSymbolAddress ('a2' of type 'void[]') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * DtoArrayLen | |
* * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * DtoAssign() | |
* * * * * * * * * lhs: %10 = alloca i64, align 8 | |
* * * * * * * * * rhs: %46 = load i64, i64* %45 | |
* * * * * ScopeStatement::toIR(): object.d(874) | |
* * * * * * CompoundStatement::toIR(): object.d(874) | |
* * * * * * * ExpStatement::toIR(): object.d(874) | |
* * * * * * * * DeclarationExp::toElem: (ulong u = 0LU;) | T=void | |
* * * * * * * * * DtoDeclarationExp: u | |
* * * * * * * * * * VarDeclaration | |
* * * * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * * * llvm value for decl: %11 = alloca i64, align 8 | |
* * * * * * * * * * * expression initializer | |
* * * * * * * * * * * AssignExp::toElem: u = 0LU | (ulong)(ulong = ulong) | |
* * * * * * * * * * * * VarExp::toElem: u @ ulong | |
* * * * * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * IntegerExp::toElem: 0LU @ ulong | |
* * * * * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong | |
* * * * * * * * * * * * * * value = i64 0 | |
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * lhs: %11 = alloca i64, align 8 | |
* * * * * * * * * * * * * rhs: i64 0 | |
* * * * * * * ForStatement::toIR(): object.d(874) | |
* * * * * * * * CmpExp::toElem: u < len @ bool | |
* * * * * * * * * VarExp::toElem: u @ ulong | |
* * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * VarExp::toElem: len @ ulong | |
* * * * * * * * * * DtoSymbolAddress ('len' of type 'ulong') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * type 1: %50 = load i64, i64* %11 | |
* * * * * * * * * type 2: %51 = load i64, i64* %10 | |
* * * * * * * * ScopeStatement::toIR(): object.d(874) | |
* * * * * * * * * CompoundStatement::toIR(): object.d(874) | |
* * * * * * * * * * ExpStatement::toIR(): object.d(875) | |
* * * * * * * * * * * DeclarationExp::toElem: (int result = this.value.compare(cast(void*)a1 + cast(long)(u * sz) * 1L, cast(void*)a2 + cast(long)(u * sz) * 1L);) | T=void | |
* * * * * * * * * * * * DtoDeclarationExp: result | |
* * * * * * * * * * * * * VarDeclaration | |
* * * * * * * * * * * * * DtoVarDeclaration(vdtype = int) | |
* * * * * * * * * * * * * * llvm value for decl: %12 = alloca i32, align 4 | |
* * * * * * * * * * * * * * expression initializer | |
* * * * * * * * * * * * * * AssignExp::toElem: result = this.value.compare(cast(void*)a1 + cast(long)(u * sz) * 1L, cast(void*)a2 + cast(long)(u * sz) * 1L) | (int)(int = int) | |
* * * * * * * * * * * * * * * VarExp::toElem: result @ int | |
* * * * * * * * * * * * * * * * DtoSymbolAddress ('result' of type 'int') | |
* * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * CallExp::toElem: this.value.compare(cast(void*)a1 + cast(long)(u * sz) * 1L, cast(void*)a2 + cast(long)(u * sz) * 1L) @ int | |
* * * * * * * * * * * * * * * * DotVarExp::toElem: this.value.compare @ const int(const(void*) p1, const(void*) p2) | |
* * * * * * * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo) | |
* * * * * * * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Array) | |
* * * * * * * * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_Array.value: | |
* * * * * * * * * * * * * * * * * * * Value: %56 = getelementptr inbounds %object.TypeInfo_Array, %object.TypeInfo_Array* %55, i32 0, i32 2 | |
* * * * * * * * * * * * * * * * * vthis: %57 = load %object.TypeInfo*, %object.TypeInfo** %56 | |
* * * * * * * * * * * * * * * * * funcval: %61 = load i8*, i8** %60, align 8 | |
* * * * * * * * * * * * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * * * * * * * * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2)) | |
* * * * * * * * * * * * * * * * * funcval casted: %62 = bitcast i8* %61 to i32 (%object.TypeInfo*, i8*, i8*)* | |
* * * * * * * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * * * * * AddExp::toElem: cast(void*)a1 + cast(long)(u * sz) * 1L @ const(void*) | |
* * * * * * * * * * * * * * * * * * * * CastExp::toElem: cast(void*)a1 @ void* | |
* * * * * * * * * * * * * * * * * * * * * VarExp::toElem: a1 @ void[] | |
* * * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('a1' of type 'void[]') | |
* * * * * * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * * * * * Casting from 'void[]' to 'void*' | |
* * * * * * * * * * * * * * * * * * * * * * DtoCastArray | |
* * * * * * * * * * * * * * * * * * * * * * * from array or sarray | |
* * * * * * * * * * * * * * * * * * * * * * * to pointer | |
* * * * * * * * * * * * * * * * * * * * * * * DtoArrayPtr | |
* * * * * * * * * * * * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * * * * * * * * * * * CastExp::toElem: cast(long)(u * sz) @ long | |
* * * * * * * * * * * * * * * * * * * * * MulExp::toElem: u * sz @ ulong | |
* * * * * * * * * * * * * * * * * * * * * * VarExp::toElem: u @ ulong | |
* * * * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong') | |
* * * * * * * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * * * * * * VarExp::toElem: sz @ ulong | |
* * * * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong') | |
* * * * * * * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * * * * * Casting from 'ulong' to 'long' | |
* * * * * * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * * * * * AddExp::toElem: cast(void*)a2 + cast(long)(u * sz) * 1L @ const(void*) | |
* * * * * * * * * * * * * * * * * * * * CastExp::toElem: cast(void*)a2 @ void* | |
* * * * * * * * * * * * * * * * * * * * * VarExp::toElem: a2 @ void[] | |
* * * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('a2' of type 'void[]') | |
* * * * * * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * * * * * Casting from 'void[]' to 'void*' | |
* * * * * * * * * * * * * * * * * * * * * * DtoCastArray | |
* * * * * * * * * * * * * * * * * * * * * * * from array or sarray | |
* * * * * * * * * * * * * * * * * * * * * * * to pointer | |
* * * * * * * * * * * * * * * * * * * * * * * DtoArrayPtr | |
* * * * * * * * * * * * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * * * * * * * * * * * CastExp::toElem: cast(long)(u * sz) @ long | |
* * * * * * * * * * * * * * * * * * * * * MulExp::toElem: u * sz @ ulong | |
* * * * * * * * * * * * * * * * * * * * * * VarExp::toElem: u @ ulong | |
* * * * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong') | |
* * * * * * * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * * * * * * VarExp::toElem: sz @ ulong | |
* * * * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong') | |
* * * * * * * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * * * * * Casting from 'ulong' to 'long' | |
* * * * * * * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * * * * * * %63 = load %object.TypeInfo*, %object.TypeInfo** %56 | |
* * * * * * * * * * * * * * * * * Function type: const int(const(void*) p1, const(void*) p2) | |
* * * * * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * * * * lhs: %12 = alloca i32, align 4 | |
* * * * * * * * * * * * * * * * rhs: %76 = call i32 %62(%object.TypeInfo* nonnull %63, i8* %75, i8* %69) | |
* * * * * * * * * * IfStatement::toIR(): object.d(876) | |
* * * * * * * * * * * VarExp::toElem: result @ int | |
* * * * * * * * * * * * DtoSymbolAddress ('result' of type 'int') | |
* * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * if conditional: %77 = load i32, i32* %12 | |
* * * * * * * * * * * Casting from 'int' to 'bool' | |
* * * * * * * * * * * ReturnStatement::toIR(): object.d(877) | |
* * * * * * * * * * * * VarExp::toElem: result @ int | |
* * * * * * * * * * * * * DtoSymbolAddress ('result' of type 'int') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * PostExp::toElem: u++ @ ulong | |
* * * * * * * * * VarExp::toElem: u @ ulong | |
* * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * IntegerExp::toElem: 1LU @ ulong | |
* * * * * * * * * * IntegerExp::toConstElem: 1LU @ ulong | |
* * * * * * * * * * * value = i64 1 | |
* * * * * ReturnStatement::toIR(): object.d(879) | |
* * * * * * MinExp::toElem: cast(int)a1.length - cast(int)a2.length @ int | |
* * * * * * * CastExp::toElem: cast(int)a1.length @ int | |
* * * * * * * * ArrayLengthExp::toElem: a1.length @ ulong | |
* * * * * * * * * VarExp::toElem: a1 @ void[] | |
* * * * * * * * * * DtoSymbolAddress ('a1' of type 'void[]') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * DtoArrayLen | |
* * * * * * * * Casting from 'ulong' to 'int' | |
* * * * * * * CastExp::toElem: cast(int)a2.length @ int | |
* * * * * * * * ArrayLengthExp::toElem: a2.length @ ulong | |
* * * * * * * * * VarExp::toElem: a2 @ void[] | |
* * * * * * * * * * DtoSymbolAddress ('a2' of type 'void[]') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * DtoArrayLen | |
* * * * * * * * Casting from 'ulong' to 'int' | |
* * DtoDefineFunction(object.TypeInfo_Array.tsize): object.d(882) | |
* * * isMember = this is: object.TypeInfo_Array | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_Array*) | |
* * * DtoResolveFunction(object.TypeInfo_Array.tsize): object.d(882) | |
* * * * DtoDeclareFunction(object.TypeInfo_Array.tsize): object.d(882) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Array | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object14TypeInfo_Array5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_Array*) | |
* * * Doing function body for: tsize | |
* * * DtoCreateNestedContext for object.TypeInfo_Array.tsize | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Array.tsize | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(883) | |
* * * * * IntegerExp::toElem: 16LU @ ulong | |
* * * * * * IntegerExp::toConstElem: 16LU @ ulong | |
* * * * * * * value = i64 16 | |
* * DtoDefineFunction(object.TypeInfo_Array.initializer): object.d(886) | |
* * * isMember = this is: object.TypeInfo_Array | |
* * * DtoFunctionType(const pure nothrow @nogc @trusted const(void)[]()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Array*) | |
* * * DtoResolveFunction(object.TypeInfo_Array.initializer): object.d(886) | |
* * * * DtoDeclareFunction(object.TypeInfo_Array.initializer): object.d(886) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Array | |
* * * * * DtoFunctionType(const pure nothrow @nogc @trusted const(void)[]()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object14TypeInfo_Array11initializerMxFNaNbNiNeZAxv(%object.TypeInfo_Array*) | |
* * * Doing function body for: initializer | |
* * * DtoCreateNestedContext for object.TypeInfo_Array.initializer | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Array.initializer | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(887) | |
* * * * * SliceExp::toElem: null[0..16] @ const(void)[] | |
* * * * * * NullExp::toElem(type=void*): null | |
* * * * * * * NullExp::toConstElem(type=void*): null | |
* * * * * * IntegerExp::toElem: 0LU @ ulong | |
* * * * * * * IntegerExp::toConstElem: 0LU @ ulong | |
* * * * * * * * value = i64 0 | |
* * * * * * IntegerExp::toElem: 16LU @ ulong | |
* * * * * * * IntegerExp::toConstElem: 16LU @ ulong | |
* * * * * * * * value = i64 16 | |
* * DtoDefineFunction(object.TypeInfo_Array.swap): object.d(890) | |
* * * isMember = this is: object.TypeInfo_Array | |
* * * DtoFunctionType(const void(void* p1, void* p2)) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (%object.TypeInfo_Array*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Array.swap): object.d(890) | |
* * * * DtoDeclareFunction(object.TypeInfo_Array.swap): object.d(890) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Array | |
* * * * * DtoFunctionType(const void(void* p1, void* p2)) | |
* * * * * func = | |
declare void @_D6object14TypeInfo_Array4swapMxFPvQcZv(%object.TypeInfo_Array*, i8*, i8*) | |
* * * Doing function body for: swap | |
* * * DtoCreateNestedContext for object.TypeInfo_Array.swap | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Array.swap | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(890) | |
* * * * * ExpStatement::toIR(): object.d(891) | |
* * * * * * DeclarationExp::toElem: (void[] tmp = *cast(void[]*)p1;) | T=void | |
* * * * * * * DtoDeclarationExp: tmp | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = void[]) | |
* * * * * * * * * llvm value for decl: %7 = alloca { i64, i8* }, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: tmp = *cast(void[]*)p1 | (void[])(void[] = void[]) | |
* * * * * * * * * * VarExp::toElem: tmp @ void[] | |
* * * * * * * * * * * DtoSymbolAddress ('tmp' of type 'void[]') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * PtrExp::toElem: *cast(void[]*)p1 @ void[] | |
* * * * * * * * * * * CastExp::toElem: cast(void[]*)p1 @ void[]* | |
* * * * * * * * * * * * VarExp::toElem: p1 @ void* | |
* * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'void*') | |
* * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * type: void* | |
* * * * * * * * * * * * Casting from 'void*' to 'void[]*' | |
* * * * * * * * * * * * * src: %9 = load i8*, i8** %5 | |
* * * * * * * * * * * * * to type: { i64, i8* }* | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * DtoArrayAssign | |
* * * * * * * * * * * * DtoArrayPtr | |
* * * * * * * * * * * * DtoArrayLen | |
* * * * * * * * * * * * SetArray | |
* * * * * ExpStatement::toIR(): object.d(892) | |
* * * * * * AssignExp::toElem: *cast(void[]*)p1 = *cast(void[]*)p2 | (void[])(void[] = void[]) | |
* * * * * * * PtrExp::toElem: *cast(void[]*)p1 @ void[] | |
* * * * * * * * CastExp::toElem: cast(void[]*)p1 @ void[]* | |
* * * * * * * * * VarExp::toElem: p1 @ void* | |
* * * * * * * * * * DtoSymbolAddress ('p1' of type 'void*') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: void* | |
* * * * * * * * * Casting from 'void*' to 'void[]*' | |
* * * * * * * * * * src: %17 = load i8*, i8** %5 | |
* * * * * * * * * * to type: { i64, i8* }* | |
* * * * * * * PtrExp::toElem: *cast(void[]*)p2 @ void[] | |
* * * * * * * * CastExp::toElem: cast(void[]*)p2 @ void[]* | |
* * * * * * * * * VarExp::toElem: p2 @ void* | |
* * * * * * * * * * DtoSymbolAddress ('p2' of type 'void*') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: void* | |
* * * * * * * * * Casting from 'void*' to 'void[]*' | |
* * * * * * * * * * src: %19 = load i8*, i8** %6 | |
* * * * * * * * * * to type: { i64, i8* }* | |
* * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * DtoAssign() | |
* * * * * * * * DtoArrayAssign | |
* * * * * * * * * DtoArrayPtr | |
* * * * * * * * * DtoArrayLen | |
* * * * * * * * * SetArray | |
* * * * * ExpStatement::toIR(): object.d(893) | |
* * * * * * AssignExp::toElem: *cast(void[]*)p2 = tmp | (void[])(void[] = void[]) | |
* * * * * * * PtrExp::toElem: *cast(void[]*)p2 @ void[] | |
* * * * * * * * CastExp::toElem: cast(void[]*)p2 @ void[]* | |
* * * * * * * * * VarExp::toElem: p2 @ void* | |
* * * * * * * * * * DtoSymbolAddress ('p2' of type 'void*') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: void* | |
* * * * * * * * * Casting from 'void*' to 'void[]*' | |
* * * * * * * * * * src: %27 = load i8*, i8** %6 | |
* * * * * * * * * * to type: { i64, i8* }* | |
* * * * * * * VarExp::toElem: tmp @ void[] | |
* * * * * * * * DtoSymbolAddress ('tmp' of type 'void[]') | |
* * * * * * * * * a normal variable | |
* * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * DtoAssign() | |
* * * * * * * * DtoArrayAssign | |
* * * * * * * * * DtoArrayPtr | |
* * * * * * * * * DtoArrayLen | |
* * * * * * * * * SetArray | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Array.value' | |
* * * DtoResolveVariable(object.TypeInfo_Array.value) | |
* * DtoDefineFunction(object.TypeInfo_Array.next): object.d(898) | |
* * * isMember = this is: object.TypeInfo_Array | |
* * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: %object.TypeInfo* (%object.TypeInfo_Array*) | |
* * * DtoResolveFunction(object.TypeInfo_Array.next): object.d(898) | |
* * * * DtoDeclareFunction(object.TypeInfo_Array.next): object.d(898) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Array | |
* * * * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)()) | |
* * * * * func = | |
declare %object.TypeInfo* @_D6object14TypeInfo_Array4nextMNgFNaNbNdNiZNgC8TypeInfo(%object.TypeInfo_Array*) | |
* * * Doing function body for: next | |
* * * DtoCreateNestedContext for object.TypeInfo_Array.next | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Array.next | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(899) | |
* * * * * DotVarExp::toElem: this.value @ inout(TypeInfo) | |
* * * * * * ThisExp::toElem: this @ inout(TypeInfo_Array) | |
* * * * * * * normal this exp | |
* * * * * * Indexing aggregate field object.TypeInfo_Array.value: | |
* * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Array, %object.TypeInfo_Array* %4, i32 0, i32 2 | |
* * DtoDefineFunction(object.TypeInfo_Array.flags): object.d(902) | |
* * * isMember = this is: object.TypeInfo_Array | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe uint()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo_Array*) | |
* * * DtoResolveFunction(object.TypeInfo_Array.flags): object.d(902) | |
* * * * DtoDeclareFunction(object.TypeInfo_Array.flags): object.d(902) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Array | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint()) | |
* * * * * func = | |
declare i32 @_D6object14TypeInfo_Array5flagsMxFNaNbNdNiNfZk(%object.TypeInfo_Array*) | |
* * * Doing function body for: flags | |
* * * DtoCreateNestedContext for object.TypeInfo_Array.flags | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Array.flags | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(903) | |
* * * * * IntegerExp::toElem: 1u @ uint | |
* * * * * * IntegerExp::toConstElem: 1u @ uint | |
* * * * * * * value = i32 1 | |
* * DtoDefineFunction(object.TypeInfo_Array.talign): object.d(906) | |
* * * isMember = this is: object.TypeInfo_Array | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_Array*) | |
* * * DtoResolveFunction(object.TypeInfo_Array.talign): object.d(906) | |
* * * * DtoDeclareFunction(object.TypeInfo_Array.talign): object.d(906) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Array | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object14TypeInfo_Array6talignMxFNaNbNdNiNfZm(%object.TypeInfo_Array*) | |
* * * Doing function body for: talign | |
* * * DtoCreateNestedContext for object.TypeInfo_Array.talign | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Array.talign | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(907) | |
* * * * * IntegerExp::toElem: 8LU @ ulong | |
* * * * * * IntegerExp::toConstElem: 8LU @ ulong | |
* * * * * * * value = i64 8 | |
* * DtoDefineFunction(object.TypeInfo_Array.argTypes): object.d(910) | |
* * * isMember = this is: object.TypeInfo_Array | |
* * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo_Array*, %object.TypeInfo**, %object.TypeInfo**) | |
* * * DtoResolveFunction(object.TypeInfo_Array.argTypes): object.d(910) | |
* * * * DtoDeclareFunction(object.TypeInfo_Array.argTypes): object.d(910) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Array | |
* * * * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2)) | |
* * * * * func = | |
declare i32 @_D6object14TypeInfo_Array8argTypesMFNbNfJC8TypeInfoJQlZi(%object.TypeInfo_Array*, %object.TypeInfo**, %object.TypeInfo**) | |
* * * Doing function body for: argTypes | |
* * * DtoCreateNestedContext for object.TypeInfo_Array.argTypes | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Array.argTypes | |
* * * CompoundStatement::toIR(): | |
* * * * ExpStatement::toIR(): | |
* * * * * AssignExp::toElem: arg1 = null | (object.TypeInfo)(object.TypeInfo = object.TypeInfo) | |
* * * * * * VarExp::toElem: arg1 @ object.TypeInfo | |
* * * * * * * DtoSymbolAddress ('arg1' of type 'object.TypeInfo') | |
* * * * * * * * function param | |
* * * * * * * * type: object.TypeInfo | |
* * * * * * NullExp::toElem(type=object.TypeInfo): null | |
* * * * * * * NullExp::toConstElem(type=object.TypeInfo): null | |
* * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * DtoAssign() | |
* * * * * * * l : %object.TypeInfo** %2 | |
* * * * * * * r : %object.TypeInfo* null | |
* * * * ExpStatement::toIR(): | |
* * * * * AssignExp::toElem: arg2 = null | (object.TypeInfo)(object.TypeInfo = object.TypeInfo) | |
* * * * * * VarExp::toElem: arg2 @ object.TypeInfo | |
* * * * * * * DtoSymbolAddress ('arg2' of type 'object.TypeInfo') | |
* * * * * * * * function param | |
* * * * * * * * type: object.TypeInfo | |
* * * * * * NullExp::toElem(type=object.TypeInfo): null | |
* * * * * * * NullExp::toConstElem(type=object.TypeInfo): null | |
* * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * DtoAssign() | |
* * * * * * * l : %object.TypeInfo** %1 | |
* * * * * * * r : %object.TypeInfo* null | |
* * * * CompoundStatement::toIR(): object.d(910) | |
* * * * * ExpStatement::toIR(): object.d(911) | |
* * * * * * AssignExp::toElem: arg1 = typeid(ulong) | (object.TypeInfo)(object.TypeInfo = object.TypeInfo) | |
* * * * * * * VarExp::toElem: arg1 @ object.TypeInfo | |
* * * * * * * * DtoSymbolAddress ('arg1' of type 'object.TypeInfo') | |
* * * * * * * * * function param | |
* * * * * * * * * type: object.TypeInfo | |
* * * * * * * Type::getTypeInfo(): ulong | |
* * * * * * * DtoSymbolAddress ('typeid(ulong)' of type 'object.TypeInfo') | |
* * * * * * * * TypeInfoDeclaration | |
* * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * DtoAssign() | |
* * * * * * * * l : %object.TypeInfo** %2 | |
* * * * * * * * r : @_D10TypeInfo_m6__initZ = external global %object.TypeInfo | |
* * * * * ExpStatement::toIR(): object.d(912) | |
* * * * * * AssignExp::toElem: arg2 = typeid(void*) | (object.TypeInfo)(object.TypeInfo = object.TypeInfo) | |
* * * * * * * VarExp::toElem: arg2 @ object.TypeInfo | |
* * * * * * * * DtoSymbolAddress ('arg2' of type 'object.TypeInfo') | |
* * * * * * * * * function param | |
* * * * * * * * * type: object.TypeInfo | |
* * * * * * * Type::getTypeInfo(): void* | |
* * * * * * * DtoSymbolAddress ('typeid(void*)' of type 'object.TypeInfo_Pointer') | |
* * * * * * * * TypeInfoDeclaration | |
* * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * DtoAssign() | |
* * * * * * * * l : %object.TypeInfo** %1 | |
* * * * * * * * r : %object.TypeInfo* bitcast (%object.TypeInfo_Pointer* @_D11TypeInfo_Pv6__initZ to %object.TypeInfo*) | |
* * * * * ReturnStatement::toIR(): object.d(913) | |
* * * * * * IntegerExp::toElem: 0 @ int | |
* * * * * * * IntegerExp::toConstElem: 0 @ int | |
* * * * * * * * value = i32 0 | |
* * Building default initializer for object.TypeInfo_Array | |
* * * Creating initializer constant for TypeInfo_Array | |
* * * * Field priority for value: 1 | |
* * * * DtoConstExpInit(targetType = object.TypeInfo, exp = null) | |
* * * * * NullExp::toConstElem(type=object.TypeInfo): null | |
* * * * final initializer: %object.TypeInfo_Array { [19 x i8*]* @_D14TypeInfo_Array6__vtblZ, i8* null, %object.TypeInfo* null } | |
* * Building vtbl initializer | |
* * DtoDefineClassInfo(TypeInfo_Array) | |
* * * Building ClassInfo.interfaces | |
* ClassDeclaration::codegen: 'object.TypeInfo_StaticArray' | |
* * DtoResolveClass(object.TypeInfo_StaticArray): object.d(917) | |
* * * Building type: object.TypeInfo_StaticArray | |
* * * * Building class type object.TypeInfo_StaticArray @ object.d(917) | |
* * * * * Instance size: 32 | |
* * * * * Field priority for value: 1 | |
* * * * * Field priority for len: 1 | |
* * * * * class type: %object.TypeInfo_StaticArray = type { [19 x i8*]*, i8*, %object.TypeInfo*, i64 } | |
* * DtoDefineFunction(object.TypeInfo_StaticArray.toString): object.d(918) | |
* * * isMember = this is: object.TypeInfo_StaticArray | |
* * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_StaticArray*) | |
* * * DtoResolveFunction(object.TypeInfo_StaticArray.toString): object.d(918) | |
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.toString): object.d(918) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_StaticArray | |
* * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object20TypeInfo_StaticArray8toStringMxFNaNbNfZAya(%object.TypeInfo_StaticArray*) | |
* * * Doing function body for: toString | |
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.toString | |
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.toString | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(919) | |
* * * * * StringExp::toElem: "UNK[UNK]" @ string | |
* * * * * * type: [9 x i8] | |
* * * * * * init: [9 x i8] c"UNK[UNK]\00" | |
* * DtoDefineFunction(object.TypeInfo_StaticArray.opEquals): object.d(922) | |
* * * isMember = this is: object.TypeInfo_StaticArray | |
* * * DtoFunctionType(bool(Object o)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i1 (%object.TypeInfo_StaticArray*, %object.Object*) | |
* * * DtoResolveFunction(object.TypeInfo_StaticArray.opEquals): object.d(922) | |
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.opEquals): object.d(922) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_StaticArray | |
* * * * * DtoFunctionType(bool(Object o)) | |
* * * * * func = | |
declare i1 @_D6object20TypeInfo_StaticArray8opEqualsMFC6ObjectZb(%object.TypeInfo_StaticArray*, %object.Object*) | |
* * * Doing function body for: opEquals | |
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.opEquals | |
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.opEquals | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(922) | |
* * * * * IfStatement::toIR(): object.d(923) | |
* * * * * * IdentityExp::toElem: this is o @ bool | |
* * * * * * * ThisExp::toElem: this @ object.Object | |
* * * * * * * * normal this exp | |
* * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * function param | |
* * * * * * * * * type: object.Object | |
* * * * * * ReturnStatement::toIR(): object.d(924) | |
* * * * * * * IntegerExp::toElem: true @ bool | |
* * * * * * * * IntegerExp::toConstElem: true @ bool | |
* * * * * * * * * value = i1 true | |
* * * * * ExpStatement::toIR(): object.d(925) | |
* * * * * * DeclarationExp::toElem: (const const(TypeInfo_StaticArray) c = cast(const(TypeInfo_StaticArray))o;) | T=void | |
* * * * * * * DtoDeclarationExp: c | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = const(TypeInfo_StaticArray)) | |
* * * * * * * * * llvm value for decl: %5 = alloca %object.TypeInfo_StaticArray*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: c = cast(const(TypeInfo_StaticArray))o | (const(TypeInfo_StaticArray))(const(TypeInfo_StaticArray) = const(TypeInfo_StaticArray)) | |
* * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_StaticArray) | |
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_StaticArray)') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CastExp::toElem: cast(const(TypeInfo_StaticArray))o @ const(TypeInfo_StaticArray) | |
* * * * * * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * type: object.Object | |
* * * * * * * * * * * Casting from 'object.Object' to 'const(TypeInfo_StaticArray)' | |
* * * * * * * * * * * * DtoCastClass(object.Object, const(TypeInfo_StaticArray)) | |
* * * * * * * * * * * * * dynamic up cast | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * l : %5 = alloca %object.TypeInfo_StaticArray*, align 8 | |
* * * * * * * * * * * r : %16 = bitcast i8* %15 to %object.TypeInfo_StaticArray* | |
* * * * * ReturnStatement::toIR(): object.d(926) | |
* * * * * * LogicalExp::toElem: c && this.len == c.len && opEquals(this.value, c.value) @ bool | |
* * * * * * * LogicalExp::toElem: c && this.len == c.len @ bool | |
* * * * * * * * VarExp::toElem: c @ const(TypeInfo_StaticArray) | |
* * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_StaticArray)') | |
* * * * * * * * * * a normal variable | |
* * * * * * * * Casting from 'const(TypeInfo_StaticArray)' to 'bool' | |
* * * * * * * * * DtoCastClass(const(TypeInfo_StaticArray), bool) | |
* * * * * * * * * * to bool | |
* * * * * * * * EqualExp::toElem: this.len == c.len @ bool | |
* * * * * * * * * DotVarExp::toElem: this.len @ ulong | |
* * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_StaticArray | |
* * * * * * * * * * * normal this exp | |
* * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.len: | |
* * * * * * * * * * * Value: %21 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %20, i32 0, i32 3 | |
* * * * * * * * * DotVarExp::toElem: c.len @ ulong | |
* * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_StaticArray) | |
* * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_StaticArray)') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.len: | |
* * * * * * * * * * * Value: %23 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %22, i32 0, i32 3 | |
* * * * * * * * * integral or pointer or interface | |
* * * * * * * * * lv: %24 = load i64, i64* %21 | |
* * * * * * * * * rv: %25 = load i64, i64* %23 | |
* * * * * * * CallExp::toElem: opEquals(this.value, c.value) @ bool | |
* * * * * * * * VarExp::toElem: opEquals @ @system bool(const(Object) lhs, const(Object) rhs) | |
* * * * * * * * * DtoSymbolAddress ('opEquals' of type '@system bool(const(Object) lhs, const(Object) rhs)') | |
* * * * * * * * * * FuncDeclaration | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * DtoArgument | |
* * * * * * * * * * * DotVarExp::toElem: this.value @ const(Object) | |
* * * * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_StaticArray | |
* * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value: | |
* * * * * * * * * * * * * Value: %31 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %30, i32 0, i32 2 | |
* * * * * * * * * * DtoArgument | |
* * * * * * * * * * * DotVarExp::toElem: c.value @ const(Object) | |
* * * * * * * * * * * * VarExp::toElem: c @ const(TypeInfo_StaticArray) | |
* * * * * * * * * * * * * DtoSymbolAddress ('c' of type 'const(TypeInfo_StaticArray)') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value: | |
* * * * * * * * * * * * * Value: %34 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %33, i32 0, i32 2 | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (0) | |
* * * * * * * * * Function type: @system bool(const(Object) lhs, const(Object) rhs) | |
* * DtoDefineFunction(object.TypeInfo_StaticArray.getHash): object.d(929) | |
* * * isMember = this is: object.TypeInfo_StaticArray | |
* * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_StaticArray*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_StaticArray.getHash): object.d(929) | |
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.getHash): object.d(929) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_StaticArray | |
* * * * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p)) | |
* * * * * func = | |
declare i64 @_D6object20TypeInfo_StaticArray7getHashMxFNbNexPvZm(%object.TypeInfo_StaticArray*, i8*) | |
* * * Doing function body for: getHash | |
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.getHash | |
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.getHash | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(930) | |
* * * * * CallExp::toElem: getArrayHash(this.value, p, this.len) @ ulong | |
* * * * * * VarExp::toElem: getArrayHash @ nothrow @trusted ulong(const(TypeInfo) element, const(void*) ptr, const(ulong) count) | |
* * * * * * * DtoSymbolAddress ('getArrayHash' of type 'nothrow @trusted ulong(const(TypeInfo) element, const(void*) ptr, const(ulong) count)') | |
* * * * * * * * FuncDeclaration | |
* * * * * * DtoCallFunction() | |
* * * * * * * Evaluating argument expressions | |
* * * * * * * * DtoArgument | |
* * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo) | |
* * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray) | |
* * * * * * * * * * * normal this exp | |
* * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value: | |
* * * * * * * * * * * Value: %7 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %6, i32 0, i32 2 | |
* * * * * * * * DtoArgument | |
* * * * * * * * * VarExp::toElem: p @ const(void*) | |
* * * * * * * * * * DtoSymbolAddress ('p' of type 'const(void*)') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: const(void*) | |
* * * * * * * * DtoArgument | |
* * * * * * * * * DotVarExp::toElem: this.len @ const(ulong) | |
* * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray) | |
* * * * * * * * * * * normal this exp | |
* * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.len: | |
* * * * * * * * * * * Value: %9 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %8, i32 0, i32 3 | |
* * * * * * * doing normal arguments | |
* * * * * * * Arguments so far: (0) | |
* * * * * * * Function type: nothrow @trusted ulong(const(TypeInfo) element, const(void*) ptr, const(ulong) count) | |
* * DtoDefineFunction(object.TypeInfo_StaticArray.equals): object.d(933) | |
* * * isMember = this is: object.TypeInfo_StaticArray | |
* * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i1 (%object.TypeInfo_StaticArray*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_StaticArray.equals): object.d(933) | |
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.equals): object.d(933) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_StaticArray | |
* * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2)) | |
* * * * * func = | |
declare i1 @_D6object20TypeInfo_StaticArray6equalsMxFxPvxQdZb(%object.TypeInfo_StaticArray*, i8*, i8*) | |
* * * Doing function body for: equals | |
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.equals | |
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.equals | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(933) | |
* * * * * ExpStatement::toIR(): object.d(934) | |
* * * * * * DeclarationExp::toElem: (ulong sz = this.value.tsize();) | T=void | |
* * * * * * * DtoDeclarationExp: sz | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * llvm value for decl: %7 = alloca i64, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: sz = this.value.tsize() | (ulong)(ulong = ulong) | |
* * * * * * * * * * VarExp::toElem: sz @ ulong | |
* * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CallExp::toElem: this.value.tsize() @ ulong | |
* * * * * * * * * * * DotVarExp::toElem: this.value.tsize @ const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo) | |
* * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray) | |
* * * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value: | |
* * * * * * * * * * * * * * Value: %10 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %9, i32 0, i32 2 | |
* * * * * * * * * * * * vthis: %11 = load %object.TypeInfo*, %object.TypeInfo** %10 | |
* * * * * * * * * * * * funcval: %15 = load i8*, i8** %14, align 8 | |
* * * * * * * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * * * * * * * * funcval casted: %16 = bitcast i8* %15 to i64 (%object.TypeInfo*)* | |
* * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * %17 = load %object.TypeInfo*, %object.TypeInfo** %10 | |
* * * * * * * * * * * * Function type: const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %7 = alloca i64, align 8 | |
* * * * * * * * * * * rhs: %18 = call i64 %16(%object.TypeInfo* nonnull %17) | |
* * * * * ScopeStatement::toIR(): object.d(936) | |
* * * * * * CompoundStatement::toIR(): object.d(936) | |
* * * * * * * ExpStatement::toIR(): object.d(936) | |
* * * * * * * * DeclarationExp::toElem: (ulong u = 0LU;) | T=void | |
* * * * * * * * * DtoDeclarationExp: u | |
* * * * * * * * * * VarDeclaration | |
* * * * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * * * llvm value for decl: %8 = alloca i64, align 8 | |
* * * * * * * * * * * expression initializer | |
* * * * * * * * * * * AssignExp::toElem: u = 0LU | (ulong)(ulong = ulong) | |
* * * * * * * * * * * * VarExp::toElem: u @ ulong | |
* * * * * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * IntegerExp::toElem: 0LU @ ulong | |
* * * * * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong | |
* * * * * * * * * * * * * * value = i64 0 | |
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * lhs: %8 = alloca i64, align 8 | |
* * * * * * * * * * * * * rhs: i64 0 | |
* * * * * * * ForStatement::toIR(): object.d(936) | |
* * * * * * * * CmpExp::toElem: u < this.len @ bool | |
* * * * * * * * * VarExp::toElem: u @ ulong | |
* * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * DotVarExp::toElem: this.len @ ulong | |
* * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray) | |
* * * * * * * * * * * normal this exp | |
* * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.len: | |
* * * * * * * * * * * Value: %22 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %21, i32 0, i32 3 | |
* * * * * * * * * type 1: %23 = load i64, i64* %8 | |
* * * * * * * * * type 2: %24 = load i64, i64* %22 | |
* * * * * * * * ScopeStatement::toIR(): object.d(936) | |
* * * * * * * * * IfStatement::toIR(): object.d(937) | |
* * * * * * * * * * NotExp::toElem: !this.value.equals(p1 + cast(long)(u * sz) * 1L, p2 + cast(long)(u * sz) * 1L) @ bool | |
* * * * * * * * * * * CallExp::toElem: this.value.equals(p1 + cast(long)(u * sz) * 1L, p2 + cast(long)(u * sz) * 1L) @ bool | |
* * * * * * * * * * * * DotVarExp::toElem: this.value.equals @ const bool(const(void*) p1, const(void*) p2) | |
* * * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo) | |
* * * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray) | |
* * * * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value: | |
* * * * * * * * * * * * * * * Value: %28 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %27, i32 0, i32 2 | |
* * * * * * * * * * * * * vthis: %29 = load %object.TypeInfo*, %object.TypeInfo** %28 | |
* * * * * * * * * * * * * funcval: %33 = load i8*, i8** %32, align 8 | |
* * * * * * * * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * * * * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2)) | |
* * * * * * * * * * * * * funcval casted: %34 = bitcast i8* %33 to i1 (%object.TypeInfo*, i8*, i8*)* | |
* * * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * AddExp::toElem: p1 + cast(long)(u * sz) * 1L @ const(void*) | |
* * * * * * * * * * * * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * * * * * * * CastExp::toElem: cast(long)(u * sz) @ long | |
* * * * * * * * * * * * * * * * * MulExp::toElem: u * sz @ ulong | |
* * * * * * * * * * * * * * * * * * VarExp::toElem: u @ ulong | |
* * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong') | |
* * * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * * VarExp::toElem: sz @ ulong | |
* * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong') | |
* * * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * Casting from 'ulong' to 'long' | |
* * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * AddExp::toElem: p2 + cast(long)(u * sz) * 1L @ const(void*) | |
* * * * * * * * * * * * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * * * * * * * CastExp::toElem: cast(long)(u * sz) @ long | |
* * * * * * * * * * * * * * * * * MulExp::toElem: u * sz @ ulong | |
* * * * * * * * * * * * * * * * * * VarExp::toElem: u @ ulong | |
* * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong') | |
* * * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * * VarExp::toElem: sz @ ulong | |
* * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong') | |
* * * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * Casting from 'ulong' to 'long' | |
* * * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * * %35 = load %object.TypeInfo*, %object.TypeInfo** %28 | |
* * * * * * * * * * * * * Function type: const bool(const(void*) p1, const(void*) p2) | |
* * * * * * * * * * ReturnStatement::toIR(): object.d(938) | |
* * * * * * * * * * * IntegerExp::toElem: false @ bool | |
* * * * * * * * * * * * IntegerExp::toConstElem: false @ bool | |
* * * * * * * * * * * * * value = i1 false | |
* * * * * * * * PostExp::toElem: u++ @ ulong | |
* * * * * * * * * VarExp::toElem: u @ ulong | |
* * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * IntegerExp::toElem: 1LU @ ulong | |
* * * * * * * * * * IntegerExp::toConstElem: 1LU @ ulong | |
* * * * * * * * * * * value = i64 1 | |
* * * * * ReturnStatement::toIR(): object.d(940) | |
* * * * * * IntegerExp::toElem: true @ bool | |
* * * * * * * IntegerExp::toConstElem: true @ bool | |
* * * * * * * * value = i1 true | |
* * DtoDefineFunction(object.TypeInfo_StaticArray.compare): object.d(943) | |
* * * isMember = this is: object.TypeInfo_StaticArray | |
* * * DtoFunctionType(const int(const(void*) p1, const(void*) p2)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo_StaticArray*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_StaticArray.compare): object.d(943) | |
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.compare): object.d(943) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_StaticArray | |
* * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2)) | |
* * * * * func = | |
declare i32 @_D6object20TypeInfo_StaticArray7compareMxFxPvxQdZi(%object.TypeInfo_StaticArray*, i8*, i8*) | |
* * * Doing function body for: compare | |
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.compare | |
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.compare | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(943) | |
* * * * * ExpStatement::toIR(): object.d(944) | |
* * * * * * DeclarationExp::toElem: (ulong sz = this.value.tsize();) | T=void | |
* * * * * * * DtoDeclarationExp: sz | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * llvm value for decl: %7 = alloca i64, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: sz = this.value.tsize() | (ulong)(ulong = ulong) | |
* * * * * * * * * * VarExp::toElem: sz @ ulong | |
* * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CallExp::toElem: this.value.tsize() @ ulong | |
* * * * * * * * * * * DotVarExp::toElem: this.value.tsize @ const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo) | |
* * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray) | |
* * * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value: | |
* * * * * * * * * * * * * * Value: %10 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %9, i32 0, i32 2 | |
* * * * * * * * * * * * vthis: %11 = load %object.TypeInfo*, %object.TypeInfo** %10 | |
* * * * * * * * * * * * funcval: %15 = load i8*, i8** %14, align 8 | |
* * * * * * * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * * * * * * * * funcval casted: %16 = bitcast i8* %15 to i64 (%object.TypeInfo*)* | |
* * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * %17 = load %object.TypeInfo*, %object.TypeInfo** %10 | |
* * * * * * * * * * * * Function type: const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %7 = alloca i64, align 8 | |
* * * * * * * * * * * rhs: %18 = call i64 %16(%object.TypeInfo* nonnull %17) | |
* * * * * ScopeStatement::toIR(): object.d(946) | |
* * * * * * CompoundStatement::toIR(): object.d(946) | |
* * * * * * * ExpStatement::toIR(): object.d(946) | |
* * * * * * * * DeclarationExp::toElem: (ulong u = 0LU;) | T=void | |
* * * * * * * * * DtoDeclarationExp: u | |
* * * * * * * * * * VarDeclaration | |
* * * * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * * * llvm value for decl: %8 = alloca i64, align 8 | |
* * * * * * * * * * * expression initializer | |
* * * * * * * * * * * AssignExp::toElem: u = 0LU | (ulong)(ulong = ulong) | |
* * * * * * * * * * * * VarExp::toElem: u @ ulong | |
* * * * * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * IntegerExp::toElem: 0LU @ ulong | |
* * * * * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong | |
* * * * * * * * * * * * * * value = i64 0 | |
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * lhs: %8 = alloca i64, align 8 | |
* * * * * * * * * * * * * rhs: i64 0 | |
* * * * * * * ForStatement::toIR(): object.d(946) | |
* * * * * * * * CmpExp::toElem: u < this.len @ bool | |
* * * * * * * * * VarExp::toElem: u @ ulong | |
* * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * DotVarExp::toElem: this.len @ ulong | |
* * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray) | |
* * * * * * * * * * * normal this exp | |
* * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.len: | |
* * * * * * * * * * * Value: %22 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %21, i32 0, i32 3 | |
* * * * * * * * * type 1: %23 = load i64, i64* %8 | |
* * * * * * * * * type 2: %24 = load i64, i64* %22 | |
* * * * * * * * ScopeStatement::toIR(): object.d(946) | |
* * * * * * * * * CompoundStatement::toIR(): object.d(946) | |
* * * * * * * * * * ExpStatement::toIR(): object.d(947) | |
* * * * * * * * * * * DeclarationExp::toElem: (int result = this.value.compare(p1 + cast(long)(u * sz) * 1L, p2 + cast(long)(u * sz) * 1L);) | T=void | |
* * * * * * * * * * * * DtoDeclarationExp: result | |
* * * * * * * * * * * * * VarDeclaration | |
* * * * * * * * * * * * * DtoVarDeclaration(vdtype = int) | |
* * * * * * * * * * * * * * llvm value for decl: %9 = alloca i32, align 4 | |
* * * * * * * * * * * * * * expression initializer | |
* * * * * * * * * * * * * * AssignExp::toElem: result = this.value.compare(p1 + cast(long)(u * sz) * 1L, p2 + cast(long)(u * sz) * 1L) | (int)(int = int) | |
* * * * * * * * * * * * * * * VarExp::toElem: result @ int | |
* * * * * * * * * * * * * * * * DtoSymbolAddress ('result' of type 'int') | |
* * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * CallExp::toElem: this.value.compare(p1 + cast(long)(u * sz) * 1L, p2 + cast(long)(u * sz) * 1L) @ int | |
* * * * * * * * * * * * * * * * DotVarExp::toElem: this.value.compare @ const int(const(void*) p1, const(void*) p2) | |
* * * * * * * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo) | |
* * * * * * * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray) | |
* * * * * * * * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value: | |
* * * * * * * * * * * * * * * * * * * Value: %29 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %28, i32 0, i32 2 | |
* * * * * * * * * * * * * * * * * vthis: %30 = load %object.TypeInfo*, %object.TypeInfo** %29 | |
* * * * * * * * * * * * * * * * * funcval: %34 = load i8*, i8** %33, align 8 | |
* * * * * * * * * * * * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * * * * * * * * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2)) | |
* * * * * * * * * * * * * * * * * funcval casted: %35 = bitcast i8* %34 to i32 (%object.TypeInfo*, i8*, i8*)* | |
* * * * * * * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * * * * * AddExp::toElem: p1 + cast(long)(u * sz) * 1L @ const(void*) | |
* * * * * * * * * * * * * * * * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * * * * * * * * * * * CastExp::toElem: cast(long)(u * sz) @ long | |
* * * * * * * * * * * * * * * * * * * * * MulExp::toElem: u * sz @ ulong | |
* * * * * * * * * * * * * * * * * * * * * * VarExp::toElem: u @ ulong | |
* * * * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong') | |
* * * * * * * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * * * * * * VarExp::toElem: sz @ ulong | |
* * * * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong') | |
* * * * * * * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * * * * * Casting from 'ulong' to 'long' | |
* * * * * * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * * * * * AddExp::toElem: p2 + cast(long)(u * sz) * 1L @ const(void*) | |
* * * * * * * * * * * * * * * * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * * * * * * * type: const(void*) | |
* * * * * * * * * * * * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * * * * * * * * * * * CastExp::toElem: cast(long)(u * sz) @ long | |
* * * * * * * * * * * * * * * * * * * * * MulExp::toElem: u * sz @ ulong | |
* * * * * * * * * * * * * * * * * * * * * * VarExp::toElem: u @ ulong | |
* * * * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong') | |
* * * * * * * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * * * * * * VarExp::toElem: sz @ ulong | |
* * * * * * * * * * * * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong') | |
* * * * * * * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * * * * * Casting from 'ulong' to 'long' | |
* * * * * * * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * * * * * * %36 = load %object.TypeInfo*, %object.TypeInfo** %29 | |
* * * * * * * * * * * * * * * * * Function type: const int(const(void*) p1, const(void*) p2) | |
* * * * * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * * * * lhs: %9 = alloca i32, align 4 | |
* * * * * * * * * * * * * * * * rhs: %47 = call i32 %35(%object.TypeInfo* nonnull %36, i8* %46, i8* %41) | |
* * * * * * * * * * IfStatement::toIR(): object.d(948) | |
* * * * * * * * * * * VarExp::toElem: result @ int | |
* * * * * * * * * * * * DtoSymbolAddress ('result' of type 'int') | |
* * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * if conditional: %48 = load i32, i32* %9 | |
* * * * * * * * * * * Casting from 'int' to 'bool' | |
* * * * * * * * * * * ReturnStatement::toIR(): object.d(949) | |
* * * * * * * * * * * * VarExp::toElem: result @ int | |
* * * * * * * * * * * * * DtoSymbolAddress ('result' of type 'int') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * PostExp::toElem: u++ @ ulong | |
* * * * * * * * * VarExp::toElem: u @ ulong | |
* * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * IntegerExp::toElem: 1LU @ ulong | |
* * * * * * * * * * IntegerExp::toConstElem: 1LU @ ulong | |
* * * * * * * * * * * value = i64 1 | |
* * * * * ReturnStatement::toIR(): object.d(951) | |
* * * * * * IntegerExp::toElem: 0 @ int | |
* * * * * * * IntegerExp::toConstElem: 0 @ int | |
* * * * * * * * value = i32 0 | |
* * DtoDefineFunction(object.TypeInfo_StaticArray.tsize): object.d(954) | |
* * * isMember = this is: object.TypeInfo_StaticArray | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_StaticArray*) | |
* * * DtoResolveFunction(object.TypeInfo_StaticArray.tsize): object.d(954) | |
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.tsize): object.d(954) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_StaticArray | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object20TypeInfo_StaticArray5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_StaticArray*) | |
* * * Doing function body for: tsize | |
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.tsize | |
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.tsize | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(955) | |
* * * * * MulExp::toElem: this.len * this.value.tsize() @ ulong | |
* * * * * * DotVarExp::toElem: this.len @ ulong | |
* * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray) | |
* * * * * * * * normal this exp | |
* * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.len: | |
* * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %4, i32 0, i32 3 | |
* * * * * * CallExp::toElem: this.value.tsize() @ ulong | |
* * * * * * * DotVarExp::toElem: this.value.tsize @ const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo) | |
* * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value: | |
* * * * * * * * * * Value: %8 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %7, i32 0, i32 2 | |
* * * * * * * * vthis: %9 = load %object.TypeInfo*, %object.TypeInfo** %8 | |
* * * * * * * * funcval: %13 = load i8*, i8** %12, align 8 | |
* * * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * * * * funcval casted: %14 = bitcast i8* %13 to i64 (%object.TypeInfo*)* | |
* * * * * * * DtoCallFunction() | |
* * * * * * * * Evaluating argument expressions | |
* * * * * * * * doing normal arguments | |
* * * * * * * * Arguments so far: (1) | |
* * * * * * * * * %15 = load %object.TypeInfo*, %object.TypeInfo** %8 | |
* * * * * * * * Function type: const pure nothrow @nogc @property @safe ulong() | |
* * DtoDefineFunction(object.TypeInfo_StaticArray.swap): object.d(958) | |
* * * isMember = this is: object.TypeInfo_StaticArray | |
* * * DtoFunctionType(const void(void* p1, void* p2)) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (%object.TypeInfo_StaticArray*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_StaticArray.swap): object.d(958) | |
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.swap): object.d(958) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_StaticArray | |
* * * * * DtoFunctionType(const void(void* p1, void* p2)) | |
* * * * * func = | |
declare void @_D6object20TypeInfo_StaticArray4swapMxFPvQcZv(%object.TypeInfo_StaticArray*, i8*, i8*) | |
* * * Doing function body for: swap | |
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.swap | |
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.swap | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(958) | |
* * * * * ExpStatement::toIR(): object.d(959) | |
* * * * * * DeclarationExp::toElem: (void* tmp = null;) | T=void | |
* * * * * * * DtoDeclarationExp: tmp | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = void*) | |
* * * * * * * * * llvm value for decl: %7 = alloca i8*, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: tmp = null | (void*)(void* = void*) | |
* * * * * * * * * * VarExp::toElem: tmp @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('tmp' of type 'void*') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * NullExp::toElem(type=void*): null | |
* * * * * * * * * * * NullExp::toConstElem(type=void*): null | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %7 = alloca i8*, align 8 | |
* * * * * * * * * * * rhs: i8* null | |
* * * * * ExpStatement::toIR(): object.d(960) | |
* * * * * * DeclarationExp::toElem: (ulong sz = this.value.tsize();) | T=void | |
* * * * * * * DtoDeclarationExp: sz | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * llvm value for decl: %8 = alloca i64, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: sz = this.value.tsize() | (ulong)(ulong = ulong) | |
* * * * * * * * * * VarExp::toElem: sz @ ulong | |
* * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CallExp::toElem: this.value.tsize() @ ulong | |
* * * * * * * * * * * DotVarExp::toElem: this.value.tsize @ const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo) | |
* * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray) | |
* * * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value: | |
* * * * * * * * * * * * * * Value: %11 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %10, i32 0, i32 2 | |
* * * * * * * * * * * * vthis: %12 = load %object.TypeInfo*, %object.TypeInfo** %11 | |
* * * * * * * * * * * * funcval: %16 = load i8*, i8** %15, align 8 | |
* * * * * * * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * * * * * * * * funcval casted: %17 = bitcast i8* %16 to i64 (%object.TypeInfo*)* | |
* * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * %18 = load %object.TypeInfo*, %object.TypeInfo** %11 | |
* * * * * * * * * * * * Function type: const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %8 = alloca i64, align 8 | |
* * * * * * * * * * * rhs: %19 = call i64 %17(%object.TypeInfo* nonnull %18) | |
* * * * * ExpStatement::toIR(): object.d(961) | |
* * * * * * DeclarationExp::toElem: (ubyte[16] buffer = cast(ubyte)0u;) | T=void | |
* * * * * * * DtoDeclarationExp: buffer | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = ubyte[16]) | |
* * * * * * * * * Building type: ubyte[16] | |
* * * * * * * * * llvm value for decl: %9 = alloca [16 x i8], align 1 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: buffer[] = cast(ubyte)0u | (ubyte[])(ubyte[] = ubyte) | |
* * * * * * * * * * VarExp::toElem: buffer @ ubyte[16] | |
* * * * * * * * * * * DtoSymbolAddress ('buffer' of type 'ubyte[16]') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * IntegerExp::toElem: cast(ubyte)0u @ ubyte | |
* * * * * * * * * * * IntegerExp::toConstElem: cast(ubyte)0u @ ubyte | |
* * * * * * * * * * * * value = i8 0 | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * DtoArrayAssign | |
* * * * * * * * * * * * DtoArrayPtr | |
* * * * * * * * * * * * DtoArrayLen | |
* * * * * * * * * * * * DtoArrayInit | |
* * * * * * * * * * DtoArrayLen | |
* * * * * * * * * * DtoArrayPtr | |
* * * * * ExpStatement::toIR(): object.d(963) | |
* * * * * * AssertExp::toElem: assert(sz < 16LU) | |
* * * * * * * CmpExp::toElem: sz < 16LU @ bool | |
* * * * * * * * VarExp::toElem: sz @ ulong | |
* * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong') | |
* * * * * * * * * * a normal variable | |
* * * * * * * * IntegerExp::toElem: 16LU @ ulong | |
* * * * * * * * * IntegerExp::toConstElem: 16LU @ ulong | |
* * * * * * * * * * value = i64 16 | |
* * * * * * * * type 1: %24 = load i64, i64* %8 | |
* * * * * * * * type 2: i64 16 | |
* * * * * ExpStatement::toIR(): object.d(964) | |
* * * * * * AssignExp::toElem: tmp = & buffer | (void*)(void* = void*) | |
* * * * * * * VarExp::toElem: tmp @ void* | |
* * * * * * * * DtoSymbolAddress ('tmp' of type 'void*') | |
* * * * * * * * * a normal variable | |
* * * * * * * SymOffExp::toElem: & buffer @ void* | |
* * * * * * * * DtoSymbolAddress ('buffer' of type 'ubyte[16]') | |
* * * * * * * * * a normal variable | |
* * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * DtoAssign() | |
* * * * * * * * lhs: %7 = alloca i8*, align 8 | |
* * * * * * * * rhs: %27 = bitcast [16 x i8]* %9 to i8* | |
* * * * * ScopeStatement::toIR(): object.d(966) | |
* * * * * * CompoundStatement::toIR(): object.d(966) | |
* * * * * * * ExpStatement::toIR(): object.d(966) | |
* * * * * * * * DeclarationExp::toElem: (ulong u = 0LU;) | T=void | |
* * * * * * * * * DtoDeclarationExp: u | |
* * * * * * * * * * VarDeclaration | |
* * * * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * * * llvm value for decl: %10 = alloca i64, align 8 | |
* * * * * * * * * * * expression initializer | |
* * * * * * * * * * * AssignExp::toElem: u = 0LU | (ulong)(ulong = ulong) | |
* * * * * * * * * * * * VarExp::toElem: u @ ulong | |
* * * * * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * IntegerExp::toElem: 0LU @ ulong | |
* * * * * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong | |
* * * * * * * * * * * * * * value = i64 0 | |
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * lhs: %10 = alloca i64, align 8 | |
* * * * * * * * * * * * * rhs: i64 0 | |
* * * * * * * ForStatement::toIR(): object.d(966) | |
* * * * * * * * CmpExp::toElem: u < this.len @ bool | |
* * * * * * * * * VarExp::toElem: u @ ulong | |
* * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * DotVarExp::toElem: this.len @ ulong | |
* * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray) | |
* * * * * * * * * * * normal this exp | |
* * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.len: | |
* * * * * * * * * * * Value: %31 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %30, i32 0, i32 3 | |
* * * * * * * * * type 1: %32 = load i64, i64* %10 | |
* * * * * * * * * type 2: %33 = load i64, i64* %31 | |
* * * * * * * * ScopeStatement::toIR(): object.d(966) | |
* * * * * * * * * CompoundStatement::toIR(): object.d(966) | |
* * * * * * * * * * ExpStatement::toIR(): object.d(967) | |
* * * * * * * * * * * DeclarationExp::toElem: (ulong o = u * sz;) | T=void | |
* * * * * * * * * * * * DtoDeclarationExp: o | |
* * * * * * * * * * * * * VarDeclaration | |
* * * * * * * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * * * * * * llvm value for decl: %11 = alloca i64, align 8 | |
* * * * * * * * * * * * * * expression initializer | |
* * * * * * * * * * * * * * AssignExp::toElem: o = u * sz | (ulong)(ulong = ulong) | |
* * * * * * * * * * * * * * * VarExp::toElem: o @ ulong | |
* * * * * * * * * * * * * * * * DtoSymbolAddress ('o' of type 'ulong') | |
* * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * MulExp::toElem: u * sz @ ulong | |
* * * * * * * * * * * * * * * * VarExp::toElem: u @ ulong | |
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong') | |
* * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * VarExp::toElem: sz @ ulong | |
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong') | |
* * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * * * * lhs: %11 = alloca i64, align 8 | |
* * * * * * * * * * * * * * * * rhs: %39 = mul i64 %37, %38 | |
* * * * * * * * * * ExpStatement::toIR(): object.d(968) | |
* * * * * * * * * * * CallExp::toElem: memcpy(tmp, p1 + cast(long)o * 1L, sz) @ ulong | |
* * * * * * * * * * * * VarExp::toElem: memcpy @ pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size) | |
* * * * * * * * * * * * * DtoSymbolAddress ('memcpy' of type 'pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size)') | |
* * * * * * * * * * * * * * FuncDeclaration | |
* * * * * * * * * * * * * * DtoFunctionType(pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size)) | |
* * * * * * * * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * * * * * * Final function type: i64 (i64, i8*, i8*) | |
* * * * * * * * * * * * * * DtoResolveFunction(utils.memcpy): utils.d(24) | |
* * * * * * * * * * * * * * * DtoDeclareFunction(utils.memcpy): utils.d(24) | |
* * * * * * * * * * * * * * * * Enter defineAsExternallyAvailable | |
* * * * * * * * * * * * * * * * * Cross-module inlining fully disabled. | |
* * * * * * * * * * * * * * * * DtoFunctionType(pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size)) | |
* * * * * * * * * * * * * * * * func = | |
declare i64 @_D5utils6memcpyFNaNbNiNePvPxvmZm(i64, i8*, i8*) | |
* * * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * VarExp::toElem: tmp @ void* | |
* * * * * * * * * * * * * * * * DtoSymbolAddress ('tmp' of type 'void*') | |
* * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * AddExp::toElem: p1 + cast(long)o * 1L @ const(void)* | |
* * * * * * * * * * * * * * * * VarExp::toElem: p1 @ void* | |
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'void*') | |
* * * * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * * * type: void* | |
* * * * * * * * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * * * * * * * CastExp::toElem: cast(long)o @ long | |
* * * * * * * * * * * * * * * * * VarExp::toElem: o @ ulong | |
* * * * * * * * * * * * * * * * * * DtoSymbolAddress ('o' of type 'ulong') | |
* * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * Casting from 'ulong' to 'long' | |
* * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * VarExp::toElem: sz @ ulong | |
* * * * * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong') | |
* * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * Building type: pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size) | |
* * * * * * * * * * * * * * DtoFunctionType(pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size)) | |
* * * * * * * * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * * * * * * Final function type: i64 (i64, i8*, i8*) | |
* * * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * * Arguments so far: (0) | |
* * * * * * * * * * * * * Function type: pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size) | |
* * * * * * * * * * ExpStatement::toIR(): object.d(969) | |
* * * * * * * * * * * CallExp::toElem: memcpy(p1 + cast(long)o * 1L, p2 + cast(long)o * 1L, sz) @ ulong | |
* * * * * * * * * * * * VarExp::toElem: memcpy @ pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size) | |
* * * * * * * * * * * * * DtoSymbolAddress ('memcpy' of type 'pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size)') | |
* * * * * * * * * * * * * * FuncDeclaration | |
* * * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * AddExp::toElem: p1 + cast(long)o * 1L @ void* | |
* * * * * * * * * * * * * * * * VarExp::toElem: p1 @ void* | |
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('p1' of type 'void*') | |
* * * * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * * * type: void* | |
* * * * * * * * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * * * * * * * CastExp::toElem: cast(long)o @ long | |
* * * * * * * * * * * * * * * * * VarExp::toElem: o @ ulong | |
* * * * * * * * * * * * * * * * * * DtoSymbolAddress ('o' of type 'ulong') | |
* * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * Casting from 'ulong' to 'long' | |
* * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * AddExp::toElem: p2 + cast(long)o * 1L @ const(void)* | |
* * * * * * * * * * * * * * * * VarExp::toElem: p2 @ void* | |
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'void*') | |
* * * * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * * * type: void* | |
* * * * * * * * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * * * * * * * CastExp::toElem: cast(long)o @ long | |
* * * * * * * * * * * * * * * * * VarExp::toElem: o @ ulong | |
* * * * * * * * * * * * * * * * * * DtoSymbolAddress ('o' of type 'ulong') | |
* * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * Casting from 'ulong' to 'long' | |
* * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * VarExp::toElem: sz @ ulong | |
* * * * * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong') | |
* * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * * Arguments so far: (0) | |
* * * * * * * * * * * * * Function type: pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size) | |
* * * * * * * * * * ExpStatement::toIR(): object.d(970) | |
* * * * * * * * * * * CallExp::toElem: memcpy(p2 + cast(long)o * 1L, tmp, sz) @ ulong | |
* * * * * * * * * * * * VarExp::toElem: memcpy @ pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size) | |
* * * * * * * * * * * * * DtoSymbolAddress ('memcpy' of type 'pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size)') | |
* * * * * * * * * * * * * * FuncDeclaration | |
* * * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * AddExp::toElem: p2 + cast(long)o * 1L @ void* | |
* * * * * * * * * * * * * * * * VarExp::toElem: p2 @ void* | |
* * * * * * * * * * * * * * * * * DtoSymbolAddress ('p2' of type 'void*') | |
* * * * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * * * type: void* | |
* * * * * * * * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * * * * * * * CastExp::toElem: cast(long)o @ long | |
* * * * * * * * * * * * * * * * * VarExp::toElem: o @ ulong | |
* * * * * * * * * * * * * * * * * * DtoSymbolAddress ('o' of type 'ulong') | |
* * * * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * * * * Casting from 'ulong' to 'long' | |
* * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * VarExp::toElem: tmp @ const(void)* | |
* * * * * * * * * * * * * * * * DtoSymbolAddress ('tmp' of type 'void*') | |
* * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * * VarExp::toElem: sz @ ulong | |
* * * * * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong') | |
* * * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * * Arguments so far: (0) | |
* * * * * * * * * * * * * Function type: pure nothrow @nogc @trusted ulong(void* dest, const(void)* src, ulong size) | |
* * * * * * * * AddAssignExp::toElem: u += sz @ ulong | |
* * * * * * * * * VarExp::toElem: u @ ulong | |
* * * * * * * * * * DtoSymbolAddress ('u' of type 'ulong') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * VarExp::toElem: sz @ ulong | |
* * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * DtoAssign() | |
* * * * * * * * * * lhs: %10 = alloca i64, align 8 | |
* * * * * * * * * * rhs: %63 = add i64 %62, %61 | |
* * DtoDefineFunction(object.TypeInfo_StaticArray.initializer): object.d(974) | |
* * * isMember = this is: object.TypeInfo_StaticArray | |
* * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_StaticArray*) | |
* * * DtoResolveFunction(object.TypeInfo_StaticArray.initializer): object.d(974) | |
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.initializer): object.d(974) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_StaticArray | |
* * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object20TypeInfo_StaticArray11initializerMxFNaNbNiNfZAxv(%object.TypeInfo_StaticArray*) | |
* * * Doing function body for: initializer | |
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.initializer | |
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.initializer | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(975) | |
* * * * * CallExp::toElem: this.value.initializer() @ const(void)[] | |
* * * * * * DotVarExp::toElem: this.value.initializer @ const pure nothrow @nogc @safe const(void)[]() | |
* * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo) | |
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray) | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value: | |
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %4, i32 0, i32 2 | |
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8 | |
* * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]()) | |
* * * * * * * funcval casted: %11 = bitcast i8* %10 to { i64, i8* } (%object.TypeInfo*)* | |
* * * * * * DtoCallFunction() | |
* * * * * * * Evaluating argument expressions | |
* * * * * * * doing normal arguments | |
* * * * * * * Arguments so far: (1) | |
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * Function type: const pure nothrow @nogc @safe const(void)[]() | |
* * DtoDefineFunction(object.TypeInfo_StaticArray.next): object.d(978) | |
* * * isMember = this is: object.TypeInfo_StaticArray | |
* * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: %object.TypeInfo* (%object.TypeInfo_StaticArray*) | |
* * * DtoResolveFunction(object.TypeInfo_StaticArray.next): object.d(978) | |
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.next): object.d(978) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_StaticArray | |
* * * * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)()) | |
* * * * * func = | |
declare %object.TypeInfo* @_D6object20TypeInfo_StaticArray4nextMNgFNaNbNdNiZNgC8TypeInfo(%object.TypeInfo_StaticArray*) | |
* * * Doing function body for: next | |
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.next | |
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.next | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(979) | |
* * * * * DotVarExp::toElem: this.value @ inout(TypeInfo) | |
* * * * * * ThisExp::toElem: this @ inout(TypeInfo_StaticArray) | |
* * * * * * * normal this exp | |
* * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value: | |
* * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %4, i32 0, i32 2 | |
* * DtoDefineFunction(object.TypeInfo_StaticArray.flags): object.d(982) | |
* * * isMember = this is: object.TypeInfo_StaticArray | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe uint()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo_StaticArray*) | |
* * * DtoResolveFunction(object.TypeInfo_StaticArray.flags): object.d(982) | |
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.flags): object.d(982) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_StaticArray | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint()) | |
* * * * * func = | |
declare i32 @_D6object20TypeInfo_StaticArray5flagsMxFNaNbNdNiNfZk(%object.TypeInfo_StaticArray*) | |
* * * Doing function body for: flags | |
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.flags | |
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.flags | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(983) | |
* * * * * CallExp::toElem: this.value.flags() @ uint | |
* * * * * * DotVarExp::toElem: this.value.flags @ const pure nothrow @nogc @property @safe uint() | |
* * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo) | |
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray) | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value: | |
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %4, i32 0, i32 2 | |
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8 | |
* * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint()) | |
* * * * * * * funcval casted: %11 = bitcast i8* %10 to i32 (%object.TypeInfo*)* | |
* * * * * * DtoCallFunction() | |
* * * * * * * Evaluating argument expressions | |
* * * * * * * doing normal arguments | |
* * * * * * * Arguments so far: (1) | |
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * Function type: const pure nothrow @nogc @property @safe uint() | |
* * DtoDefineFunction(object.TypeInfo_StaticArray.destroy): object.d(986) | |
* * * isMember = this is: object.TypeInfo_StaticArray | |
* * * DtoFunctionType(const void(void* p)) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (%object.TypeInfo_StaticArray*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_StaticArray.destroy): object.d(986) | |
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.destroy): object.d(986) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_StaticArray | |
* * * * * DtoFunctionType(const void(void* p)) | |
* * * * * func = | |
declare void @_D6object20TypeInfo_StaticArray7destroyMxFPvZv(%object.TypeInfo_StaticArray*, i8*) | |
* * * Doing function body for: destroy | |
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.destroy | |
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.destroy | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(986) | |
* * * * * ExpStatement::toIR(): object.d(987) | |
* * * * * * DeclarationExp::toElem: (ulong sz = this.value.tsize();) | T=void | |
* * * * * * * DtoDeclarationExp: sz | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * llvm value for decl: %5 = alloca i64, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: sz = this.value.tsize() | (ulong)(ulong = ulong) | |
* * * * * * * * * * VarExp::toElem: sz @ ulong | |
* * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CallExp::toElem: this.value.tsize() @ ulong | |
* * * * * * * * * * * DotVarExp::toElem: this.value.tsize @ const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo) | |
* * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray) | |
* * * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value: | |
* * * * * * * * * * * * * * Value: %8 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %7, i32 0, i32 2 | |
* * * * * * * * * * * * vthis: %9 = load %object.TypeInfo*, %object.TypeInfo** %8 | |
* * * * * * * * * * * * funcval: %13 = load i8*, i8** %12, align 8 | |
* * * * * * * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * * * * * * * * funcval casted: %14 = bitcast i8* %13 to i64 (%object.TypeInfo*)* | |
* * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * %15 = load %object.TypeInfo*, %object.TypeInfo** %8 | |
* * * * * * * * * * * * Function type: const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %5 = alloca i64, align 8 | |
* * * * * * * * * * * rhs: %16 = call i64 %14(%object.TypeInfo* nonnull %15) | |
* * * * * ExpStatement::toIR(): object.d(988) | |
* * * * * * AddAssignExp::toElem: p += cast(long)(sz * this.len) * 1L @ void* | |
* * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * function param | |
* * * * * * * * * type: void* | |
* * * * * * * Adding integer to pointer | |
* * * * * * * CastExp::toElem: cast(long)(sz * this.len) @ long | |
* * * * * * * * MulExp::toElem: sz * this.len @ ulong | |
* * * * * * * * * VarExp::toElem: sz @ ulong | |
* * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * DotVarExp::toElem: this.len @ ulong | |
* * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray) | |
* * * * * * * * * * * normal this exp | |
* * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.len: | |
* * * * * * * * * * * Value: %19 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %18, i32 0, i32 3 | |
* * * * * * * * Casting from 'ulong' to 'long' | |
* * * * * * * DtoAssign() | |
* * * * * * * * lhs: %4 = alloca i8*, align 8 | |
* * * * * * * * rhs: %23 = getelementptr i8, i8* %22, i64 %21 | |
* * * * * ScopeStatement::toIR(): object.d(989) | |
* * * * * * CompoundStatement::toIR(): object.d(989) | |
* * * * * * * ExpStatement::toIR(): object.d(989) | |
* * * * * * * * DeclarationExp::toElem: (ulong __key4 = 0LU;) | T=void | |
* * * * * * * * * DtoDeclarationExp: __key4 | |
* * * * * * * * * * VarDeclaration | |
* * * * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * * * llvm value for decl: %6 = alloca i64, align 8 | |
* * * * * * * * * * * expression initializer | |
* * * * * * * * * * * AssignExp::toElem: __key4 = 0LU | (ulong)(ulong = ulong) | |
* * * * * * * * * * * * VarExp::toElem: __key4 @ ulong | |
* * * * * * * * * * * * * DtoSymbolAddress ('__key4' of type 'ulong') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * IntegerExp::toElem: 0LU @ ulong | |
* * * * * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong | |
* * * * * * * * * * * * * * value = i64 0 | |
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * lhs: %6 = alloca i64, align 8 | |
* * * * * * * * * * * * * rhs: i64 0 | |
* * * * * * * ExpStatement::toIR(): object.d(989) | |
* * * * * * * * DeclarationExp::toElem: (ulong __limit5 = this.len;) | T=void | |
* * * * * * * * * DtoDeclarationExp: __limit5 | |
* * * * * * * * * * VarDeclaration | |
* * * * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * * * llvm value for decl: %7 = alloca i64, align 8 | |
* * * * * * * * * * * expression initializer | |
* * * * * * * * * * * AssignExp::toElem: __limit5 = this.len | (ulong)(ulong = ulong) | |
* * * * * * * * * * * * VarExp::toElem: __limit5 @ ulong | |
* * * * * * * * * * * * * DtoSymbolAddress ('__limit5' of type 'ulong') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * DotVarExp::toElem: this.len @ ulong | |
* * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray) | |
* * * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.len: | |
* * * * * * * * * * * * * * Value: %27 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %26, i32 0, i32 3 | |
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * lhs: %7 = alloca i64, align 8 | |
* * * * * * * * * * * * * rhs: %28 = load i64, i64* %27 | |
* * * * * * * ForStatement::toIR(): object.d(989) | |
* * * * * * * * CmpExp::toElem: __key4 < __limit5 @ bool | |
* * * * * * * * * VarExp::toElem: __key4 @ ulong | |
* * * * * * * * * * DtoSymbolAddress ('__key4' of type 'ulong') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * VarExp::toElem: __limit5 @ ulong | |
* * * * * * * * * * DtoSymbolAddress ('__limit5' of type 'ulong') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * type 1: %30 = load i64, i64* %6 | |
* * * * * * * * * type 2: %31 = load i64, i64* %7 | |
* * * * * * * * CompoundStatement::toIR(): object.d(989) | |
* * * * * * * * * ExpStatement::toIR(): object.d(989) | |
* * * * * * * * * * DeclarationExp::toElem: (ulong i = __key4;) | T=void | |
* * * * * * * * * * * DtoDeclarationExp: i | |
* * * * * * * * * * * * VarDeclaration | |
* * * * * * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * * * * * llvm value for decl: %8 = alloca i64, align 8 | |
* * * * * * * * * * * * * expression initializer | |
* * * * * * * * * * * * * AssignExp::toElem: i = __key4 | (ulong)(ulong = ulong) | |
* * * * * * * * * * * * * * VarExp::toElem: i @ ulong | |
* * * * * * * * * * * * * * * DtoSymbolAddress ('i' of type 'ulong') | |
* * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * VarExp::toElem: __key4 @ ulong | |
* * * * * * * * * * * * * * * DtoSymbolAddress ('__key4' of type 'ulong') | |
* * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * * * lhs: %8 = alloca i64, align 8 | |
* * * * * * * * * * * * * * * rhs: %35 = load i64, i64* %6 | |
* * * * * * * * * ExpStatement::toIR(): object.d(990) | |
* * * * * * * * * * MinAssignExp::toElem: p -= cast(long)sz * 1L @ void* | |
* * * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * type: void* | |
* * * * * * * * * * * Subtracting integer from pointer | |
* * * * * * * * * * * CastExp::toElem: cast(long)sz @ long | |
* * * * * * * * * * * * VarExp::toElem: sz @ ulong | |
* * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * Casting from 'ulong' to 'long' | |
* * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * lhs: %4 = alloca i8*, align 8 | |
* * * * * * * * * * * * rhs: %39 = getelementptr i8, i8* %37, i64 %38 | |
* * * * * * * * * ExpStatement::toIR(): object.d(991) | |
* * * * * * * * * * CallExp::toElem: this.value.destroy(p) @ void | |
* * * * * * * * * * * DotVarExp::toElem: this.value.destroy @ const void(void* p) | |
* * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo) | |
* * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray) | |
* * * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value: | |
* * * * * * * * * * * * * * Value: %41 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %40, i32 0, i32 2 | |
* * * * * * * * * * * * vthis: %42 = load %object.TypeInfo*, %object.TypeInfo** %41 | |
* * * * * * * * * * * * funcval: %46 = load i8*, i8** %45, align 8 | |
* * * * * * * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * * * * * * DtoFunctionType(const void(void* p)) | |
* * * * * * * * * * * * funcval casted: %47 = bitcast i8* %46 to void (%object.TypeInfo*, i8*)* | |
* * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * type: void* | |
* * * * * * * * * * * * Building type: const void(void* p) | |
* * * * * * * * * * * * * DtoFunctionType(const void(void* p)) | |
* * * * * * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * * * * * Final function type: void (i8*) | |
* * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * %48 = load %object.TypeInfo*, %object.TypeInfo** %41 | |
* * * * * * * * * * * * Function type: const void(void* p) | |
* * * * * * * * AddAssignExp::toElem: __key4 += 1LU @ ulong | |
* * * * * * * * * VarExp::toElem: __key4 @ ulong | |
* * * * * * * * * * DtoSymbolAddress ('__key4' of type 'ulong') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * IntegerExp::toElem: 1LU @ ulong | |
* * * * * * * * * * IntegerExp::toConstElem: 1LU @ ulong | |
* * * * * * * * * * * value = i64 1 | |
* * * * * * * * * DtoAssign() | |
* * * * * * * * * * lhs: %6 = alloca i64, align 8 | |
* * * * * * * * * * rhs: %52 = add i64 %51, 1 | |
* * DtoDefineFunction(object.TypeInfo_StaticArray.postblit): object.d(995) | |
* * * isMember = this is: object.TypeInfo_StaticArray | |
* * * DtoFunctionType(const void(void* p)) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (%object.TypeInfo_StaticArray*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_StaticArray.postblit): object.d(995) | |
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.postblit): object.d(995) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_StaticArray | |
* * * * * DtoFunctionType(const void(void* p)) | |
* * * * * func = | |
declare void @_D6object20TypeInfo_StaticArray8postblitMxFPvZv(%object.TypeInfo_StaticArray*, i8*) | |
* * * Doing function body for: postblit | |
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.postblit | |
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.postblit | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(995) | |
* * * * * ExpStatement::toIR(): object.d(996) | |
* * * * * * DeclarationExp::toElem: (ulong sz = this.value.tsize();) | T=void | |
* * * * * * * DtoDeclarationExp: sz | |
* * * * * * * * VarDeclaration | |
* * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * llvm value for decl: %5 = alloca i64, align 8 | |
* * * * * * * * * expression initializer | |
* * * * * * * * * AssignExp::toElem: sz = this.value.tsize() | (ulong)(ulong = ulong) | |
* * * * * * * * * * VarExp::toElem: sz @ ulong | |
* * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong') | |
* * * * * * * * * * * * a normal variable | |
* * * * * * * * * * CallExp::toElem: this.value.tsize() @ ulong | |
* * * * * * * * * * * DotVarExp::toElem: this.value.tsize @ const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo) | |
* * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray) | |
* * * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value: | |
* * * * * * * * * * * * * * Value: %8 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %7, i32 0, i32 2 | |
* * * * * * * * * * * * vthis: %9 = load %object.TypeInfo*, %object.TypeInfo** %8 | |
* * * * * * * * * * * * funcval: %13 = load i8*, i8** %12, align 8 | |
* * * * * * * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * * * * * * * * funcval casted: %14 = bitcast i8* %13 to i64 (%object.TypeInfo*)* | |
* * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * %15 = load %object.TypeInfo*, %object.TypeInfo** %8 | |
* * * * * * * * * * * * Function type: const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * lhs: %5 = alloca i64, align 8 | |
* * * * * * * * * * * rhs: %16 = call i64 %14(%object.TypeInfo* nonnull %15) | |
* * * * * ScopeStatement::toIR(): object.d(997) | |
* * * * * * CompoundStatement::toIR(): object.d(997) | |
* * * * * * * ExpStatement::toIR(): object.d(997) | |
* * * * * * * * DeclarationExp::toElem: (ulong __key6 = 0LU;) | T=void | |
* * * * * * * * * DtoDeclarationExp: __key6 | |
* * * * * * * * * * VarDeclaration | |
* * * * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * * * llvm value for decl: %6 = alloca i64, align 8 | |
* * * * * * * * * * * expression initializer | |
* * * * * * * * * * * AssignExp::toElem: __key6 = 0LU | (ulong)(ulong = ulong) | |
* * * * * * * * * * * * VarExp::toElem: __key6 @ ulong | |
* * * * * * * * * * * * * DtoSymbolAddress ('__key6' of type 'ulong') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * IntegerExp::toElem: 0LU @ ulong | |
* * * * * * * * * * * * * IntegerExp::toConstElem: 0LU @ ulong | |
* * * * * * * * * * * * * * value = i64 0 | |
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * lhs: %6 = alloca i64, align 8 | |
* * * * * * * * * * * * * rhs: i64 0 | |
* * * * * * * ExpStatement::toIR(): object.d(997) | |
* * * * * * * * DeclarationExp::toElem: (ulong __limit7 = this.len;) | T=void | |
* * * * * * * * * DtoDeclarationExp: __limit7 | |
* * * * * * * * * * VarDeclaration | |
* * * * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * * * llvm value for decl: %7 = alloca i64, align 8 | |
* * * * * * * * * * * expression initializer | |
* * * * * * * * * * * AssignExp::toElem: __limit7 = this.len | (ulong)(ulong = ulong) | |
* * * * * * * * * * * * VarExp::toElem: __limit7 @ ulong | |
* * * * * * * * * * * * * DtoSymbolAddress ('__limit7' of type 'ulong') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * DotVarExp::toElem: this.len @ ulong | |
* * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray) | |
* * * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.len: | |
* * * * * * * * * * * * * * Value: %20 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %19, i32 0, i32 3 | |
* * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * lhs: %7 = alloca i64, align 8 | |
* * * * * * * * * * * * * rhs: %21 = load i64, i64* %20 | |
* * * * * * * ForStatement::toIR(): object.d(997) | |
* * * * * * * * CmpExp::toElem: __key6 < __limit7 @ bool | |
* * * * * * * * * VarExp::toElem: __key6 @ ulong | |
* * * * * * * * * * DtoSymbolAddress ('__key6' of type 'ulong') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * VarExp::toElem: __limit7 @ ulong | |
* * * * * * * * * * DtoSymbolAddress ('__limit7' of type 'ulong') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * type 1: %23 = load i64, i64* %6 | |
* * * * * * * * * type 2: %24 = load i64, i64* %7 | |
* * * * * * * * CompoundStatement::toIR(): object.d(997) | |
* * * * * * * * * ExpStatement::toIR(): object.d(997) | |
* * * * * * * * * * DeclarationExp::toElem: (ulong i = __key6;) | T=void | |
* * * * * * * * * * * DtoDeclarationExp: i | |
* * * * * * * * * * * * VarDeclaration | |
* * * * * * * * * * * * DtoVarDeclaration(vdtype = ulong) | |
* * * * * * * * * * * * * llvm value for decl: %8 = alloca i64, align 8 | |
* * * * * * * * * * * * * expression initializer | |
* * * * * * * * * * * * * AssignExp::toElem: i = __key6 | (ulong)(ulong = ulong) | |
* * * * * * * * * * * * * * VarExp::toElem: i @ ulong | |
* * * * * * * * * * * * * * * DtoSymbolAddress ('i' of type 'ulong') | |
* * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * VarExp::toElem: __key6 @ ulong | |
* * * * * * * * * * * * * * * DtoSymbolAddress ('__key6' of type 'ulong') | |
* * * * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * * * performing normal assignment (rhs has lvalue elems = 1) | |
* * * * * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * * * * lhs: %8 = alloca i64, align 8 | |
* * * * * * * * * * * * * * * rhs: %28 = load i64, i64* %6 | |
* * * * * * * * * ExpStatement::toIR(): object.d(998) | |
* * * * * * * * * * CallExp::toElem: this.value.postblit(p) @ void | |
* * * * * * * * * * * DotVarExp::toElem: this.value.postblit @ const void(void* p) | |
* * * * * * * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo) | |
* * * * * * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray) | |
* * * * * * * * * * * * * * normal this exp | |
* * * * * * * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value: | |
* * * * * * * * * * * * * * Value: %30 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %29, i32 0, i32 2 | |
* * * * * * * * * * * * vthis: %31 = load %object.TypeInfo*, %object.TypeInfo** %30 | |
* * * * * * * * * * * * funcval: %35 = load i8*, i8** %34, align 8 | |
* * * * * * * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * * * * * * DtoFunctionType(const void(void* p)) | |
* * * * * * * * * * * * funcval casted: %36 = bitcast i8* %35 to void (%object.TypeInfo*, i8*)* | |
* * * * * * * * * * * DtoCallFunction() | |
* * * * * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * * * * DtoArgument | |
* * * * * * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * * * type: void* | |
* * * * * * * * * * * * Building type: const void(void* p) | |
* * * * * * * * * * * * * DtoFunctionType(const void(void* p)) | |
* * * * * * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * * * * * Final function type: void (i8*) | |
* * * * * * * * * * * * doing normal arguments | |
* * * * * * * * * * * * Arguments so far: (1) | |
* * * * * * * * * * * * * %37 = load %object.TypeInfo*, %object.TypeInfo** %30 | |
* * * * * * * * * * * * Function type: const void(void* p) | |
* * * * * * * * * ExpStatement::toIR(): object.d(999) | |
* * * * * * * * * * AddAssignExp::toElem: p += cast(long)sz * 1L @ void* | |
* * * * * * * * * * * VarExp::toElem: p @ void* | |
* * * * * * * * * * * * DtoSymbolAddress ('p' of type 'void*') | |
* * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * type: void* | |
* * * * * * * * * * * Adding integer to pointer | |
* * * * * * * * * * * CastExp::toElem: cast(long)sz @ long | |
* * * * * * * * * * * * VarExp::toElem: sz @ ulong | |
* * * * * * * * * * * * * DtoSymbolAddress ('sz' of type 'ulong') | |
* * * * * * * * * * * * * * a normal variable | |
* * * * * * * * * * * * Casting from 'ulong' to 'long' | |
* * * * * * * * * * * DtoAssign() | |
* * * * * * * * * * * * lhs: %4 = alloca i8*, align 8 | |
* * * * * * * * * * * * rhs: %41 = getelementptr i8, i8* %40, i64 %39 | |
* * * * * * * * AddAssignExp::toElem: __key6 += 1LU @ ulong | |
* * * * * * * * * VarExp::toElem: __key6 @ ulong | |
* * * * * * * * * * DtoSymbolAddress ('__key6' of type 'ulong') | |
* * * * * * * * * * * a normal variable | |
* * * * * * * * * IntegerExp::toElem: 1LU @ ulong | |
* * * * * * * * * * IntegerExp::toConstElem: 1LU @ ulong | |
* * * * * * * * * * * value = i64 1 | |
* * * * * * * * * DtoAssign() | |
* * * * * * * * * * lhs: %6 = alloca i64, align 8 | |
* * * * * * * * * * rhs: %44 = add i64 %43, 1 | |
* * VarDeclaration::codegen(): 'object.TypeInfo_StaticArray.value' | |
* * * DtoResolveVariable(object.TypeInfo_StaticArray.value) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_StaticArray.len' | |
* * * DtoResolveVariable(object.TypeInfo_StaticArray.len) | |
* * DtoDefineFunction(object.TypeInfo_StaticArray.talign): object.d(1006) | |
* * * isMember = this is: object.TypeInfo_StaticArray | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_StaticArray*) | |
* * * DtoResolveFunction(object.TypeInfo_StaticArray.talign): object.d(1006) | |
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.talign): object.d(1006) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_StaticArray | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object20TypeInfo_StaticArray6talignMxFNaNbNdNiNfZm(%object.TypeInfo_StaticArray*) | |
* * * Doing function body for: talign | |
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.talign | |
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.talign | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(1007) | |
* * * * * CallExp::toElem: this.value.talign() @ ulong | |
* * * * * * DotVarExp::toElem: this.value.talign @ const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * DotVarExp::toElem: this.value @ const(TypeInfo) | |
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_StaticArray) | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_StaticArray.value: | |
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_StaticArray, %object.TypeInfo_StaticArray* %4, i32 0, i32 2 | |
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8 | |
* * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * * * funcval casted: %11 = bitcast i8* %10 to i64 (%object.TypeInfo*)* | |
* * * * * * DtoCallFunction() | |
* * * * * * * Evaluating argument expressions | |
* * * * * * * doing normal arguments | |
* * * * * * * Arguments so far: (1) | |
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * Function type: const pure nothrow @nogc @property @safe ulong() | |
* * DtoDefineFunction(object.TypeInfo_StaticArray.argTypes): object.d(1010) | |
* * * isMember = this is: object.TypeInfo_StaticArray | |
* * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo_StaticArray*, %object.TypeInfo**, %object.TypeInfo**) | |
* * * DtoResolveFunction(object.TypeInfo_StaticArray.argTypes): object.d(1010) | |
* * * * DtoDeclareFunction(object.TypeInfo_StaticArray.argTypes): object.d(1010) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_StaticArray | |
* * * * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2)) | |
* * * * * func = | |
declare i32 @_D6object20TypeInfo_StaticArray8argTypesMFNbNfJC8TypeInfoJQlZi(%object.TypeInfo_StaticArray*, %object.TypeInfo**, %object.TypeInfo**) | |
* * * Doing function body for: argTypes | |
* * * DtoCreateNestedContext for object.TypeInfo_StaticArray.argTypes | |
* * * * DtoCreateNestedContextType for object.TypeInfo_StaticArray.argTypes | |
* * * CompoundStatement::toIR(): | |
* * * * ExpStatement::toIR(): | |
* * * * * AssignExp::toElem: arg1 = null | (object.TypeInfo)(object.TypeInfo = object.TypeInfo) | |
* * * * * * VarExp::toElem: arg1 @ object.TypeInfo | |
* * * * * * * DtoSymbolAddress ('arg1' of type 'object.TypeInfo') | |
* * * * * * * * function param | |
* * * * * * * * type: object.TypeInfo | |
* * * * * * NullExp::toElem(type=object.TypeInfo): null | |
* * * * * * * NullExp::toConstElem(type=object.TypeInfo): null | |
* * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * DtoAssign() | |
* * * * * * * l : %object.TypeInfo** %2 | |
* * * * * * * r : %object.TypeInfo* null | |
* * * * ExpStatement::toIR(): | |
* * * * * AssignExp::toElem: arg2 = null | (object.TypeInfo)(object.TypeInfo = object.TypeInfo) | |
* * * * * * VarExp::toElem: arg2 @ object.TypeInfo | |
* * * * * * * DtoSymbolAddress ('arg2' of type 'object.TypeInfo') | |
* * * * * * * * function param | |
* * * * * * * * type: object.TypeInfo | |
* * * * * * NullExp::toElem(type=object.TypeInfo): null | |
* * * * * * * NullExp::toConstElem(type=object.TypeInfo): null | |
* * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * DtoAssign() | |
* * * * * * * l : %object.TypeInfo** %1 | |
* * * * * * * r : %object.TypeInfo* null | |
* * * * CompoundStatement::toIR(): object.d(1010) | |
* * * * * ExpStatement::toIR(): object.d(1011) | |
* * * * * * AssignExp::toElem: arg1 = typeid(void*) | (object.TypeInfo)(object.TypeInfo = object.TypeInfo) | |
* * * * * * * VarExp::toElem: arg1 @ object.TypeInfo | |
* * * * * * * * DtoSymbolAddress ('arg1' of type 'object.TypeInfo') | |
* * * * * * * * * function param | |
* * * * * * * * * type: object.TypeInfo | |
* * * * * * * Type::getTypeInfo(): void* | |
* * * * * * * DtoSymbolAddress ('typeid(void*)' of type 'object.TypeInfo_Pointer') | |
* * * * * * * * TypeInfoDeclaration | |
* * * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * * DtoAssign() | |
* * * * * * * * l : %object.TypeInfo** %2 | |
* * * * * * * * r : %object.TypeInfo* bitcast (%object.TypeInfo_Pointer* @_D11TypeInfo_Pv6__initZ to %object.TypeInfo*) | |
* * * * * ReturnStatement::toIR(): object.d(1012) | |
* * * * * * IntegerExp::toElem: 0 @ int | |
* * * * * * * IntegerExp::toConstElem: 0 @ int | |
* * * * * * * * value = i32 0 | |
* * Building default initializer for object.TypeInfo_StaticArray | |
* * * Creating initializer constant for TypeInfo_StaticArray | |
* * * * Field priority for value: 1 | |
* * * * Field priority for len: 1 | |
* * * * DtoConstExpInit(targetType = object.TypeInfo, exp = null) | |
* * * * * NullExp::toConstElem(type=object.TypeInfo): null | |
* * * * DtoConstExpInit(targetType = ulong, exp = 0LU) | |
* * * * * IntegerExp::toConstElem: 0LU @ ulong | |
* * * * * * value = i64 0 | |
* * * * final initializer: %object.TypeInfo_StaticArray { [19 x i8*]* @_D20TypeInfo_StaticArray6__vtblZ, i8* null, %object.TypeInfo* null, i64 0 } | |
* * Building vtbl initializer | |
* * DtoDefineClassInfo(TypeInfo_StaticArray) | |
* * * Building ClassInfo.interfaces | |
* ClassDeclaration::codegen: 'object.TypeInfo_Const' | |
* * DtoDefineFunction(object.TypeInfo_Const.toString): object.d(1017) | |
* * * isMember = this is: object.TypeInfo_Const | |
* * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Const*) | |
* * * DtoResolveFunction(object.TypeInfo_Const.toString): object.d(1017) | |
* * * * DtoDeclareFunction(object.TypeInfo_Const.toString): object.d(1017) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Const | |
* * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object14TypeInfo_Const8toStringMxFNaNbNfZAya(%object.TypeInfo_Const*) | |
* * * Doing function body for: toString | |
* * * DtoCreateNestedContext for object.TypeInfo_Const.toString | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Const.toString | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(1018) | |
* * * * * StringExp::toElem: "Const-Something" @ string | |
* * * * * * type: [16 x i8] | |
* * * * * * init: [16 x i8] c"Const-Something\00" | |
* * DtoDefineFunction(object.TypeInfo_Const.opEquals): object.d(1021) | |
* * * isMember = this is: object.TypeInfo_Const | |
* * * DtoFunctionType(bool(Object o)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i1 (%object.TypeInfo_Const*, %object.Object*) | |
* * * DtoResolveFunction(object.TypeInfo_Const.opEquals): object.d(1021) | |
* * * * DtoDeclareFunction(object.TypeInfo_Const.opEquals): object.d(1021) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Const | |
* * * * * DtoFunctionType(bool(Object o)) | |
* * * * * func = | |
declare i1 @_D6object14TypeInfo_Const8opEqualsMFC6ObjectZb(%object.TypeInfo_Const*, %object.Object*) | |
* * * Doing function body for: opEquals | |
* * * DtoCreateNestedContext for object.TypeInfo_Const.opEquals | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Const.opEquals | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(1021) | |
* * * * * IfStatement::toIR(): object.d(1022) | |
* * * * * * IdentityExp::toElem: this is o @ bool | |
* * * * * * * ThisExp::toElem: this @ object.Object | |
* * * * * * * * normal this exp | |
* * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * function param | |
* * * * * * * * * type: object.Object | |
* * * * * * ReturnStatement::toIR(): object.d(1023) | |
* * * * * * * IntegerExp::toElem: true @ bool | |
* * * * * * * * IntegerExp::toConstElem: true @ bool | |
* * * * * * * * * value = i1 true | |
* * * * * IfStatement::toIR(): object.d(1024) | |
* * * * * * NotExp::toElem: !opEquals(typeid(this), typeid(o)) @ bool | |
* * * * * * * CallExp::toElem: opEquals(typeid(this), typeid(o)) @ bool | |
* * * * * * * * VarExp::toElem: opEquals @ @system bool(Object lhs, Object rhs) | |
* * * * * * * * * DtoSymbolAddress ('opEquals' of type '@system bool(Object lhs, Object rhs)') | |
* * * * * * * * * * FuncDeclaration | |
* * * * * * * * DtoCallFunction() | |
* * * * * * * * * Evaluating argument expressions | |
* * * * * * * * * * DtoArgument | |
* * * * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Const | |
* * * * * * * * * * * * normal this exp | |
* * * * * * * * * * DtoArgument | |
* * * * * * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * type: object.Object | |
* * * * * * * * * doing normal arguments | |
* * * * * * * * * Arguments so far: (0) | |
* * * * * * * * * Function type: @system bool(Object lhs, Object rhs) | |
* * * * * * * * * arg: %23 = load %object.TypeInfo_Class*, %object.TypeInfo_Class** %17 | |
* * * * * * * * * expects: %object.Object* | |
* * * * * * * * * arg: %25 = load %object.TypeInfo_Class*, %object.TypeInfo_Class** %22 | |
* * * * * * * * * expects: %object.Object* | |
* * * * * * ReturnStatement::toIR(): object.d(1025) | |
* * * * * * * IntegerExp::toElem: false @ bool | |
* * * * * * * * IntegerExp::toConstElem: false @ bool | |
* * * * * * * * * value = i1 false | |
* * * * * ReturnStatement::toIR(): object.d(1026) | |
* * * * * * CallExp::toElem: this.base.opEquals((cast(TypeInfo_Const)o).base) @ bool | |
* * * * * * * DotVarExp::toElem: this.base.opEquals @ bool(Object o) | |
* * * * * * * * DotVarExp::toElem: this.base @ object.TypeInfo | |
* * * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Const | |
* * * * * * * * * * normal this exp | |
* * * * * * * * * Indexing aggregate field object.TypeInfo_Const.base: | |
* * * * * * * * * * Value: %33 = getelementptr inbounds %object.TypeInfo_Const, %object.TypeInfo_Const* %32, i32 0, i32 2 | |
* * * * * * * * vthis: %34 = load %object.TypeInfo*, %object.TypeInfo** %33 | |
* * * * * * * * funcval: %38 = load i8*, i8** %37, align 8 | |
* * * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * * DtoFunctionType(bool(Object o)) | |
* * * * * * * * funcval casted: %39 = bitcast i8* %38 to i1 (%object.TypeInfo*, %object.Object*)* | |
* * * * * * * DtoCallFunction() | |
* * * * * * * * Evaluating argument expressions | |
* * * * * * * * * DtoArgument | |
* * * * * * * * * * DotVarExp::toElem: (cast(TypeInfo_Const)o).base @ object.Object | |
* * * * * * * * * * * CastExp::toElem: cast(TypeInfo_Const)o @ object.TypeInfo_Const | |
* * * * * * * * * * * * VarExp::toElem: o @ object.Object | |
* * * * * * * * * * * * * DtoSymbolAddress ('o' of type 'object.Object') | |
* * * * * * * * * * * * * * function param | |
* * * * * * * * * * * * * * type: object.Object | |
* * * * * * * * * * * * Casting from 'object.Object' to 'object.TypeInfo_Const' | |
* * * * * * * * * * * * * DtoCastClass(object.Object, object.TypeInfo_Const) | |
* * * * * * * * * * * * * * dynamic up cast | |
* * * * * * * * * * * Indexing aggregate field object.TypeInfo_Const.base: | |
* * * * * * * * * * * * Value: %44 = getelementptr inbounds %object.TypeInfo_Const, %object.TypeInfo_Const* %43, i32 0, i32 2 | |
* * * * * * * * Building type: bool(Object o) | |
* * * * * * * * * DtoFunctionType(bool(Object o)) | |
* * * * * * * * * * x86-64 ABI: Transforming return type | |
* * * * * * * * * * x86-64 ABI: Transforming argument types | |
* * * * * * * * * * Final function type: i1 (%object.Object*) | |
* * * * * * * * doing normal arguments | |
* * * * * * * * Arguments so far: (1) | |
* * * * * * * * * %40 = load %object.TypeInfo*, %object.TypeInfo** %33 | |
* * * * * * * * Function type: bool(Object o) | |
* * DtoDefineFunction(object.TypeInfo_Const.getHash): object.d(1029) | |
* * * Doing function body for: getHash | |
* * * DtoCreateNestedContext for object.TypeInfo_Const.getHash | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Const.getHash | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(1030) | |
* * * * * CallExp::toElem: this.base.getHash(p) @ ulong | |
* * * * * * DotVarExp::toElem: this.base.getHash @ const nothrow @trusted ulong(const(void*) p) | |
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo) | |
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Const) | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_Const.base: | |
* * * * * * * * * Value: %7 = getelementptr inbounds %object.TypeInfo_Const, %object.TypeInfo_Const* %6, i32 0, i32 2 | |
* * * * * * * vthis: %8 = load %object.TypeInfo*, %object.TypeInfo** %7 | |
* * * * * * * funcval: %12 = load i8*, i8** %11, align 8 | |
* * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * DtoFunctionType(const nothrow @trusted ulong(const(void*) p)) | |
* * * * * * * funcval casted: %13 = bitcast i8* %12 to i64 (%object.TypeInfo*, i8*)* | |
* * * * * * DtoCallFunction() | |
* * * * * * * Evaluating argument expressions | |
* * * * * * * * DtoArgument | |
* * * * * * * * * VarExp::toElem: p @ const(void*) | |
* * * * * * * * * * DtoSymbolAddress ('p' of type 'const(void*)') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: const(void*) | |
* * * * * * * doing normal arguments | |
* * * * * * * Arguments so far: (1) | |
* * * * * * * * %14 = load %object.TypeInfo*, %object.TypeInfo** %7 | |
* * * * * * * Function type: const nothrow @trusted ulong(const(void*) p) | |
* * DtoDefineFunction(object.TypeInfo_Const.equals): object.d(1033) | |
* * * isMember = this is: object.TypeInfo_Const | |
* * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i1 (%object.TypeInfo_Const*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Const.equals): object.d(1033) | |
* * * * DtoDeclareFunction(object.TypeInfo_Const.equals): object.d(1033) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Const | |
* * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2)) | |
* * * * * func = | |
declare i1 @_D6object14TypeInfo_Const6equalsMxFxPvxQdZb(%object.TypeInfo_Const*, i8*, i8*) | |
* * * Doing function body for: equals | |
* * * DtoCreateNestedContext for object.TypeInfo_Const.equals | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Const.equals | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(1034) | |
* * * * * CallExp::toElem: this.base.equals(p1, p2) @ bool | |
* * * * * * DotVarExp::toElem: this.base.equals @ const bool(const(void*) p1, const(void*) p2) | |
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo) | |
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Const) | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_Const.base: | |
* * * * * * * * * Value: %9 = getelementptr inbounds %object.TypeInfo_Const, %object.TypeInfo_Const* %8, i32 0, i32 2 | |
* * * * * * * vthis: %10 = load %object.TypeInfo*, %object.TypeInfo** %9 | |
* * * * * * * funcval: %14 = load i8*, i8** %13, align 8 | |
* * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * DtoFunctionType(const bool(const(void*) p1, const(void*) p2)) | |
* * * * * * * funcval casted: %15 = bitcast i8* %14 to i1 (%object.TypeInfo*, i8*, i8*)* | |
* * * * * * DtoCallFunction() | |
* * * * * * * Evaluating argument expressions | |
* * * * * * * * DtoArgument | |
* * * * * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: const(void*) | |
* * * * * * * * DtoArgument | |
* * * * * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: const(void*) | |
* * * * * * * doing normal arguments | |
* * * * * * * Arguments so far: (1) | |
* * * * * * * * %16 = load %object.TypeInfo*, %object.TypeInfo** %9 | |
* * * * * * * Function type: const bool(const(void*) p1, const(void*) p2) | |
* * DtoDefineFunction(object.TypeInfo_Const.compare): object.d(1037) | |
* * * isMember = this is: object.TypeInfo_Const | |
* * * DtoFunctionType(const int(const(void*) p1, const(void*) p2)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo_Const*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Const.compare): object.d(1037) | |
* * * * DtoDeclareFunction(object.TypeInfo_Const.compare): object.d(1037) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Const | |
* * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2)) | |
* * * * * func = | |
declare i32 @_D6object14TypeInfo_Const7compareMxFxPvxQdZi(%object.TypeInfo_Const*, i8*, i8*) | |
* * * Doing function body for: compare | |
* * * DtoCreateNestedContext for object.TypeInfo_Const.compare | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Const.compare | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(1038) | |
* * * * * CallExp::toElem: this.base.compare(p1, p2) @ int | |
* * * * * * DotVarExp::toElem: this.base.compare @ const int(const(void*) p1, const(void*) p2) | |
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo) | |
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Const) | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_Const.base: | |
* * * * * * * * * Value: %9 = getelementptr inbounds %object.TypeInfo_Const, %object.TypeInfo_Const* %8, i32 0, i32 2 | |
* * * * * * * vthis: %10 = load %object.TypeInfo*, %object.TypeInfo** %9 | |
* * * * * * * funcval: %14 = load i8*, i8** %13, align 8 | |
* * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * DtoFunctionType(const int(const(void*) p1, const(void*) p2)) | |
* * * * * * * funcval casted: %15 = bitcast i8* %14 to i32 (%object.TypeInfo*, i8*, i8*)* | |
* * * * * * DtoCallFunction() | |
* * * * * * * Evaluating argument expressions | |
* * * * * * * * DtoArgument | |
* * * * * * * * * VarExp::toElem: p1 @ const(void*) | |
* * * * * * * * * * DtoSymbolAddress ('p1' of type 'const(void*)') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: const(void*) | |
* * * * * * * * DtoArgument | |
* * * * * * * * * VarExp::toElem: p2 @ const(void*) | |
* * * * * * * * * * DtoSymbolAddress ('p2' of type 'const(void*)') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: const(void*) | |
* * * * * * * doing normal arguments | |
* * * * * * * Arguments so far: (1) | |
* * * * * * * * %16 = load %object.TypeInfo*, %object.TypeInfo** %9 | |
* * * * * * * Function type: const int(const(void*) p1, const(void*) p2) | |
* * DtoDefineFunction(object.TypeInfo_Const.tsize): object.d(1041) | |
* * * isMember = this is: object.TypeInfo_Const | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_Const*) | |
* * * DtoResolveFunction(object.TypeInfo_Const.tsize): object.d(1041) | |
* * * * DtoDeclareFunction(object.TypeInfo_Const.tsize): object.d(1041) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Const | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object14TypeInfo_Const5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_Const*) | |
* * * Doing function body for: tsize | |
* * * DtoCreateNestedContext for object.TypeInfo_Const.tsize | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Const.tsize | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(1042) | |
* * * * * CallExp::toElem: this.base.tsize() @ ulong | |
* * * * * * DotVarExp::toElem: this.base.tsize @ const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo) | |
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Const) | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_Const.base: | |
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Const, %object.TypeInfo_Const* %4, i32 0, i32 2 | |
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8 | |
* * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * * * funcval casted: %11 = bitcast i8* %10 to i64 (%object.TypeInfo*)* | |
* * * * * * DtoCallFunction() | |
* * * * * * * Evaluating argument expressions | |
* * * * * * * doing normal arguments | |
* * * * * * * Arguments so far: (1) | |
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * Function type: const pure nothrow @nogc @property @safe ulong() | |
* * DtoDefineFunction(object.TypeInfo_Const.swap): object.d(1045) | |
* * * isMember = this is: object.TypeInfo_Const | |
* * * DtoFunctionType(const void(void* p1, void* p2)) | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: void (%object.TypeInfo_Const*, i8*, i8*) | |
* * * DtoResolveFunction(object.TypeInfo_Const.swap): object.d(1045) | |
* * * * DtoDeclareFunction(object.TypeInfo_Const.swap): object.d(1045) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Const | |
* * * * * DtoFunctionType(const void(void* p1, void* p2)) | |
* * * * * func = | |
declare void @_D6object14TypeInfo_Const4swapMxFPvQcZv(%object.TypeInfo_Const*, i8*, i8*) | |
* * * Doing function body for: swap | |
* * * DtoCreateNestedContext for object.TypeInfo_Const.swap | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Const.swap | |
* * * CompoundStatement::toIR(): | |
* * * * CompoundStatement::toIR(): object.d(1045) | |
* * * * * ExpStatement::toIR(): object.d(1046) | |
* * * * * * CallExp::toElem: this.base.swap(p1, p2) @ void | |
* * * * * * * DotVarExp::toElem: this.base.swap @ const void(void* p1, void* p2) | |
* * * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo) | |
* * * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Const) | |
* * * * * * * * * * normal this exp | |
* * * * * * * * * Indexing aggregate field object.TypeInfo_Const.base: | |
* * * * * * * * * * Value: %9 = getelementptr inbounds %object.TypeInfo_Const, %object.TypeInfo_Const* %8, i32 0, i32 2 | |
* * * * * * * * vthis: %10 = load %object.TypeInfo*, %object.TypeInfo** %9 | |
* * * * * * * * funcval: %14 = load i8*, i8** %13, align 8 | |
* * * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * * DtoFunctionType(const void(void* p1, void* p2)) | |
* * * * * * * * funcval casted: %15 = bitcast i8* %14 to void (%object.TypeInfo*, i8*, i8*)* | |
* * * * * * * DtoCallFunction() | |
* * * * * * * * Evaluating argument expressions | |
* * * * * * * * * DtoArgument | |
* * * * * * * * * * VarExp::toElem: p1 @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p1' of type 'void*') | |
* * * * * * * * * * * * function param | |
* * * * * * * * * * * * type: void* | |
* * * * * * * * * DtoArgument | |
* * * * * * * * * * VarExp::toElem: p2 @ void* | |
* * * * * * * * * * * DtoSymbolAddress ('p2' of type 'void*') | |
* * * * * * * * * * * * function param | |
* * * * * * * * * * * * type: void* | |
* * * * * * * * doing normal arguments | |
* * * * * * * * Arguments so far: (1) | |
* * * * * * * * * %16 = load %object.TypeInfo*, %object.TypeInfo** %9 | |
* * * * * * * * Function type: const void(void* p1, void* p2) | |
* * * * * ReturnStatement::toIR(): object.d(1046) | |
* * DtoDefineFunction(object.TypeInfo_Const.next): object.d(1049) | |
* * * isMember = this is: object.TypeInfo_Const | |
* * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: %object.TypeInfo* (%object.TypeInfo_Const*) | |
* * * DtoResolveFunction(object.TypeInfo_Const.next): object.d(1049) | |
* * * * DtoDeclareFunction(object.TypeInfo_Const.next): object.d(1049) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Const | |
* * * * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)()) | |
* * * * * func = | |
declare %object.TypeInfo* @_D6object14TypeInfo_Const4nextMNgFNaNbNdNiZNgC8TypeInfo(%object.TypeInfo_Const*) | |
* * * Doing function body for: next | |
* * * DtoCreateNestedContext for object.TypeInfo_Const.next | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Const.next | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(1050) | |
* * * * * CallExp::toElem: this.base.next() @ inout(TypeInfo) | |
* * * * * * DotVarExp::toElem: this.base.next @ inout pure nothrow @nogc @property inout(TypeInfo)() | |
* * * * * * * DotVarExp::toElem: this.base @ inout(TypeInfo) | |
* * * * * * * * ThisExp::toElem: this @ inout(TypeInfo_Const) | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_Const.base: | |
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Const, %object.TypeInfo_Const* %4, i32 0, i32 2 | |
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8 | |
* * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * DtoFunctionType(inout pure nothrow @nogc @property inout(TypeInfo)()) | |
* * * * * * * funcval casted: %11 = bitcast i8* %10 to %object.TypeInfo* (%object.TypeInfo*)* | |
* * * * * * DtoCallFunction() | |
* * * * * * * Evaluating argument expressions | |
* * * * * * * doing normal arguments | |
* * * * * * * Arguments so far: (1) | |
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * Function type: inout pure nothrow @nogc @property inout(TypeInfo)() | |
* * DtoDefineFunction(object.TypeInfo_Const.flags): object.d(1053) | |
* * * isMember = this is: object.TypeInfo_Const | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe uint()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo_Const*) | |
* * * DtoResolveFunction(object.TypeInfo_Const.flags): object.d(1053) | |
* * * * DtoDeclareFunction(object.TypeInfo_Const.flags): object.d(1053) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Const | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint()) | |
* * * * * func = | |
declare i32 @_D6object14TypeInfo_Const5flagsMxFNaNbNdNiNfZk(%object.TypeInfo_Const*) | |
* * * Doing function body for: flags | |
* * * DtoCreateNestedContext for object.TypeInfo_Const.flags | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Const.flags | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(1054) | |
* * * * * CallExp::toElem: this.base.flags() @ uint | |
* * * * * * DotVarExp::toElem: this.base.flags @ const pure nothrow @nogc @property @safe uint() | |
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo) | |
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Const) | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_Const.base: | |
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Const, %object.TypeInfo_Const* %4, i32 0, i32 2 | |
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8 | |
* * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe uint()) | |
* * * * * * * funcval casted: %11 = bitcast i8* %10 to i32 (%object.TypeInfo*)* | |
* * * * * * DtoCallFunction() | |
* * * * * * * Evaluating argument expressions | |
* * * * * * * doing normal arguments | |
* * * * * * * Arguments so far: (1) | |
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * Function type: const pure nothrow @nogc @property @safe uint() | |
* * DtoDefineFunction(object.TypeInfo_Const.initializer): object.d(1057) | |
* * * isMember = this is: object.TypeInfo_Const | |
* * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_Const*) | |
* * * DtoResolveFunction(object.TypeInfo_Const.initializer): object.d(1057) | |
* * * * DtoDeclareFunction(object.TypeInfo_Const.initializer): object.d(1057) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Const | |
* * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object14TypeInfo_Const11initializerMxFNaNbNiNfZAxv(%object.TypeInfo_Const*) | |
* * * Doing function body for: initializer | |
* * * DtoCreateNestedContext for object.TypeInfo_Const.initializer | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Const.initializer | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(1058) | |
* * * * * CallExp::toElem: this.base.initializer() @ const(void)[] | |
* * * * * * DotVarExp::toElem: this.base.initializer @ const pure nothrow @nogc @safe const(void)[]() | |
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo) | |
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Const) | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_Const.base: | |
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Const, %object.TypeInfo_Const* %4, i32 0, i32 2 | |
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8 | |
* * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * DtoFunctionType(const pure nothrow @nogc @safe const(void)[]()) | |
* * * * * * * funcval casted: %11 = bitcast i8* %10 to { i64, i8* } (%object.TypeInfo*)* | |
* * * * * * DtoCallFunction() | |
* * * * * * * Evaluating argument expressions | |
* * * * * * * doing normal arguments | |
* * * * * * * Arguments so far: (1) | |
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * Function type: const pure nothrow @nogc @safe const(void)[]() | |
* * DtoDefineFunction(object.TypeInfo_Const.talign): object.d(1061) | |
* * * isMember = this is: object.TypeInfo_Const | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_Const*) | |
* * * DtoResolveFunction(object.TypeInfo_Const.talign): object.d(1061) | |
* * * * DtoDeclareFunction(object.TypeInfo_Const.talign): object.d(1061) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Const | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object14TypeInfo_Const6talignMxFNaNbNdNiNfZm(%object.TypeInfo_Const*) | |
* * * Doing function body for: talign | |
* * * DtoCreateNestedContext for object.TypeInfo_Const.talign | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Const.talign | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d(1062) | |
* * * * * CallExp::toElem: this.base.talign() @ ulong | |
* * * * * * DotVarExp::toElem: this.base.talign @ const pure nothrow @nogc @property @safe ulong() | |
* * * * * * * DotVarExp::toElem: this.base @ const(TypeInfo) | |
* * * * * * * * ThisExp::toElem: this @ const(TypeInfo_Const) | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_Const.base: | |
* * * * * * * * * Value: %5 = getelementptr inbounds %object.TypeInfo_Const, %object.TypeInfo_Const* %4, i32 0, i32 2 | |
* * * * * * * vthis: %6 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * funcval: %10 = load i8*, i8** %9, align 8 | |
* * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * * * funcval casted: %11 = bitcast i8* %10 to i64 (%object.TypeInfo*)* | |
* * * * * * DtoCallFunction() | |
* * * * * * * Evaluating argument expressions | |
* * * * * * * doing normal arguments | |
* * * * * * * Arguments so far: (1) | |
* * * * * * * * %12 = load %object.TypeInfo*, %object.TypeInfo** %5 | |
* * * * * * * Function type: const pure nothrow @nogc @property @safe ulong() | |
* * DtoDefineFunction(object.TypeInfo_Const.argTypes): object.d(1065) | |
* * * isMember = this is: object.TypeInfo_Const | |
* * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2)) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i32 (%object.TypeInfo_Const*, %object.TypeInfo**, %object.TypeInfo**) | |
* * * DtoResolveFunction(object.TypeInfo_Const.argTypes): object.d(1065) | |
* * * * DtoDeclareFunction(object.TypeInfo_Const.argTypes): object.d(1065) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_Const | |
* * * * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2)) | |
* * * * * func = | |
declare i32 @_D6object14TypeInfo_Const8argTypesMFNbNfJC8TypeInfoJQlZi(%object.TypeInfo_Const*, %object.TypeInfo**, %object.TypeInfo**) | |
* * * Doing function body for: argTypes | |
* * * DtoCreateNestedContext for object.TypeInfo_Const.argTypes | |
* * * * DtoCreateNestedContextType for object.TypeInfo_Const.argTypes | |
* * * CompoundStatement::toIR(): | |
* * * * ExpStatement::toIR(): | |
* * * * * AssignExp::toElem: arg1 = null | (object.TypeInfo)(object.TypeInfo = object.TypeInfo) | |
* * * * * * VarExp::toElem: arg1 @ object.TypeInfo | |
* * * * * * * DtoSymbolAddress ('arg1' of type 'object.TypeInfo') | |
* * * * * * * * function param | |
* * * * * * * * type: object.TypeInfo | |
* * * * * * NullExp::toElem(type=object.TypeInfo): null | |
* * * * * * * NullExp::toConstElem(type=object.TypeInfo): null | |
* * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * DtoAssign() | |
* * * * * * * l : %object.TypeInfo** %2 | |
* * * * * * * r : %object.TypeInfo* null | |
* * * * ExpStatement::toIR(): | |
* * * * * AssignExp::toElem: arg2 = null | (object.TypeInfo)(object.TypeInfo = object.TypeInfo) | |
* * * * * * VarExp::toElem: arg2 @ object.TypeInfo | |
* * * * * * * DtoSymbolAddress ('arg2' of type 'object.TypeInfo') | |
* * * * * * * * function param | |
* * * * * * * * type: object.TypeInfo | |
* * * * * * NullExp::toElem(type=object.TypeInfo): null | |
* * * * * * * NullExp::toConstElem(type=object.TypeInfo): null | |
* * * * * * performing normal assignment (rhs has lvalue elems = 0) | |
* * * * * * DtoAssign() | |
* * * * * * * l : %object.TypeInfo** %1 | |
* * * * * * * r : %object.TypeInfo* null | |
* * * * ReturnStatement::toIR(): object.d(1066) | |
* * * * * CallExp::toElem: this.base.argTypes(arg1, arg2) @ int | |
* * * * * * DotVarExp::toElem: this.base.argTypes @ nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2) | |
* * * * * * * DotVarExp::toElem: this.base @ object.TypeInfo | |
* * * * * * * * ThisExp::toElem: this @ object.TypeInfo_Const | |
* * * * * * * * * normal this exp | |
* * * * * * * * Indexing aggregate field object.TypeInfo_Const.base: | |
* * * * * * * * * Value: %7 = getelementptr inbounds %object.TypeInfo_Const, %object.TypeInfo_Const* %6, i32 0, i32 2 | |
* * * * * * * vthis: %8 = load %object.TypeInfo*, %object.TypeInfo** %7 | |
* * * * * * * funcval: %12 = load i8*, i8** %11, align 8 | |
* * * * * * * isMember = this is: object.TypeInfo | |
* * * * * * * DtoFunctionType(nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2)) | |
* * * * * * * funcval casted: %13 = bitcast i8* %12 to i32 (%object.TypeInfo*, %object.TypeInfo**, %object.TypeInfo**)* | |
* * * * * * DtoCallFunction() | |
* * * * * * * Evaluating argument expressions | |
* * * * * * * * DtoArgument | |
* * * * * * * * * VarExp::toElem: arg1 @ object.TypeInfo | |
* * * * * * * * * * DtoSymbolAddress ('arg1' of type 'object.TypeInfo') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: object.TypeInfo | |
* * * * * * * * DtoArgument | |
* * * * * * * * * VarExp::toElem: arg2 @ object.TypeInfo | |
* * * * * * * * * * DtoSymbolAddress ('arg2' of type 'object.TypeInfo') | |
* * * * * * * * * * * function param | |
* * * * * * * * * * * type: object.TypeInfo | |
* * * * * * * doing normal arguments | |
* * * * * * * Arguments so far: (1) | |
* * * * * * * * %14 = load %object.TypeInfo*, %object.TypeInfo** %7 | |
* * * * * * * Function type: nothrow @safe int(out TypeInfo arg1, out TypeInfo arg2) | |
* * VarDeclaration::codegen(): 'object.TypeInfo_Const.base' | |
* * * DtoResolveVariable(object.TypeInfo_Const.base) | |
* * Building default initializer for object.TypeInfo_Const | |
* * * Creating initializer constant for TypeInfo_Const | |
* * * * Field priority for base: 1 | |
* * * * DtoConstExpInit(targetType = object.TypeInfo, exp = null) | |
* * * * * NullExp::toConstElem(type=object.TypeInfo): null | |
* * * * final initializer: %object.TypeInfo_Const { [19 x i8*]* @_D14TypeInfo_Const6__vtblZ, i8* null, %object.TypeInfo* null } | |
* * Building vtbl initializer | |
* * DtoDefineClassInfo(TypeInfo_Const) | |
* * * Building ClassInfo.interfaces | |
* ClassDeclaration::codegen: 'object.TypeInfo_a' | |
* * DtoResolveClass(object.TypeInfo_a): object.d-mixin-1072(1072) | |
* * * Building type: object.TypeInfo_a | |
* * * * Building class type object.TypeInfo_a @ object.d-mixin-1072(1072) | |
* * * * * Instance size: 16 | |
* * * * * class type: %object.TypeInfo_a = type { [19 x i8*]*, i8* } | |
* * DtoDefineFunction(object.TypeInfo_a.toString): object.d-mixin-1072(1073) | |
* * * isMember = this is: object.TypeInfo_a | |
* * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_a*) | |
* * * DtoResolveFunction(object.TypeInfo_a.toString): object.d-mixin-1072(1073) | |
* * * * DtoDeclareFunction(object.TypeInfo_a.toString): object.d-mixin-1072(1073) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_a | |
* * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object10TypeInfo_a8toStringMxFNaNbNfZAya(%object.TypeInfo_a*) | |
* * * Doing function body for: toString | |
* * * DtoCreateNestedContext for object.TypeInfo_a.toString | |
* * * * DtoCreateNestedContextType for object.TypeInfo_a.toString | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1073) | |
* * * * * StringExp::toElem: "char" @ string | |
* * * * * * type: [5 x i8] | |
* * * * * * init: [5 x i8] c"char\00" | |
* * DtoDefineFunction(object.TypeInfo_a.tsize): object.d-mixin-1072(1075) | |
* * * isMember = this is: object.TypeInfo_a | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_a*) | |
* * * DtoResolveFunction(object.TypeInfo_a.tsize): object.d-mixin-1072(1075) | |
* * * * DtoDeclareFunction(object.TypeInfo_a.tsize): object.d-mixin-1072(1075) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_a | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object10TypeInfo_a5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_a*) | |
* * * Doing function body for: tsize | |
* * * DtoCreateNestedContext for object.TypeInfo_a.tsize | |
* * * * DtoCreateNestedContextType for object.TypeInfo_a.tsize | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1075) | |
* * * * * IntegerExp::toElem: 1LU @ ulong | |
* * * * * * IntegerExp::toConstElem: 1LU @ ulong | |
* * * * * * * value = i64 1 | |
* * Building default initializer for object.TypeInfo_a | |
* * * Creating initializer constant for TypeInfo_a | |
* * * * final initializer: %object.TypeInfo_a { [19 x i8*]* @_D10TypeInfo_a6__vtblZ, i8* null } | |
* * Building vtbl initializer | |
* * DtoDefineClassInfo(TypeInfo_a) | |
* * * Building ClassInfo.interfaces | |
* ClassDeclaration::codegen: 'object.TypeInfo_u' | |
* * DtoResolveClass(object.TypeInfo_u): object.d-mixin-1072(1076) | |
* * * Building type: object.TypeInfo_u | |
* * * * Building class type object.TypeInfo_u @ object.d-mixin-1072(1076) | |
* * * * * Instance size: 16 | |
* * * * * class type: %object.TypeInfo_u = type { [19 x i8*]*, i8* } | |
* * DtoDefineFunction(object.TypeInfo_u.toString): object.d-mixin-1072(1077) | |
* * * isMember = this is: object.TypeInfo_u | |
* * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_u*) | |
* * * DtoResolveFunction(object.TypeInfo_u.toString): object.d-mixin-1072(1077) | |
* * * * DtoDeclareFunction(object.TypeInfo_u.toString): object.d-mixin-1072(1077) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_u | |
* * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object10TypeInfo_u8toStringMxFNaNbNfZAya(%object.TypeInfo_u*) | |
* * * Doing function body for: toString | |
* * * DtoCreateNestedContext for object.TypeInfo_u.toString | |
* * * * DtoCreateNestedContextType for object.TypeInfo_u.toString | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1077) | |
* * * * * StringExp::toElem: "wchar" @ string | |
* * * * * * type: [6 x i8] | |
* * * * * * init: [6 x i8] c"wchar\00" | |
* * DtoDefineFunction(object.TypeInfo_u.tsize): object.d-mixin-1072(1079) | |
* * * isMember = this is: object.TypeInfo_u | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_u*) | |
* * * DtoResolveFunction(object.TypeInfo_u.tsize): object.d-mixin-1072(1079) | |
* * * * DtoDeclareFunction(object.TypeInfo_u.tsize): object.d-mixin-1072(1079) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_u | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object10TypeInfo_u5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_u*) | |
* * * Doing function body for: tsize | |
* * * DtoCreateNestedContext for object.TypeInfo_u.tsize | |
* * * * DtoCreateNestedContextType for object.TypeInfo_u.tsize | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1079) | |
* * * * * IntegerExp::toElem: 2LU @ ulong | |
* * * * * * IntegerExp::toConstElem: 2LU @ ulong | |
* * * * * * * value = i64 2 | |
* * Building default initializer for object.TypeInfo_u | |
* * * Creating initializer constant for TypeInfo_u | |
* * * * final initializer: %object.TypeInfo_u { [19 x i8*]* @_D10TypeInfo_u6__vtblZ, i8* null } | |
* * Building vtbl initializer | |
* * DtoDefineClassInfo(TypeInfo_u) | |
* * * Building ClassInfo.interfaces | |
* ClassDeclaration::codegen: 'object.TypeInfo_w' | |
* * DtoResolveClass(object.TypeInfo_w): object.d-mixin-1072(1080) | |
* * * Building type: object.TypeInfo_w | |
* * * * Building class type object.TypeInfo_w @ object.d-mixin-1072(1080) | |
* * * * * Instance size: 16 | |
* * * * * class type: %object.TypeInfo_w = type { [19 x i8*]*, i8* } | |
* * DtoDefineFunction(object.TypeInfo_w.toString): object.d-mixin-1072(1081) | |
* * * isMember = this is: object.TypeInfo_w | |
* * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_w*) | |
* * * DtoResolveFunction(object.TypeInfo_w.toString): object.d-mixin-1072(1081) | |
* * * * DtoDeclareFunction(object.TypeInfo_w.toString): object.d-mixin-1072(1081) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_w | |
* * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object10TypeInfo_w8toStringMxFNaNbNfZAya(%object.TypeInfo_w*) | |
* * * Doing function body for: toString | |
* * * DtoCreateNestedContext for object.TypeInfo_w.toString | |
* * * * DtoCreateNestedContextType for object.TypeInfo_w.toString | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1081) | |
* * * * * StringExp::toElem: "dchar" @ string | |
* * * * * * type: [6 x i8] | |
* * * * * * init: [6 x i8] c"dchar\00" | |
* * DtoDefineFunction(object.TypeInfo_w.tsize): object.d-mixin-1072(1083) | |
* * * isMember = this is: object.TypeInfo_w | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_w*) | |
* * * DtoResolveFunction(object.TypeInfo_w.tsize): object.d-mixin-1072(1083) | |
* * * * DtoDeclareFunction(object.TypeInfo_w.tsize): object.d-mixin-1072(1083) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_w | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object10TypeInfo_w5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_w*) | |
* * * Doing function body for: tsize | |
* * * DtoCreateNestedContext for object.TypeInfo_w.tsize | |
* * * * DtoCreateNestedContextType for object.TypeInfo_w.tsize | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1083) | |
* * * * * IntegerExp::toElem: 4LU @ ulong | |
* * * * * * IntegerExp::toConstElem: 4LU @ ulong | |
* * * * * * * value = i64 4 | |
* * Building default initializer for object.TypeInfo_w | |
* * * Creating initializer constant for TypeInfo_w | |
* * * * final initializer: %object.TypeInfo_w { [19 x i8*]* @_D10TypeInfo_w6__vtblZ, i8* null } | |
* * Building vtbl initializer | |
* * DtoDefineClassInfo(TypeInfo_w) | |
* * * Building ClassInfo.interfaces | |
* ClassDeclaration::codegen: 'object.TypeInfo_i' | |
* * DtoResolveClass(object.TypeInfo_i): object.d-mixin-1072(1084) | |
* * * Building type: object.TypeInfo_i | |
* * * * Building class type object.TypeInfo_i @ object.d-mixin-1072(1084) | |
* * * * * Instance size: 16 | |
* * * * * class type: %object.TypeInfo_i = type { [19 x i8*]*, i8* } | |
* * DtoDefineFunction(object.TypeInfo_i.toString): object.d-mixin-1072(1085) | |
* * * isMember = this is: object.TypeInfo_i | |
* * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_i*) | |
* * * DtoResolveFunction(object.TypeInfo_i.toString): object.d-mixin-1072(1085) | |
* * * * DtoDeclareFunction(object.TypeInfo_i.toString): object.d-mixin-1072(1085) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_i | |
* * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object10TypeInfo_i8toStringMxFNaNbNfZAya(%object.TypeInfo_i*) | |
* * * Doing function body for: toString | |
* * * DtoCreateNestedContext for object.TypeInfo_i.toString | |
* * * * DtoCreateNestedContextType for object.TypeInfo_i.toString | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1085) | |
* * * * * StringExp::toElem: "int" @ string | |
* * * * * * type: [4 x i8] | |
* * * * * * init: [4 x i8] c"int\00" | |
* * DtoDefineFunction(object.TypeInfo_i.tsize): object.d-mixin-1072(1087) | |
* * * isMember = this is: object.TypeInfo_i | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_i*) | |
* * * DtoResolveFunction(object.TypeInfo_i.tsize): object.d-mixin-1072(1087) | |
* * * * DtoDeclareFunction(object.TypeInfo_i.tsize): object.d-mixin-1072(1087) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_i | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object10TypeInfo_i5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_i*) | |
* * * Doing function body for: tsize | |
* * * DtoCreateNestedContext for object.TypeInfo_i.tsize | |
* * * * DtoCreateNestedContextType for object.TypeInfo_i.tsize | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1087) | |
* * * * * IntegerExp::toElem: 4LU @ ulong | |
* * * * * * IntegerExp::toConstElem: 4LU @ ulong | |
* * * * * * * value = i64 4 | |
* * Building default initializer for object.TypeInfo_i | |
* * * Creating initializer constant for TypeInfo_i | |
* * * * final initializer: %object.TypeInfo_i { [19 x i8*]* @_D10TypeInfo_i6__vtblZ, i8* null } | |
* * Building vtbl initializer | |
* * DtoDefineClassInfo(TypeInfo_i) | |
* * * Building ClassInfo.interfaces | |
* ClassDeclaration::codegen: 'object.TypeInfo_k' | |
* * DtoResolveClass(object.TypeInfo_k): object.d-mixin-1072(1088) | |
* * * Building type: object.TypeInfo_k | |
* * * * Building class type object.TypeInfo_k @ object.d-mixin-1072(1088) | |
* * * * * Instance size: 16 | |
* * * * * class type: %object.TypeInfo_k = type { [19 x i8*]*, i8* } | |
* * DtoDefineFunction(object.TypeInfo_k.toString): object.d-mixin-1072(1089) | |
* * * isMember = this is: object.TypeInfo_k | |
* * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_k*) | |
* * * DtoResolveFunction(object.TypeInfo_k.toString): object.d-mixin-1072(1089) | |
* * * * DtoDeclareFunction(object.TypeInfo_k.toString): object.d-mixin-1072(1089) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_k | |
* * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object10TypeInfo_k8toStringMxFNaNbNfZAya(%object.TypeInfo_k*) | |
* * * Doing function body for: toString | |
* * * DtoCreateNestedContext for object.TypeInfo_k.toString | |
* * * * DtoCreateNestedContextType for object.TypeInfo_k.toString | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1089) | |
* * * * * StringExp::toElem: "uint" @ string | |
* * * * * * type: [5 x i8] | |
* * * * * * init: [5 x i8] c"uint\00" | |
* * DtoDefineFunction(object.TypeInfo_k.tsize): object.d-mixin-1072(1091) | |
* * * isMember = this is: object.TypeInfo_k | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_k*) | |
* * * DtoResolveFunction(object.TypeInfo_k.tsize): object.d-mixin-1072(1091) | |
* * * * DtoDeclareFunction(object.TypeInfo_k.tsize): object.d-mixin-1072(1091) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_k | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object10TypeInfo_k5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_k*) | |
* * * Doing function body for: tsize | |
* * * DtoCreateNestedContext for object.TypeInfo_k.tsize | |
* * * * DtoCreateNestedContextType for object.TypeInfo_k.tsize | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1091) | |
* * * * * IntegerExp::toElem: 4LU @ ulong | |
* * * * * * IntegerExp::toConstElem: 4LU @ ulong | |
* * * * * * * value = i64 4 | |
* * Building default initializer for object.TypeInfo_k | |
* * * Creating initializer constant for TypeInfo_k | |
* * * * final initializer: %object.TypeInfo_k { [19 x i8*]* @_D10TypeInfo_k6__vtblZ, i8* null } | |
* * Building vtbl initializer | |
* * DtoDefineClassInfo(TypeInfo_k) | |
* * * Building ClassInfo.interfaces | |
* ClassDeclaration::codegen: 'object.TypeInfo_s' | |
* * DtoResolveClass(object.TypeInfo_s): object.d-mixin-1072(1092) | |
* * * Building type: object.TypeInfo_s | |
* * * * Building class type object.TypeInfo_s @ object.d-mixin-1072(1092) | |
* * * * * Instance size: 16 | |
* * * * * class type: %object.TypeInfo_s = type { [19 x i8*]*, i8* } | |
* * DtoDefineFunction(object.TypeInfo_s.toString): object.d-mixin-1072(1093) | |
* * * isMember = this is: object.TypeInfo_s | |
* * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_s*) | |
* * * DtoResolveFunction(object.TypeInfo_s.toString): object.d-mixin-1072(1093) | |
* * * * DtoDeclareFunction(object.TypeInfo_s.toString): object.d-mixin-1072(1093) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_s | |
* * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object10TypeInfo_s8toStringMxFNaNbNfZAya(%object.TypeInfo_s*) | |
* * * Doing function body for: toString | |
* * * DtoCreateNestedContext for object.TypeInfo_s.toString | |
* * * * DtoCreateNestedContextType for object.TypeInfo_s.toString | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1093) | |
* * * * * StringExp::toElem: "short" @ string | |
* * * * * * type: [6 x i8] | |
* * * * * * init: [6 x i8] c"short\00" | |
* * DtoDefineFunction(object.TypeInfo_s.tsize): object.d-mixin-1072(1095) | |
* * * isMember = this is: object.TypeInfo_s | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_s*) | |
* * * DtoResolveFunction(object.TypeInfo_s.tsize): object.d-mixin-1072(1095) | |
* * * * DtoDeclareFunction(object.TypeInfo_s.tsize): object.d-mixin-1072(1095) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_s | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object10TypeInfo_s5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_s*) | |
* * * Doing function body for: tsize | |
* * * DtoCreateNestedContext for object.TypeInfo_s.tsize | |
* * * * DtoCreateNestedContextType for object.TypeInfo_s.tsize | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1095) | |
* * * * * IntegerExp::toElem: 2LU @ ulong | |
* * * * * * IntegerExp::toConstElem: 2LU @ ulong | |
* * * * * * * value = i64 2 | |
* * Building default initializer for object.TypeInfo_s | |
* * * Creating initializer constant for TypeInfo_s | |
* * * * final initializer: %object.TypeInfo_s { [19 x i8*]* @_D10TypeInfo_s6__vtblZ, i8* null } | |
* * Building vtbl initializer | |
* * DtoDefineClassInfo(TypeInfo_s) | |
* * * Building ClassInfo.interfaces | |
* ClassDeclaration::codegen: 'object.TypeInfo_t' | |
* * DtoResolveClass(object.TypeInfo_t): object.d-mixin-1072(1096) | |
* * * Building type: object.TypeInfo_t | |
* * * * Building class type object.TypeInfo_t @ object.d-mixin-1072(1096) | |
* * * * * Instance size: 16 | |
* * * * * class type: %object.TypeInfo_t = type { [19 x i8*]*, i8* } | |
* * DtoDefineFunction(object.TypeInfo_t.toString): object.d-mixin-1072(1097) | |
* * * isMember = this is: object.TypeInfo_t | |
* * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_t*) | |
* * * DtoResolveFunction(object.TypeInfo_t.toString): object.d-mixin-1072(1097) | |
* * * * DtoDeclareFunction(object.TypeInfo_t.toString): object.d-mixin-1072(1097) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_t | |
* * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object10TypeInfo_t8toStringMxFNaNbNfZAya(%object.TypeInfo_t*) | |
* * * Doing function body for: toString | |
* * * DtoCreateNestedContext for object.TypeInfo_t.toString | |
* * * * DtoCreateNestedContextType for object.TypeInfo_t.toString | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1097) | |
* * * * * StringExp::toElem: "ushort" @ string | |
* * * * * * type: [7 x i8] | |
* * * * * * init: [7 x i8] c"ushort\00" | |
* * DtoDefineFunction(object.TypeInfo_t.tsize): object.d-mixin-1072(1099) | |
* * * isMember = this is: object.TypeInfo_t | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_t*) | |
* * * DtoResolveFunction(object.TypeInfo_t.tsize): object.d-mixin-1072(1099) | |
* * * * DtoDeclareFunction(object.TypeInfo_t.tsize): object.d-mixin-1072(1099) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_t | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object10TypeInfo_t5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_t*) | |
* * * Doing function body for: tsize | |
* * * DtoCreateNestedContext for object.TypeInfo_t.tsize | |
* * * * DtoCreateNestedContextType for object.TypeInfo_t.tsize | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1099) | |
* * * * * IntegerExp::toElem: 2LU @ ulong | |
* * * * * * IntegerExp::toConstElem: 2LU @ ulong | |
* * * * * * * value = i64 2 | |
* * Building default initializer for object.TypeInfo_t | |
* * * Creating initializer constant for TypeInfo_t | |
* * * * final initializer: %object.TypeInfo_t { [19 x i8*]* @_D10TypeInfo_t6__vtblZ, i8* null } | |
* * Building vtbl initializer | |
* * DtoDefineClassInfo(TypeInfo_t) | |
* * * Building ClassInfo.interfaces | |
* ClassDeclaration::codegen: 'object.TypeInfo_g' | |
* * DtoResolveClass(object.TypeInfo_g): object.d-mixin-1072(1100) | |
* * * Building type: object.TypeInfo_g | |
* * * * Building class type object.TypeInfo_g @ object.d-mixin-1072(1100) | |
* * * * * Instance size: 16 | |
* * * * * class type: %object.TypeInfo_g = type { [19 x i8*]*, i8* } | |
* * DtoDefineFunction(object.TypeInfo_g.toString): object.d-mixin-1072(1101) | |
* * * isMember = this is: object.TypeInfo_g | |
* * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_g*) | |
* * * DtoResolveFunction(object.TypeInfo_g.toString): object.d-mixin-1072(1101) | |
* * * * DtoDeclareFunction(object.TypeInfo_g.toString): object.d-mixin-1072(1101) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_g | |
* * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object10TypeInfo_g8toStringMxFNaNbNfZAya(%object.TypeInfo_g*) | |
* * * Doing function body for: toString | |
* * * DtoCreateNestedContext for object.TypeInfo_g.toString | |
* * * * DtoCreateNestedContextType for object.TypeInfo_g.toString | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1101) | |
* * * * * StringExp::toElem: "byte" @ string | |
* * * * * * type: [5 x i8] | |
* * * * * * init: [5 x i8] c"byte\00" | |
* * DtoDefineFunction(object.TypeInfo_g.tsize): object.d-mixin-1072(1103) | |
* * * isMember = this is: object.TypeInfo_g | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_g*) | |
* * * DtoResolveFunction(object.TypeInfo_g.tsize): object.d-mixin-1072(1103) | |
* * * * DtoDeclareFunction(object.TypeInfo_g.tsize): object.d-mixin-1072(1103) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_g | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object10TypeInfo_g5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_g*) | |
* * * Doing function body for: tsize | |
* * * DtoCreateNestedContext for object.TypeInfo_g.tsize | |
* * * * DtoCreateNestedContextType for object.TypeInfo_g.tsize | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1103) | |
* * * * * IntegerExp::toElem: 1LU @ ulong | |
* * * * * * IntegerExp::toConstElem: 1LU @ ulong | |
* * * * * * * value = i64 1 | |
* * Building default initializer for object.TypeInfo_g | |
* * * Creating initializer constant for TypeInfo_g | |
* * * * final initializer: %object.TypeInfo_g { [19 x i8*]* @_D10TypeInfo_g6__vtblZ, i8* null } | |
* * Building vtbl initializer | |
* * DtoDefineClassInfo(TypeInfo_g) | |
* * * Building ClassInfo.interfaces | |
* ClassDeclaration::codegen: 'object.TypeInfo_h' | |
* * DtoResolveClass(object.TypeInfo_h): object.d-mixin-1072(1104) | |
* * * Building type: object.TypeInfo_h | |
* * * * Building class type object.TypeInfo_h @ object.d-mixin-1072(1104) | |
* * * * * Instance size: 16 | |
* * * * * class type: %object.TypeInfo_h = type { [19 x i8*]*, i8* } | |
* * DtoDefineFunction(object.TypeInfo_h.toString): object.d-mixin-1072(1105) | |
* * * isMember = this is: object.TypeInfo_h | |
* * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_h*) | |
* * * DtoResolveFunction(object.TypeInfo_h.toString): object.d-mixin-1072(1105) | |
* * * * DtoDeclareFunction(object.TypeInfo_h.toString): object.d-mixin-1072(1105) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_h | |
* * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object10TypeInfo_h8toStringMxFNaNbNfZAya(%object.TypeInfo_h*) | |
* * * Doing function body for: toString | |
* * * DtoCreateNestedContext for object.TypeInfo_h.toString | |
* * * * DtoCreateNestedContextType for object.TypeInfo_h.toString | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1105) | |
* * * * * StringExp::toElem: "ubyte" @ string | |
* * * * * * type: [6 x i8] | |
* * * * * * init: [6 x i8] c"ubyte\00" | |
* * DtoDefineFunction(object.TypeInfo_h.tsize): object.d-mixin-1072(1107) | |
* * * isMember = this is: object.TypeInfo_h | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_h*) | |
* * * DtoResolveFunction(object.TypeInfo_h.tsize): object.d-mixin-1072(1107) | |
* * * * DtoDeclareFunction(object.TypeInfo_h.tsize): object.d-mixin-1072(1107) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_h | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object10TypeInfo_h5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_h*) | |
* * * Doing function body for: tsize | |
* * * DtoCreateNestedContext for object.TypeInfo_h.tsize | |
* * * * DtoCreateNestedContextType for object.TypeInfo_h.tsize | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1107) | |
* * * * * IntegerExp::toElem: 1LU @ ulong | |
* * * * * * IntegerExp::toConstElem: 1LU @ ulong | |
* * * * * * * value = i64 1 | |
* * Building default initializer for object.TypeInfo_h | |
* * * Creating initializer constant for TypeInfo_h | |
* * * * final initializer: %object.TypeInfo_h { [19 x i8*]* @_D10TypeInfo_h6__vtblZ, i8* null } | |
* * Building vtbl initializer | |
* * DtoDefineClassInfo(TypeInfo_h) | |
* * * Building ClassInfo.interfaces | |
* ClassDeclaration::codegen: 'object.TypeInfo_l' | |
* * DtoResolveClass(object.TypeInfo_l): object.d-mixin-1072(1108) | |
* * * Building type: object.TypeInfo_l | |
* * * * Building class type object.TypeInfo_l @ object.d-mixin-1072(1108) | |
* * * * * Instance size: 16 | |
* * * * * class type: %object.TypeInfo_l = type { [19 x i8*]*, i8* } | |
* * DtoDefineFunction(object.TypeInfo_l.toString): object.d-mixin-1072(1109) | |
* * * isMember = this is: object.TypeInfo_l | |
* * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_l*) | |
* * * DtoResolveFunction(object.TypeInfo_l.toString): object.d-mixin-1072(1109) | |
* * * * DtoDeclareFunction(object.TypeInfo_l.toString): object.d-mixin-1072(1109) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_l | |
* * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object10TypeInfo_l8toStringMxFNaNbNfZAya(%object.TypeInfo_l*) | |
* * * Doing function body for: toString | |
* * * DtoCreateNestedContext for object.TypeInfo_l.toString | |
* * * * DtoCreateNestedContextType for object.TypeInfo_l.toString | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1109) | |
* * * * * StringExp::toElem: "long" @ string | |
* * * * * * type: [5 x i8] | |
* * * * * * init: [5 x i8] c"long\00" | |
* * DtoDefineFunction(object.TypeInfo_l.tsize): object.d-mixin-1072(1111) | |
* * * isMember = this is: object.TypeInfo_l | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_l*) | |
* * * DtoResolveFunction(object.TypeInfo_l.tsize): object.d-mixin-1072(1111) | |
* * * * DtoDeclareFunction(object.TypeInfo_l.tsize): object.d-mixin-1072(1111) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_l | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object10TypeInfo_l5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_l*) | |
* * * Doing function body for: tsize | |
* * * DtoCreateNestedContext for object.TypeInfo_l.tsize | |
* * * * DtoCreateNestedContextType for object.TypeInfo_l.tsize | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1111) | |
* * * * * IntegerExp::toElem: 8LU @ ulong | |
* * * * * * IntegerExp::toConstElem: 8LU @ ulong | |
* * * * * * * value = i64 8 | |
* * Building default initializer for object.TypeInfo_l | |
* * * Creating initializer constant for TypeInfo_l | |
* * * * final initializer: %object.TypeInfo_l { [19 x i8*]* @_D10TypeInfo_l6__vtblZ, i8* null } | |
* * Building vtbl initializer | |
* * DtoDefineClassInfo(TypeInfo_l) | |
* * * Building ClassInfo.interfaces | |
* ClassDeclaration::codegen: 'object.TypeInfo_m' | |
* * DtoResolveClass(object.TypeInfo_m): object.d-mixin-1072(1112) | |
* * * Building type: object.TypeInfo_m | |
* * * * Building class type object.TypeInfo_m @ object.d-mixin-1072(1112) | |
* * * * * Instance size: 16 | |
* * * * * class type: %object.TypeInfo_m = type { [19 x i8*]*, i8* } | |
* * DtoDefineFunction(object.TypeInfo_m.toString): object.d-mixin-1072(1113) | |
* * * isMember = this is: object.TypeInfo_m | |
* * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: { i64, i8* } (%object.TypeInfo_m*) | |
* * * DtoResolveFunction(object.TypeInfo_m.toString): object.d-mixin-1072(1113) | |
* * * * DtoDeclareFunction(object.TypeInfo_m.toString): object.d-mixin-1072(1113) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_m | |
* * * * * DtoFunctionType(const pure nothrow @safe string()) | |
* * * * * func = | |
declare { i64, i8* } @_D6object10TypeInfo_m8toStringMxFNaNbNfZAya(%object.TypeInfo_m*) | |
* * * Doing function body for: toString | |
* * * DtoCreateNestedContext for object.TypeInfo_m.toString | |
* * * * DtoCreateNestedContextType for object.TypeInfo_m.toString | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1113) | |
* * * * * StringExp::toElem: "ulong" @ string | |
* * * * * * type: [6 x i8] | |
* * * * * * init: [6 x i8] c"ulong\00" | |
* * DtoDefineFunction(object.TypeInfo_m.tsize): object.d-mixin-1072(1115) | |
* * * isMember = this is: object.TypeInfo_m | |
* * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * x86-64 ABI: Transforming return type | |
* * * * x86-64 ABI: Transforming argument types | |
* * * * Final function type: i64 (%object.TypeInfo_m*) | |
* * * DtoResolveFunction(object.TypeInfo_m.tsize): object.d-mixin-1072(1115) | |
* * * * DtoDeclareFunction(object.TypeInfo_m.tsize): object.d-mixin-1072(1115) | |
* * * * * Enter defineAsExternallyAvailable | |
* * * * * * Cross-module inlining fully disabled. | |
* * * * * isMember = this is: object.TypeInfo_m | |
* * * * * DtoFunctionType(const pure nothrow @nogc @property @safe ulong()) | |
* * * * * func = | |
declare i64 @_D6object10TypeInfo_m5tsizeMxFNaNbNdNiNfZm(%object.TypeInfo_m*) | |
* * * Doing function body for: tsize | |
* * * DtoCreateNestedContext for object.TypeInfo_m.tsize | |
* * * * DtoCreateNestedContextType for object.TypeInfo_m.tsize | |
* * * CompoundStatement::toIR(): | |
* * * * ReturnStatement::toIR(): object.d-mixin-1072(1115) | |
* * * * * IntegerExp::toElem: 8LU @ ulong | |
* * * * * * IntegerExp::toConstElem: 8LU @ ulong | |
* * * * * * * value = i64 8 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment