Index: src_plugins/query/fields.sphash =================================================================== --- src_plugins/query/fields.sphash (revision 17019) +++ src_plugins/query/fields.sphash (revision 17020) @@ -39,3 +39,4 @@ smirror plated shape +subc Index: src_plugins/query/query_access.c =================================================================== --- src_plugins/query/query_access.c (revision 17019) +++ src_plugins/query/query_access.c (revision 17020) @@ -35,6 +35,7 @@ #include "layer.h" #include "fields_sphash.h" #include "obj_pstk_inlines.h" +#include "obj_subc_parent.h" #define APPEND(_lst_, _obj_) vtp0_append((vtp0_t *)_lst_, _obj_) @@ -615,9 +616,10 @@ static int field_subc_obj(pcb_any_obj_t *obj, pcb_qry_node_t *fld, pcb_qry_val_t *res) { const char *s1; + pcb_subc_t *parent = pcb_obj_parent_subc(obj); /* if parent is not a subc (or not available) evaluate to invalid */ - if (obj->parent_type != PCB_PARENT_SUBC) + if (parent == NULL) PCB_QRY_RET_INV(res); /* check subfield, if there's none, return the subcircuit object */ @@ -624,12 +626,12 @@ fld2str_opt(s1, fld, 0); if (s1 == NULL) { res->type = PCBQ_VT_OBJ; - res->data.obj = (pcb_any_obj_t *)obj->parent.subc; + res->data.obj = (pcb_any_obj_t *)parent; return 0; } /* return subfields of the subcircuit */ - return field_subc_from_ptr(obj->parent.subc, fld, res); + return field_subc_from_ptr(parent, fld, res); } /***/ @@ -682,6 +684,9 @@ if (fh1 == query_fields_type) PCB_QRY_RET_INT(res, obj->type); + if (fh1 == query_fields_subc) + return field_subc_obj(obj, fld->next, res); + switch(obj->type) { /* case PCB_OBJ_POINT: return field_point(obj, fld, res);*/ case PCB_OBJ_LINE: return field_line(obj, fld, res);