static pic_value pic_port_eof_object_p(pic_state *pic) { pic_value v; pic_get_args(pic, "o", &v); if (pic_vtype(v) == PIC_VTYPE_EOF) { return pic_true_value(); } else { return pic_false_value(); } }
struct pic_dict * pic_attr(pic_state *pic, pic_value obj) { xh_entry *e; if (pic_vtype(obj) != PIC_VTYPE_HEAP) { pic_errorf(pic, "attribute: expected heap object, but got immediate value ~s", obj); } e = xh_get_ptr(&pic->attrs, pic_ptr(obj)); if (e == NULL) { struct pic_dict *dict = pic_make_dict(pic); e = xh_put_ptr(&pic->attrs, pic_ptr(obj), &dict); assert(dict == xh_val(e, struct pic_dict *)); } return xh_val(e, struct pic_dict *); }