home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / a_utils / perl / perl5a1.lha / perl5alpha1 / do / defined < prev    next >
Encoding:
Text File  |  1992-08-15  |  1.1 KB  |  43 lines

  1. int                    /*SUPPRESS 590*/
  2. do_defined(TARG,arg,gimme,arglast)
  3. STR *TARG;
  4. register ARG *arg;
  5. int gimme;
  6. int *arglast;
  7. {
  8.     register int type;
  9.     register int retarg = arglast[0] + 1;
  10.     int retval;
  11.     ARRAY *ary;
  12.     HASH *hash;
  13.  
  14.     if ((arg[1].arg_type & A_MASK) != A_LEXPR)
  15.     fatal("Illegal argument to defined()");
  16.     arg = arg[1].arg_ptr.arg_arg;
  17.     type = arg->arg_type;
  18.  
  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;
  22.     else {
  23.         STR *tmpstr = STAB_STR(arg[1].arg_ptr.arg_stab);
  24.  
  25.         retval = tmpstr && stab_sub(stabent(str_get(tmpstr),TRUE)) != 0;
  26.     }
  27.     }
  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
  35.         && hash->tbl_array);
  36.     else
  37.     retval = FALSE;
  38.     str_numset(TARG,(double)retval);
  39.     stack->ary_array[retarg] = TARG;
  40.     return retarg;
  41. }
  42.  
  43.