From 9020f437d4823e11b4bac02d9d2dd7862b353376 Mon Sep 17 00:00:00 2001 From: dimgigov Date: Sun, 31 May 2026 21:18:16 +0300 Subject: [PATCH] fix: parser sets typeName for pointer types, simplify Lcx_LowerParam --- _selfhost/src/hir_lower.bux | 8 ++++---- _selfhost/src/parser.bux | 10 ++++++++++ src_bux/hir_lower.bux | 8 ++++---- src_bux/parser.bux | 10 ++++++++++ 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/_selfhost/src/hir_lower.bux b/_selfhost/src/hir_lower.bux index e52fba2..afcd304 100644 --- a/_selfhost/src/hir_lower.bux +++ b/_selfhost/src/hir_lower.bux @@ -318,11 +318,11 @@ func Lcx_LowerParam(out: *HirParam, p: *Param) { out.name = p.name; if p.refParamType != null as *TypeExpr { out.typeKind = p.refParamType.kind; - // For pointer types, construct "PointeeType*" - if p.refParamType.kind == tekPointer && p.refParamType.pointerPointee != null as *TypeExpr { - out.typeName = String_Concat(p.refParamType.pointerPointee.typeName, "*"); - } else if !String_Eq(p.refParamType.typeName, "") { + // Use typeName directly if set (parser may have constructed "String*") + if !String_Eq(p.refParamType.typeName, "") { out.typeName = p.refParamType.typeName; + } else if p.refParamType.kind == tekPointer && p.refParamType.pointerPointee != null as *TypeExpr { + out.typeName = String_Concat(p.refParamType.pointerPointee.typeName, "*"); } else { out.typeName = ""; } diff --git a/_selfhost/src/parser.bux b/_selfhost/src/parser.bux index fcc0d73..5ce6510 100644 --- a/_selfhost/src/parser.bux +++ b/_selfhost/src/parser.bux @@ -109,6 +109,16 @@ func parserParseType(p: *Parser) -> *TypeExpr { te.line = line; te.column = col; te.pointerPointee = parserParseType(p); + // Set typeName to "String*" for String pointer, else "int*" + if te.pointerPointee != null as *TypeExpr { + if String_Eq(te.pointerPointee.typeName, "String") { + te.typeName = "String*"; + } else if String_Eq(te.pointerPointee.typeName, "int") { + te.typeName = "int*"; + } else { + te.typeName = "int*"; + } + } return te; } diff --git a/src_bux/hir_lower.bux b/src_bux/hir_lower.bux index e52fba2..afcd304 100644 --- a/src_bux/hir_lower.bux +++ b/src_bux/hir_lower.bux @@ -318,11 +318,11 @@ func Lcx_LowerParam(out: *HirParam, p: *Param) { out.name = p.name; if p.refParamType != null as *TypeExpr { out.typeKind = p.refParamType.kind; - // For pointer types, construct "PointeeType*" - if p.refParamType.kind == tekPointer && p.refParamType.pointerPointee != null as *TypeExpr { - out.typeName = String_Concat(p.refParamType.pointerPointee.typeName, "*"); - } else if !String_Eq(p.refParamType.typeName, "") { + // Use typeName directly if set (parser may have constructed "String*") + if !String_Eq(p.refParamType.typeName, "") { out.typeName = p.refParamType.typeName; + } else if p.refParamType.kind == tekPointer && p.refParamType.pointerPointee != null as *TypeExpr { + out.typeName = String_Concat(p.refParamType.pointerPointee.typeName, "*"); } else { out.typeName = ""; } diff --git a/src_bux/parser.bux b/src_bux/parser.bux index fcc0d73..5ce6510 100644 --- a/src_bux/parser.bux +++ b/src_bux/parser.bux @@ -109,6 +109,16 @@ func parserParseType(p: *Parser) -> *TypeExpr { te.line = line; te.column = col; te.pointerPointee = parserParseType(p); + // Set typeName to "String*" for String pointer, else "int*" + if te.pointerPointee != null as *TypeExpr { + if String_Eq(te.pointerPointee.typeName, "String") { + te.typeName = "String*"; + } else if String_Eq(te.pointerPointee.typeName, "int") { + te.typeName = "int*"; + } else { + te.typeName = "int*"; + } + } return te; }