+ast_member* ast_member_new(lex_ctx ctx, ast_expression *owner, unsigned int field)
+{
+ ast_instantiate(ast_member, ctx, ast_member_delete);
+ if (field >= 3) {
+ mem_d(self);
+ return NULL;
+ }
+
+ ast_expression_init((ast_expression*)self, (ast_expression_codegen*)&ast_member_codegen);
+
+ self->expression.vtype = TYPE_FLOAT;
+ self->expression.next = NULL;
+
+ self->owner = owner;
+ self->field = field;
+
+ return self;
+}
+
+void ast_member_delete(ast_member *self)
+{
+ ast_unref(self->owner);
+ ast_expression_delete((ast_expression*)self);
+ mem_d(self);
+}
+