plum

#treesitter#compiler#wasm

git clone https://git.pyrossh.dev/plum

A statically typed, imperative programming language inspired by rust, python


4306b97 — Peter John 2026-11-02T19:49:59+05:30
T5: field access through a trait
Files changed (1) hide show
  1. plum-checker/src/unions.rs +6 -3
plum-checker/src/unions.rs CHANGED
@@ -167,6 +167,9 @@ pub fn memberFallback(
167
167
  let qualifying: Vec<String> = memberOfEnums(obj, ctx)
168
168
  .into_iter()
169
169
  .filter(|e| {
170
+ if crate::traits::isTrait(e, ctx) {
171
+ return false;
172
+ }
170
173
  let generic = ctx
171
174
  .enum_variants
172
175
  .values()
@@ -594,11 +597,11 @@ pub fn traitField(
594
597
  ctx: &CheckCtx,
595
598
  ) -> Option<Result<PlumType, String>> {
596
599
  let (en, args) = enumOf(obj)?;
597
- let ms = members(en, args, ctx);
600
+ if !crate::traits::isTrait(en, ctx) {
598
- if ms.is_empty() {
599
601
  return None;
600
602
  }
603
+ let ms = members(en, args, ctx);
601
- let fields = commonFields(&ms, ctx)?;
604
+ let fields = commonFields(&ms, ctx).unwrap_or_default();
602
605
  if !fields.iter().any(|f| f == field) {
603
606
  return Some(Err(format!("trait {en} has no field {field}")));
604
607
  }