diff --git a/src/builtin_functions.c b/src/builtin_functions.c index 3cdc997c0c8319b66d85d0a16f55485e2f444f75..b6f58e72b993540d69a4b8d62890e6ab8f11a486 100644 --- a/src/builtin_functions.c +++ b/src/builtin_functions.c @@ -1366,18 +1366,17 @@ PMOD_EXPORT void f_has_index(INT32 args) push_int(t); break; - case T_MULTISET: case T_MAPPING: - f_index(2); - f_zero_type(1); - -#ifdef PIKE_DEBUG - if(TYPEOF(Pike_sp[-1]) != T_INT) - PIKE_ERROR("has_index", - "Function `zero_type' gave incorrect result.\n", Pike_sp, args); -#endif - Pike_sp[-1].u.integer = !Pike_sp[-1].u.integer; - break; + t=!!low_mapping_lookup( Pike_sp[-2].u.mapping, Pike_sp-1 ); + pop_n_elems(2); + push_int(t); + break; + + case T_MULTISET: + t = multiset_member( Pike_sp[-2].u.multiset, Pike_sp-1 ); + pop_n_elems(2); + push_int(t); + break; case T_OBJECT: case T_PROGRAM: