From 42ebed76e6261735ecb0fc1f67fbc4d38d499785 Mon Sep 17 00:00:00 2001 From: araq Date: Sun, 1 Oct 2023 01:15:53 +0200 Subject: [PATCH] progress --- compiler/nir/nirtypes.nim | 4 ++ compiler/nir/types2ir.nim | 138 +++++++++++++++++++++++++++++++++++--- 2 files changed, 132 insertions(+), 10 deletions(-) diff --git a/compiler/nir/nirtypes.nim b/compiler/nir/nirtypes.nim index aef5264c70..235fd59a86 100644 --- a/compiler/nir/nirtypes.nim +++ b/compiler/nir/nirtypes.nim @@ -176,6 +176,10 @@ proc nominalType*(tree: var TypeGraph; kind: NirTypeKind; name: string): TypeId result = TypeId tree.nodes.len tree.nodes.add TypeNode(x: toX(kind, tree.names.getOrIncl(name))) +proc addNominalType*(tree: var TypeGraph; kind: NirTypeKind; name: string) = + assert kind in {ObjectTy, UnionTy} + tree.nodes.add TypeNode(x: toX(kind, tree.names.getOrIncl(name))) + proc getFloat128Type*(tree: var TypeGraph): TypeId = result = TypeId tree.nodes.len tree.nodes.add TypeNode(x: toX(FloatTy, 128'u32)) diff --git a/compiler/nir/types2ir.nim b/compiler/nir/types2ir.nim index 55593682be..4002709d8f 100644 --- a/compiler/nir/types2ir.nim +++ b/compiler/nir/types2ir.nim @@ -17,6 +17,10 @@ type g: TypeGraph conf: ConfigRef +proc mangle(t: PType): string = + # XXX Improve! + result = $t + template cached(c: var Context; t: PType; body: untyped) = result = c.processed.getOrDefault(t.itemId) if result.int == 0: @@ -74,8 +78,8 @@ proc objectToIr(c: var Context; t: PType): TypeId = var fieldTypes: seq[TypeId] = @[] collectFieldTypes c, t.n, fieldTypes let obj = openType(c.g, ObjectDecl) - # XXX Proper name mangling here! - c.g.addName t.sym.name.s + # XXX Inheritance?! + c.g.addName mangle t objectToIr c, t.n, fieldTypes, unionId result = sealType(c.g, obj) @@ -84,8 +88,7 @@ proc tupleToIr(c: var Context; t: PType): TypeId = for i in 0..