Index: trunk/src_plugins/query/fnc_layer_setup.c =================================================================== --- trunk/src_plugins/query/fnc_layer_setup.c (revision 33084) +++ trunk/src_plugins/query/fnc_layer_setup.c (revision 33085) @@ -39,6 +39,8 @@ /* query result: loc and target */ layer_setup_loc_t res_loc; layer_setup_target_t res_target; + + unsigned valid:1; /* 0 on syntax error */ } layer_setup_t; void pcb_qry_uninit_layer_setup(pcb_qry_exec_t *ectx) @@ -222,7 +224,8 @@ return ls; ls = calloc(sizeof(layer_setup_t), 1); - layer_setup_compile_(ectx, ls, s); + if (layer_setup_compile_(ectx, ls, s) == 0) + ls->valid = 1; htpp_set(&ectx->layer_setup_precomp, (void *)s, ls); return ls; } @@ -420,6 +423,9 @@ obj = (pcb_any_obj_t *)argv[0].data.obj; ls = layer_setup_compile(ectx, lss); + if (!ls->valid) + return -1; + rnd_trace("layer_setup: %p/'%s' -> %p\n", lss, lss, ls); TODO("cache result: obj-ls -> direction (+1 or -1) where it was true or 0 if it was false");