Example #1
0
void
rb_attr(VALUE klass, ID id, int read, int write, int ex)
{
    const char *name;
    int noex;

    if (!ex) {
	noex = NOEX_PUBLIC;
    }
    else {
	// TODO honor current scope ex
	noex = NOEX_PUBLIC;
    }

    if (!rb_is_local_id(id) && !rb_is_const_id(id)) {
	rb_name_error(id, "invalid attribute name `%s'", rb_id2name(id));
    }
    name = rb_id2name(id);
    if (!name) {
	rb_raise(rb_eArgError, "argument needs to be symbol or string");
    }
    rb_vm_define_attr((Class)klass, name, read, write, noex);
    if (write) {
	rb_objc_define_kvo_setter(klass, id);
    }
}
Example #2
0
void
rb_attr(VALUE klass, ID id, int read, int write, int ex)
{
    if (!rb_is_local_id(id) && !rb_is_const_id(id)) {
	rb_name_error(id, "invalid attribute name `%s'", rb_id2name(id));
    }
    const char *name = rb_id2name(id);
    if (name == NULL) {
	rb_raise(rb_eArgError, "argument needs to be symbol or string");
    }
    rb_vm_define_attr((Class)klass, name, read, write);
    if (write) {
	rb_objc_define_kvo_setter(klass, id);
    }
}