static int func_getvar2 (void *vo, NCD_string_id_t name, NCDValMem *mem, NCDValRef *out) { struct instance *o = vo; if (name == NCD_STRING_EMPTY) { *out = NCDVal_NewCopy(mem, o->result); return 1; } return 0; }
static int func_getvar2 (void *vo, NCD_string_id_t name, NCDValMem *mem, NCDValRef *out) { struct instance *o = vo; if (name == NCD_STRING_SUCCEEDED) { *out = ncd_make_boolean(mem, o->succeeded, o->i->params->iparams->string_index); return 1; } if (o->succeeded && name == NCD_STRING_EMPTY) { *out = NCDVal_NewCopy(mem, o->value); return 1; } return 0; }
static void concatlist_eval (NCDCall call) { NCDValRef args_list; if (!ncd_eval_func_args(&call, NCDCall_ResMem(&call), &args_list)) { return; } size_t arg_count = NCDVal_ListCount(args_list); bsize_t elem_count = bsize_fromsize(0); for (size_t i = 0; i < arg_count; i++) { NCDValRef arg = NCDVal_ListGet(args_list, i); if (!NCDVal_IsList(arg)) { return FunctionLog(&call, BLOG_ERROR, "concatlist: argument is not a list"); } elem_count = bsize_add(elem_count, bsize_fromsize(NCDVal_ListCount(arg))); } if (elem_count.is_overflow) { return FunctionLog(&call, BLOG_ERROR, "concatlist: count overflow"); } NCDValRef res = NCDVal_NewList(NCDCall_ResMem(&call), elem_count.value); if (NCDVal_IsInvalid(res)) { return; } for (size_t i = 0; i < arg_count; i++) { NCDValRef arg = NCDVal_ListGet(args_list, i); size_t arg_list_count = NCDVal_ListCount(arg); for (size_t j = 0; j < arg_list_count; j++) { NCDValRef copy = NCDVal_NewCopy(NCDCall_ResMem(&call), NCDVal_ListGet(arg, j)); if (NCDVal_IsInvalid(copy)) { return; } if (!NCDVal_ListAppend(res, copy)) { return; } } } NCDCall_SetResult(&call, res); }