X-Git-Url: https://ocean-lang.org/code/?p=ocean;a=blobdiff_plain;f=csrc%2Foceani.mdc;h=1e2bfde472dc7ac727cb7ee2ab14137c6c8794e5;hp=e1a2cb076b49c43fc8c5dd95dc2e822929ff875c;hb=6e9a6bc829c370f60148deb155c3952edc6895f2;hpb=1f2bd5d4d22797071a344647191e63c7d2fa6f67 diff --git a/csrc/oceani.mdc b/csrc/oceani.mdc index e1a2cb0..1e2bfde 100644 --- a/csrc/oceani.mdc +++ b/csrc/oceani.mdc @@ -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*), };