fix: parser sets typeName for pointer types, simplify Lcx_LowerParam

This commit is contained in:
2026-05-31 21:18:16 +03:00
parent 646c1cad28
commit 9020f437d4
4 changed files with 28 additions and 8 deletions
+4 -4
View File
@@ -318,11 +318,11 @@ func Lcx_LowerParam(out: *HirParam, p: *Param) {
out.name = p.name; out.name = p.name;
if p.refParamType != null as *TypeExpr { if p.refParamType != null as *TypeExpr {
out.typeKind = p.refParamType.kind; out.typeKind = p.refParamType.kind;
// For pointer types, construct "PointeeType*" // Use typeName directly if set (parser may have constructed "String*")
if p.refParamType.kind == tekPointer && p.refParamType.pointerPointee != null as *TypeExpr { if !String_Eq(p.refParamType.typeName, "") {
out.typeName = String_Concat(p.refParamType.pointerPointee.typeName, "*");
} else if !String_Eq(p.refParamType.typeName, "") {
out.typeName = 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 { } else {
out.typeName = ""; out.typeName = "";
} }
+10
View File
@@ -109,6 +109,16 @@ func parserParseType(p: *Parser) -> *TypeExpr {
te.line = line; te.line = line;
te.column = col; te.column = col;
te.pointerPointee = parserParseType(p); 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; return te;
} }
+4 -4
View File
@@ -318,11 +318,11 @@ func Lcx_LowerParam(out: *HirParam, p: *Param) {
out.name = p.name; out.name = p.name;
if p.refParamType != null as *TypeExpr { if p.refParamType != null as *TypeExpr {
out.typeKind = p.refParamType.kind; out.typeKind = p.refParamType.kind;
// For pointer types, construct "PointeeType*" // Use typeName directly if set (parser may have constructed "String*")
if p.refParamType.kind == tekPointer && p.refParamType.pointerPointee != null as *TypeExpr { if !String_Eq(p.refParamType.typeName, "") {
out.typeName = String_Concat(p.refParamType.pointerPointee.typeName, "*");
} else if !String_Eq(p.refParamType.typeName, "") {
out.typeName = 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 { } else {
out.typeName = ""; out.typeName = "";
} }
+10
View File
@@ -109,6 +109,16 @@ func parserParseType(p: *Parser) -> *TypeExpr {
te.line = line; te.line = line;
te.column = col; te.column = col;
te.pointerPointee = parserParseType(p); 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; return te;
} }