feat: add enum path expression support in codegen

- Support ekPath in lowerExpr for enum variants (Color::Red → Color_Red)
- Support module paths (Std::Io::PrintLine → Std_Io_PrintLine)
- Add enums.bux example demonstrating enum usage
- Enums now compile and run correctly
This commit is contained in:
2026-05-30 23:11:03 +03:00
parent 3b03d43dd1
commit 52608d5601
2 changed files with 40 additions and 0 deletions
+34
View File
@@ -0,0 +1,34 @@
// Enums - Enumeration types
extern func Std_Io_PrintLine(s: String);
extern func Std_Io_PrintInt(n: int);
enum Color {
Red,
Green,
Blue
}
func ColorName(c: Color) -> String {
if c == Color::Red {
return "Red";
}
if c == Color::Green {
return "Green";
}
if c == Color::Blue {
return "Blue";
}
return "Unknown";
}
func Main() -> int {
let myColor: Color = Color::Green;
Std_Io_PrintLine("My color is:");
Std_Io_PrintLine(ColorName(myColor));
Std_Io_PrintLine("Color value:");
Std_Io_PrintInt(myColor as int);
Std_Io_PrintLine("");
return 0;
}
+6
View File
@@ -127,6 +127,12 @@ proc lowerExpr(ctx: var LowerCtx, expr: Expr): HirNode =
of ekIdent:
return hirVar(expr.exprIdent, typ, loc)
of ekPath:
# Handle enum variants: Color::Red → Color_Red
# or module paths: Std::Io::PrintLine → Std_Io_PrintLine
let mangledName = expr.exprPath.join("_")
return hirVar(mangledName, typ, loc)
of ekSelf:
return hirSelf(typ, loc)