]> ocean-lang.org Git - ocean/blobdiff - csrc/oceani.mdc
oceani: allow field references on references.
[ocean] / csrc / oceani.mdc
index e1a2cb076b49c43fc8c5dd95dc2e822929ff875c..1e2bfde472dc7ac727cb7ee2ab14137c6c8794e5 100644 (file)
@@ -3053,6 +3053,22 @@ anything in the heap or on the stack.  A reference can be assigned
                return val->ref != NULL;
        }
 
+       static struct type *reference_fieldref(struct type *t, struct parse_context *c,
+                                              struct fieldref *f, struct value **vp)
+       {
+               struct type *rt = t->reference.referent;
+
+               if (rt->fieldref) {
+                       if (vp)
+                               *vp = (*vp)->ref;
+                       return rt->fieldref(rt, c, f, vp);
+               }
+               type_err(c, "error: field reference on %1 is not supported",
+                                f->left, rt, 0, NULL);
+               return Tnone;
+       }
+
+
        static struct type reference_prototype = {
                .print_type = reference_print_type,
                .cmp_eq = reference_cmp,
@@ -3060,6 +3076,7 @@ anything in the heap or on the stack.  A reference can be assigned
                .test = reference_test,
                .free = reference_free,
                .compat = reference_compat,
+               .fieldref = reference_fieldref,
                .size = sizeof(void*),
                .align = sizeof(void*),
        };