Files
bux-lang/examples/algebraic_enums.bux
T
dimgigov cf074bec89 feat: add algebraic enums (tagged unions) support
- Generate tagged unions in C backend for enums with data
- Add HirEnumVariant type with fields and namedFields
- Support _Tag and _Data field access in sema
- Support enum variant constants (Result_Ok, Result_Err)
- Support _Data union field access (Ok_0, Err_0, etc.)
- Add algebraic_enums.bux example

Example:
  enum Result {
      Ok(int),
      Err(String)
  }

  let r: Result = Result { tag: Result_Ok };
  r.data.Ok_0 = 42;
2026-05-30 23:50:33 +03:00

30 lines
652 B
Plaintext

// Algebraic Enums - Enums with data (tagged unions)
extern func Std_Io_PrintLine(s: String);
extern func Std_Io_PrintInt(n: int);
enum Result {
Ok(int),
Err(String)
}
func Main() -> int {
let r1: Result = Result { tag: Result_Ok };
r1.data.Ok_0 = 42;
let r2: Result = Result { tag: Result_Err };
r2.data.Err_0 = "error message";
if r1.tag == Result_Ok {
Std_Io_PrintLine("r1 is Ok:");
Std_Io_PrintInt(r1.data.Ok_0);
Std_Io_PrintLine("");
}
if r2.tag == Result_Err {
Std_Io_PrintLine("r2 is Err:");
Std_Io_PrintLine(r2.data.Err_0);
}
return 0;
}