pike.git / src / las.cmod

version» Context lines:

pike.git/src/las.cmod:706:   #define mkemptynode() dmalloc_touch(node *, debug_mkemptynode())         static int is_automap_arg_list(node *n)   {    if(!n) return 0;    switch(n->token)    {    default: return 0;    case F_ARG_LIST: -  return is_automap_arg_list(CAR(n)) || -  is_automap_arg_list(CDR(n)); +  { +  int car_depth = is_automap_arg_list(CAR(n)); +  int cdr_depth = is_automap_arg_list(CDR(n)); +  if (car_depth > cdr_depth) return car_depth; +  return cdr_depth; +  }    -  case F_AUTO_MAP_MARKER: return 1; +  case F_AUTO_MAP_MARKER: +  { +  int depth = 0; +  while (n && (n->token == F_AUTO_MAP_MARKER)) { +  depth++; +  n = CAR(n);    } -  +  return depth;    } -  +  } + }      static int apply_opt_flags_for_ref(struct program *prog, int fun);      static int apply_opt_flags_for_sval(struct svalue *s)   {    switch(TYPEOF(*s))    {    case T_FUNCTION:    if (SUBTYPEOF(*s) == FUNCTION_BUILTIN)    {
pike.git/src/las.cmod:4106:    }       if ((n->type = new_get_return_type(dmalloc_touch(struct pike_type *, f),    0))) {    /* Type/argument-check OK. */    debug_malloc_touch(n->type);       free_type(f);    if(n->token == F_AUTO_MAP)    { +  int depth;    type_stack_mark();    push_finished_type(n->type); -  +  for (depth = is_automap_arg_list(CDR(n)); depth > 0; depth--) {    push_unlimited_array_type(T_ARRAY); -  +  }    free_type(n->type);    n->type = pop_unfinished_type();    }    break;    }       /* Too few arguments or similar. */    copy_pike_type(n->type, mixed_type_string);       if ((s = get_first_arg_type(dmalloc_touch(struct pike_type *, f),