2 do_defined(TARG,arg,gimme,arglast)
9 register int retarg = arglast[0] + 1;
14 if ((arg[1].arg_type & A_MASK) != A_LEXPR)
15 fatal("Illegal argument to defined()");
16 arg = arg[1].arg_ptr.arg_arg;
19 if (type == O_SUBR || type == O_DBSUBR) {
20 if ((arg[1].arg_type & A_MASK) == A_WORD)
21 retval = stab_sub(arg[1].arg_ptr.arg_stab) != 0;
23 STR *tmpstr = STAB_STR(arg[1].arg_ptr.arg_stab);
25 retval = tmpstr && stab_sub(stabent(str_get(tmpstr),TRUE)) != 0;
28 else if (type == O_ARRAY || type == O_LARRAY ||
29 type == O_ASLICE || type == O_LASLICE )
30 retval = ((ary = stab_xarray(arg[1].arg_ptr.arg_stab)) != 0
31 && ary->ary_max >= 0 );
32 else if (type == O_HASH || type == O_LHASH ||
33 type == O_HSLICE || type == O_LHSLICE )
34 retval = ((hash = stab_xhash(arg[1].arg_ptr.arg_stab)) != 0
38 str_numset(TARG,(double)retval);
39 stack->ary_array[retarg] = TARG;