jitcraft/SemanticAnalysis.cpp
changeset 67 b765a6383849
parent 66 cbba1997dc71
child 68 b40b0e18a918
     1.1 --- a/jitcraft/SemanticAnalysis.cpp	Mon Jul 09 21:40:20 2012 -0700
     1.2 +++ b/jitcraft/SemanticAnalysis.cpp	Mon Jul 09 22:25:52 2012 -0700
     1.3 @@ -236,6 +236,11 @@
     1.4          if (!type)
     1.5              return NULL;
     1.6  
     1.7 +        if (type->isConst()) {
     1.8 +            cc_.reportError(expression->pos(), Message_ReferenceIsConstant);
     1.9 +            return NULL;
    1.10 +        }
    1.11 +
    1.12          return type->contained();
    1.13      }
    1.14  
    1.15 @@ -254,8 +259,13 @@
    1.16      if (!var->type())
    1.17          return NULL;
    1.18  
    1.19 -    if  (var->type()->isReference())
    1.20 +    if  (var->type()->isReference()) {
    1.21 +        if (var->type()->isConst()) {
    1.22 +            cc_.reportError(expression->pos(), Message_ReferenceIsConstant);
    1.23 +            return NULL;
    1.24 +        }
    1.25          return var->type()->contained();
    1.26 +    }
    1.27      return var->type();
    1.28  }
    1.29  
    1.30 @@ -479,7 +489,7 @@
    1.31                  size = init->elements();
    1.32              }
    1.33  
    1.34 -            type = zone_->types()->unsafeArray(type, size);
    1.35 +            type = zone_->types()->unsafeArray(type, size, false);
    1.36              if (!type)
    1.37                  return;
    1.38  
    1.39 @@ -547,7 +557,7 @@
    1.40                  return NULL;
    1.41              }
    1.42  
    1.43 -            type = zone_->types()->getReference(type);
    1.44 +            type = zone_->types()->getReference(type, parameter->isConst());
    1.45              if (!type)
    1.46                  return false;
    1.47          } else if (parameter->dimensions()) {
    1.48 @@ -570,7 +580,7 @@
    1.49                      size = box.toInt();
    1.50                  }
    1.51  
    1.52 -                type = Type::NewArray(zone_, type, size, false);
    1.53 +                type = zone_->types()->unsafeArray(type, size, parameter->isConst());
    1.54                  if (!type)
    1.55                      return false;
    1.56              }