pike.git / src / pike_types.c

version» Context lines:

pike.git/src/pike_types.c:1954: Inside #if defined(PIKE_DEBUG)
   break;       case T_SCOPE: fprintf(stderr, "scope"); break;    case T_TUPLE: fprintf(stderr, "tuple"); break;    case T_ASSIGN: fprintf(stderr, "="); break;    case T_INT:    {    INT32 min=extract_type_int(a+e+1);    INT32 max=extract_type_int(a+e+1+sizeof(INT32));    fprintf(stderr, "int"); -  if(min!=MIN_INT32 || max!=MAX_INT32) +  if(min!=MIN_INT32 || max!=MAX_INT32) { +  if (!min && max && !(max & (max+1))) { +  int j = 0; +  while (max) { +  max >>= 1; +  j++; +  } +  fprintf(stderr, "(%dbit)", j); +  } else {    fprintf(stderr, "(%ld..%ld)",(long)min,(long)max); -  +  } +  }    e+=sizeof(INT32)*2;    break;    }    case T_FLOAT: fprintf(stderr, "float"); break;    case T_STRING: fprintf(stderr, "string"); break;    case T_TYPE: fprintf(stderr, "type"); break;    case T_PROGRAM: fprintf(stderr, "program"); break;    case T_OBJECT:    fprintf(stderr, "object(%s %ld)",    EXTRACT_UCHAR(a+e+1)?"is":"implements",
pike.git/src/pike_types.c:2043:    case T_ASSIGN:    fprintf(stderr, "(%"PRINTPTRDIFFT"d = ", CAR_TO_INT(s));    simple_describe_type(s->cdr);    fprintf(stderr, ")");    break;    case T_INT:    {    INT32 min = CAR_TO_INT(s);    INT32 max = CDR_TO_INT(s);    fprintf(stderr, "int"); -  if(min!=MIN_INT32 || max!=MAX_INT32) +  if(min!=MIN_INT32 || max!=MAX_INT32) { +  if (!min && max && !(max & (max+1))) { +  int j = 0; +  while (max) { +  max >>= 1; +  j++; +  } +  fprintf(stderr, "(%dbit)", j); +  } else {    fprintf(stderr, "(%ld..%ld)",(long)min,(long)max); -  +  } +  }    break;    }    case T_FLOAT: fprintf(stderr, "float"); break;    case T_STRING:    {    INT32 min;    INT32 max;    s = s->car;    fprintf(stderr, "string");    if (s != int_type_string) {
pike.git/src/pike_types.c:2080:    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+1))) { +  int j = 0; +  while (max) { +  max >>= 1; +  j++; +  } +  fprintf(stderr, "%dbit", j); +  } else {    if (min != MIN_INT32) {    fprintf(stderr, "%d", min);    }    fprintf(stderr, "..");    if (max != MAX_INT32) {    fprintf(stderr, "%d", max);    } -  +  }    fprintf(stderr, " | ");    s = s->cdr;    }    while(s->type == T_ASSIGN) {    s = s->cdr;    }    if (s->type == T_ZERO) {    fprintf(stderr, "zero");    } 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); -  +  if (!min && max && !(max & (max+1))) { +  int j = 0; +  while (max) { +  max >>= 1; +  j++; +  } +  fprintf(stderr, "%dbit", j); +  } else {    if (min != MIN_INT32) {    fprintf(stderr, "%d", min);    }    fprintf(stderr, "..");    if (max != MAX_INT32) {    fprintf(stderr, "%d", max);    }    } -  +  }    fprintf(stderr, ")");    }    break;    }    case T_TYPE:    fprintf(stderr, "type(");    simple_describe_type(s->car);    fprintf(stderr, ")");    break;    case T_PROGRAM:
pike.git/src/pike_types.c:2268:    case T_VOID: my_strcat("void"); break;    case T_ZERO: my_strcat("zero"); break;    case T_MIXED: my_strcat("mixed"); break;    case PIKE_T_UNKNOWN: my_strcat("unknown"); break;    case T_INT:    {    INT32 min=CAR_TO_INT(t);    INT32 max=CDR_TO_INT(t);    my_strcat("int");    -  if(min!=MIN_INT32 || max!=MAX_INT32) -  { +  if (!min && max && !(max & (max+1))) { +  int j = 0; +  while (max) { +  max >>= 1; +  j++; +  } +  sprintf(buffer, "(%dbit)", j); +  my_strcat(buffer); +  } else if(min!=MIN_INT32 || max!=MAX_INT32) {    sprintf(buffer,"(%ld..%ld)",(long)min,(long)max);    my_strcat(buffer);    }    break;    }    case T_FLOAT: my_strcat("float"); break;    case T_PROGRAM:    if ((t->car->type == T_OBJECT) &&    (!t->car->cdr)) {    my_strcat("program");
pike.git/src/pike_types.c:2342:    char_type = char_type->cdr;    }   #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+1))) { +  int j = 0; +  while (max) { +  max >>= 1; +  j++; +  } +  sprintf(buffer, "%dbit", j); +  my_strcat(buffer); +  } else {    if (min != MIN_INT32) {    sprintf(buffer, "%d", min);    my_strcat(buffer);    }    my_strcat("..");    if (max != MAX_INT32) {    sprintf(buffer, "%d", max);    my_strcat(buffer);    } -  +  }    my_strcat(" | ");    t = t->cdr;    }    while(t->type == T_ASSIGN) {    t = t->cdr;    }   #ifdef PIKE_DEBUG    if (t->type != T_INT) {    Pike_fatal("Invalid node type (%d:%s) in string type.\n",    t->type, get_name_of_type(t->type));    }   #endif /* PIKE_DEBUG */    min = CAR_TO_INT(t);    max = CDR_TO_INT(t); -  +  if (!min && max && !(max & (max+1))) { +  int j = 0; +  while (max) { +  max >>= 1; +  j++; +  } +  sprintf(buffer, "%dbit", j); +  my_strcat(buffer); +  } else {    if (min != MIN_INT32) {    sprintf(buffer, "%d", min);    my_strcat(buffer);    }    my_strcat("..");    if (max != MAX_INT32) {    sprintf(buffer, "%d", max);    my_strcat(buffer);    } -  +  }    my_strcat(")");    }    break;    }    case T_TYPE:    my_strcat("type(");    my_describe_type(t->car);    my_strcat(")");    break;