pike.git / src / pike_types.cmod

version» Context lines:

pike.git/src/pike_types.cmod:2358:   #ifdef PIKE_DEBUG    if(ts!=Pike_compiler->type_stackp || ptms!=Pike_compiler->pike_type_mark_stackp)    Pike_fatal("Type stack whacked in parse_type.\n");   #endif       return ret;   }      void simple_describe_type(struct pike_type *s)   { +  struct pike_type *sub = NULL;    DECLARE_CYCLIC();    if (BEGIN_CYCLIC(s, NULL)) {    Pike_fatal("Circular type!\n");    }    SET_CYCLIC_RET(1);       if (s) {    /* fprintf(stderr, "[[[%p]]]", s); */    switch(s->type & PIKE_T_MASK) {    case '0': case '1': case '2': case '3': case '4':
pike.git/src/pike_types.cmod:2445:    INT32 max;    fprintf(stderr, "string");    if ((s->car == int_pos_type_string) && (s->cdr == int_type_string)) {    break;    }    fprintf(stderr, "(");    if (s->car != int_pos_type_string) {    simple_describe_type(s->car);    fprintf(stderr, ": ");    } -  s = s->cdr; -  if (s && (s != int_type_string)) { -  while (s->type == T_OR) { +  sub = s->cdr; +  if (sub && (sub != int_type_string)) { +  while (sub->type == T_OR) {    struct pike_type *char_type = s->car; -  while(char_type->type == T_ASSIGN) { +  while(char_type && (char_type->type == T_ASSIGN)) {    char_type = char_type->cdr;    }    -  +  if (!char_type) { +  sub = sub->cdr; +  continue; +  }    if (char_type->type == T_ZERO) {    fprintf(stderr, "zero | "); -  s = s->cdr; +  sub = sub->cdr;    continue;    }    if (char_type->type == T_MIXED) {    fprintf(stderr, "mixed | ");    s = s->cdr;    continue;    }    if ((char_type->type >= '0') && (char_type->type <= '9')) { -  fprintf(stderr, "$%c | ", char_type->type); -  s = s->cdr; +  fprintf(stderr, "$%d | ", char_type->type - '0'); +  sub = sub->cdr;    continue;    } -  +  if ((char_type->type & PIKE_T_MASK) == PIKE_T_OPERATOR) { +  simple_describe_type(char_type); +  fprintf(stderr, " | "); +  sub = sub->cdr; +  continue; +  }   #ifdef PIKE_DEBUG    if (char_type->type != T_INT) {    Pike_fatal("Invalid node type (%d:%s) in string type.\n",    char_type->type, get_name_of_type(char_type->type));    }   #endif /* PIKE_DEBUG */    min = CAR_TO_INT(char_type);    max = CDR_TO_INT(char_type);    if (!min && max && max != MAX_INT32 && !(max & (max+1))) {    int j = 0;
pike.git/src/pike_types.cmod:2495:    fprintf(stderr, "%d", min);    }    if (max != min) {    fprintf(stderr, "..");    if (max != MAX_INT32) {    fprintf(stderr, "%d", max);    }    }    }    fprintf(stderr, " | "); -  s = s->cdr; +  sub = sub->cdr;    } -  while(s->type == T_ASSIGN) { -  s = s->cdr; -  } -  if (!s) { +  if (!sub) {    fprintf(stderr, "__unknown__"); -  } else if (s->type == T_ZERO) { +  } else if (sub->type == T_ZERO) {    fprintf(stderr, "zero"); -  } else if (s->type == T_MIXED) { +  } else if (sub->type == T_MIXED) {    fprintf(stderr, "mixed"); -  } else if ((s->type >= '0') && (s->type <= '9')) { -  fprintf(stderr, "$%c", s->type); -  } else { - #ifdef PIKE_DEBUG -  if (s->type != T_INT) { -  Pike_fatal("Invalid node type (%d:%s) in string type.\n", -  s->type, get_name_of_type(s->type)); -  } - #endif /* PIKE_DEBUG */ -  min = CAR_TO_INT(s); -  max = CDR_TO_INT(s); +  } else if ((sub->type >= '0') && (sub->type <= '9')) { +  fprintf(stderr, "$%d", sub->type - '0'); +  } else if (sub->type == T_INT) { +  min = CAR_TO_INT(sub); +  max = CDR_TO_INT(sub);    if (!min && max && max != MAX_INT32 && !(max & (max+1))) {    int j = 0;    while (max) {    max >>= 1;    j++;    }    fprintf(stderr, "%dbit", j);    } else {    if ((min != MIN_INT32) || (min == max)) {    fprintf(stderr, "%d", min);    }    if (min != max) {    fprintf(stderr, "..");    if (max != MAX_INT32) {    fprintf(stderr, "%d", max);    }    }    } -  +  } else { +  simple_describe_type(sub);    }    }    fprintf(stderr, ")");    break;    }    case T_TYPE:    fprintf(stderr, "type(");    simple_describe_type(s->car);    fprintf(stderr, ")");    break;
pike.git/src/pike_types.cmod:2558:    fprintf(stderr, ")");    break;    case T_OBJECT:    fprintf(stderr, "object(%s %"PRINTPTRDIFFT"d)",    s->car?"is":"implements",    CDR_TO_INT(s));    break;    case T_FUNCTION:    case T_MANY:    fprintf(stderr, "function("); -  while(s->type == T_FUNCTION) { -  simple_describe_type(s->car); -  s = s->cdr; -  if (s && -  ((s->type == T_FUNCTION) || -  ((s->type == T_MANY) && (s->car != void_type_string)))) { +  sub = s; +  while(sub && (sub->type == T_FUNCTION)) { +  simple_describe_type(sub->car); +  sub = sub->cdr; +  if (!sub) break; +  if ((sub->type == T_FUNCTION) || +  ((sub->type == T_MANY) && +  (!sub->car || (sub->car->type != T_VOID)))) {    fprintf(stderr, ", ");    }    } -  if (!s || (s->type != T_MANY)) { +  if (!sub || (sub->type != T_MANY)) {    fprintf(stderr, ", @"); -  simple_describe_type(s); +  simple_describe_type(sub);    fprintf(stderr, ")");    } else { -  if (!s->car || (s->car->type != T_VOID)) { -  simple_describe_type(s->car); +  if (!sub->car || (sub->car->type != T_VOID)) { +  simple_describe_type(sub->car);    fprintf(stderr, "...");    }    fprintf(stderr, ":"); -  simple_describe_type(s->cdr); +  simple_describe_type(sub->cdr);    fprintf(stderr, ")");    }    break;    case T_ARRAY: /* FIXME: cdr */    fprintf(stderr, "array(");    if (s->car != int_pos_type_string) {    simple_describe_type(s->car);    fprintf(stderr, ":");    }    simple_describe_type(s->cdr);