Branch: Tag:

2001-03-17

2001-03-17 16:37:43 by Henrik Grubbström (Grubba) <grubba@grubba.org>

The type type is now a complex type.

Rev: src/builtin_functions.c:1.353
Rev: src/encode.c:1.92
Rev: src/operators.c:1.130
Rev: src/pike_types.c:1.162
Rev: src/svalue.h:1.80

5:   \*/   /**/   #include "global.h" - RCSID("$Id: pike_types.c,v 1.161 2001/03/05 21:32:52 grubba Exp $"); + RCSID("$Id: pike_types.c,v 1.162 2001/03/17 16:37:43 grubba Exp $");   #include <ctype.h>   #include "svalue.h"   #include "pike_types.h"
416:      void push_assign_type(int marker)   { + #ifdef PIKE_DEBUG +  if ((marker < '0') || (marker > '9')) { +  fatal("Bad assign marker: %d\n", marker); +  } + #endif /* PIKE_DEBUG */    *Pike_compiler->type_stackp = mk_type(T_ASSIGN,    (void *)(ptrdiff_t)marker,    *Pike_compiler->type_stackp,
463:    case T_ARRAY:    case T_MULTISET:    case T_NOT: +  case T_TYPE:    /* Make a new type of the top type, and put it in car. */    *Pike_compiler->type_stackp = mk_type(type,    *Pike_compiler->type_stackp, NULL,
481:       case T_FLOAT:    case T_STRING: -  case T_TYPE: +     case T_PROGRAM:    case T_MIXED:    case T_VOID:
531:    case T_ARRAY:    case T_MULTISET:    case T_NOT: +  case T_TYPE:    /* car */    push_finished_type(top->car);    break;
543:    case T_OBJECT:    case T_FLOAT:    case T_STRING: -  case T_TYPE: +     case T_PROGRAM:    case T_MIXED:    case T_VOID:
831:    push_reverse_type(T_TUPLE);    break;    } -  if(!strcmp(buf,"type")) { push_type(T_TYPE); break; } +  /* FIXME: Handle type(T) */ +  if(!strcmp(buf,"type")) { push_type(T_MIXED); push_type(T_TYPE); break; }    goto bad_type;       case 'm':
1123: Inside #if defined(PIKE_DEBUG)
   }    case T_FLOAT: printf("float"); break;    case T_STRING: printf("string"); break; -  case T_TYPE: printf("type"); break; +  case T_TYPE: +  printf("type("); +  simple_describe_type(s->car); +  printf(")"); +  break;    case T_PROGRAM: printf("program"); break;    case T_OBJECT:    printf("object(%s %ld)",
1269:    break;       case T_STRING: my_strcat("string"); break; -  case T_TYPE: my_strcat("type"); break; +  case T_TYPE: +  my_strcat("type("); +  my_describe_type(t->car); +  my_strcat(")"); +  break;       case PIKE_T_NAME:    if (!((struct pike_string *)t->car)->size_shift) {
1643:    break;    case T_PROGRAM:    case T_STRING: -  case T_TYPE: +     case T_FLOAT:    case T_INT:    even_lower_and_pike_types(t1, t2);
1675:    case T_ZERO:    case T_PROGRAM:    case T_STRING: -  case T_TYPE: +     case T_FLOAT:    case T_INT:    /* Simple type. Already handled. */
1751:    }    else if((t1->type == t2->type) &&    ((t1->type == T_STRING) || -  (t1->type == T_TYPE) || +     (t1->type == T_FLOAT) ||    (t1->type == T_PROGRAM)))    {
2301:    }       +  case T_TYPE:    case T_MULTISET:    case T_ARRAY:    if(!low_match_types(a->car, b->car,
2308:       case T_FLOAT:    case T_STRING: -  case T_TYPE: +     case T_PROGRAM:    case T_ZERO:    case T_VOID:
2828:    }       +  case T_TYPE:    case T_MULTISET:    case T_ARRAY:    a = a->car;
2837:       case T_FLOAT:    case T_STRING: -  case T_TYPE: +     case T_PROGRAM:    case T_ZERO:    case T_VOID:
3740:    return pop_unfinished_type();    }    +  case T_TYPE: +  type_stack_mark(); +  push_finished_type(s->u.type); +  push_type(T_TYPE); +  return pop_unfinished_type(); +     default:    type_stack_mark();    push_type(s->type);
3921:    low_make_pike_type(*cont, cont), PT_COPY_BOTH);    case T_ARRAY:    case T_MULTISET: +  case T_TYPE:    case T_NOT:    /* Single type */    return mk_type(type, low_make_pike_type(type_string+1, cont), NULL,
3941:       case T_FLOAT:    case T_STRING: -  case T_TYPE: +     case T_PROGRAM:    case T_MIXED:    case T_VOID:
4111:       case T_ARRAY:    case T_MULTISET: +  case T_TYPE:    case T_NOT:    goto one_more_type;   
4126:    case '9':    case T_FLOAT:    case T_STRING: -  case T_TYPE: +     case T_PROGRAM:    case T_MIXED:    case T_VOID:
4482:    push_type(T_TUPLE);    break;    } -  if(!strcmp(buf,"type")) { push_type(T_TYPE); break; } +  /* FIXME: Support for type(T). */ +  if(!strcmp(buf,"type")) { push_type(T_MIXED); push_type(T_TYPE); break; }    goto bad_type;       case 'm':
4822:    /* Prog id */    break;    case T_STRING: my_strcat("string"); break; -  case T_TYPE: my_strcat("type"); break; +  case T_TYPE: +  my_strcat("type("); +  t = low_describe_type(t); +  my_strcat(")"); +  break;       case T_FUNCTION:    {
5217:    break;    case T_PROGRAM:    case T_STRING: -  case T_TYPE: +     case T_FLOAT:    case T_INT:    even_lower_and_pike_types(t1, t2);
5250:    case T_ZERO:    case T_PROGRAM:    case T_STRING: -  case T_TYPE: +     case T_FLOAT:    case T_INT:    /* Simple type. Already handled. */
5328:    push_type(T_SCOPE);    }    else if((EXTRACT_UCHAR(t1)==T_STRING && EXTRACT_UCHAR(t2)==T_STRING) || -  (EXTRACT_UCHAR(t1)==T_TYPE && EXTRACT_UCHAR(t2)==T_TYPE) || +     (EXTRACT_UCHAR(t1)==T_FLOAT && EXTRACT_UCHAR(t2)==T_FLOAT) ||    (EXTRACT_UCHAR(t1)==T_PROGRAM && EXTRACT_UCHAR(t2)==T_PROGRAM))    {
5867:    }       +  case T_TYPE:    case T_MULTISET:    case T_ARRAY:    if(!low_match_types(++a,++b,flags & ~(A_EXACT|B_EXACT))) return 0;       case T_FLOAT:    case T_STRING: -  case T_TYPE: +     case T_PROGRAM:    case T_ZERO:    case T_VOID:
6379:    }       +  case T_TYPE:    case T_MULTISET:    case T_ARRAY:    if(!low_pike_types_le(++a, ++b, 0, flags)) return 0;       case T_FLOAT:    case T_STRING: -  case T_TYPE: +     case T_PROGRAM:    case T_ZERO:    case T_VOID:
7256:    return pop_unfinished_type();    }    +  case T_TYPE: +  type_stack_mark(); +  push_finished_type(s->u.type); +  push_type(T_TYPE); +  return pop_unfinished_type(); +     default:    type_stack_mark();    push_type(s->type);
7461:    multiset_type_string = CONSTTYPE(tMultiset);    mapping_type_string = CONSTTYPE(tMapping);    function_type_string = CONSTTYPE(tFunction); -  type_type_string = CONSTTYPE(tType); +  type_type_string = CONSTTYPE(tType(tMix));    void_type_string = CONSTTYPE(tVoid);    zero_type_string = CONSTTYPE(tZero);    any_type_string = CONSTTYPE(tOr(tVoid,tMix));