diff --git a/examples/enums.bux b/examples/enums.bux new file mode 100644 index 0000000..fd62ac4 --- /dev/null +++ b/examples/enums.bux @@ -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; +} diff --git a/src/hir_lower.nim b/src/hir_lower.nim index 2b26852..0b0a42a 100644 --- a/src/hir_lower.nim +++ b/src/hir_lower.nim @@ -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)