src/Types.cpp
changeset 233 bbb498ccb4ac
parent 222 0cde1379b29f
child 235 43287eef2fff
     1.1 --- a/src/Types.cpp	Sat Dec 22 19:48:43 2012 -0800
     1.2 +++ b/src/Types.cpp	Sat Dec 22 23:18:57 2012 -0800
     1.3 @@ -55,8 +55,7 @@
     1.4          return NULL;
     1.5  
     1.6      type->kind_ = PRIMITIVE;
     1.7 -    type->name_ = NULL;
     1.8 -     type->primitive_ = prim;
     1.9 +    type->primitive_ = prim;
    1.10      return type;
    1.11  }
    1.12  
    1.13 @@ -75,7 +74,6 @@
    1.14          return NULL;
    1.15  
    1.16      type->kind_ = ARRAY;
    1.17 -    type->name_ = NULL;
    1.18      type->contained_ = contained;
    1.19      type->elements_ = elements;
    1.20      if (!contained->isArray())
    1.21 @@ -95,7 +93,6 @@
    1.22      assert(contained->isPrimitive());
    1.23  
    1.24      type->kind_ = EXTERNAL_ARRAY;
    1.25 -    type->name_ = NULL;
    1.26      type->contained_ = contained;
    1.27      type->elements_ = DYNAMIC_ARRAY_SIZE;
    1.28      type->levels_ = 1;
    1.29 @@ -110,16 +107,15 @@
    1.30          return NULL;
    1.31  
    1.32      type->kind_ = REFERENCE;
    1.33 -    type->name_ = NULL;
    1.34      type->const_ = false;
    1.35      type->contained_ = contained;
    1.36      return type;
    1.37  }
    1.38  
    1.39 -Type *
    1.40 -Type::NewEnum(Zone *zone, Handle<String> name)
    1.41 +EnumType *
    1.42 +EnumType::New(Zone *zone, Handle<String> name)
    1.43  {
    1.44 -    Local<Type> type(zone, Type::cast(zone->allocate(MapKind_Type, sizeof(Type), Heap::Tenure_Old)));
    1.45 +    Local<EnumType> type(zone, EnumType::cast(zone->allocate(MapKind_EnumType, sizeof(EnumType), Heap::Tenure_Old)));
    1.46      if (!type)
    1.47          return NULL;
    1.48  
    1.49 @@ -138,7 +134,6 @@
    1.50          return NULL;
    1.51  
    1.52      type->kind_ = NATIVE;
    1.53 -    type->name_ = NULL;
    1.54      type->contained_ = NULL;
    1.55      type->fields_ = NULL;
    1.56      type->newMap_ = NULL;
    1.57 @@ -217,9 +212,9 @@
    1.58          return NULL;
    1.59  
    1.60      type->kind_ = STRUCT;
    1.61 -    type->name_ = name;
    1.62      type->newMap_ = NULL;
    1.63      type->fields_ = fields;
    1.64 +    type->name_ = name;
    1.65  
    1.66      // Fill in field offsets.
    1.67      StructureBufferBuilder builder;
    1.68 @@ -259,17 +254,17 @@
    1.69  }
    1.70  
    1.71  FunctionType *
    1.72 -FunctionType::New(Zone *zone, TokenKind token)
    1.73 +FunctionType::New(Zone *zone, Handle<String> name, TokenKind token)
    1.74  {
    1.75      Local<FunctionType> type(zone, FunctionType::cast(zone->allocate(MapKind_FunctionType, sizeof(FunctionType), Heap::Tenure_Old)));
    1.76      if (!type)
    1.77          return NULL;
    1.78  
    1.79      type->kind_ = FUNCTION;
    1.80 -    type->name_ = NULL;
    1.81      type->parameters_ = NULL;
    1.82      type->defaults_ = NULL;
    1.83      type->returnType_ = NULL;
    1.84 +    type->name_ = name;
    1.85      type->token_ = token;
    1.86      return type;
    1.87  }
    1.88 @@ -284,8 +279,10 @@
    1.89          return "function";
    1.90      if (type->isVoid())
    1.91          return "void";
    1.92 -    if (type->isEnum() || type->isStruct())
    1.93 -        return type->name()->chars();
    1.94 +    if (type->isEnum())
    1.95 +        return EnumType::cast(type)->name()->chars();
    1.96 +    if (type->isStruct())
    1.97 +        return StructType::cast(type)->name()->chars();
    1.98      if (type->isReference())
    1.99          type = ReferenceType::cast(type)->contained();
   1.100      switch (type->primitive()) {