Virtual selectors
Where ordinary selectors specify a value stored in some object, virtual selectors specify a function to call to compute a value associated with some object. Use them to replace the special case xdump ver by new table EF_VERSION. Move configkeys[] to lib/common because nsc_init() needs it to initialize empfile[EF_VERSION].cadef.
This commit is contained in:
parent
38047a62f7
commit
da8a1daeef
12 changed files with 541 additions and 482 deletions
|
@ -69,6 +69,17 @@ nstr_exec_val(struct valstr *val, natid cnum, void *ptr, nsc_type want)
|
|||
valtype = val->val_type;
|
||||
break;
|
||||
case NSC_OFF:
|
||||
if (val->val_as.sym.get) {
|
||||
do {
|
||||
ptr = val->val_as.sym.get(val, cnum, ptr);
|
||||
} while (ptr && val->val_as.sym.get);
|
||||
if (!ptr) {
|
||||
valtype = val->val_type;
|
||||
val->val_cat = NSC_VAL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
valtype = NSC_LONG;
|
||||
memb_ptr = ptr;
|
||||
memb_ptr += val->val_as.sym.off;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue