1.1 --- a/jitcraft/SemanticAnalysis.cpp Mon Jul 09 01:22:03 2012 -0700
1.2 +++ b/jitcraft/SemanticAnalysis.cpp Mon Jul 09 21:40:20 2012 -0700
1.3 @@ -542,9 +542,38 @@
1.4 }
1.5
1.6 if (parameter->reference()) {
1.7 + if (parameter->dimensions()) {
1.8 + cc_.reportError(parameter->variable()->pos(), Message_ArrayCantBeReference);
1.9 + return NULL;
1.10 + }
1.11 +
1.12 type = zone_->types()->getReference(type);
1.13 if (!type)
1.14 return false;
1.15 + } else if (parameter->dimensions()) {
1.16 + if (parameter->dimensions()->length() > Type::MAX_UNSAFE_ARRAY_DEPTH) {
1.17 + cc_.reportError(node->pos(), Message_MaximumArrayDepth);
1.18 + return false;
1.19 + }
1.20 +
1.21 + for (size_t i = parameter->dimensions()->length() - 1;
1.22 + i < parameter->dimensions()->length();
1.23 + i++)
1.24 + {
1.25 + int size = Type::UNKNOWN_SIZE;
1.26 + if (Expression *expr = parameter->dimensions()->at(i)) {
1.27 + BoxedPrimitive box;
1.28 + if (!EvaluateForConstant(expr, &box)) {
1.29 + cc_.reportError(expr->pos(), Message_ArraySizeMustBeConstant);
1.30 + return false;
1.31 + }
1.32 + size = box.toInt();
1.33 + }
1.34 +
1.35 + type = Type::NewArray(zone_, type, size, false);
1.36 + if (!type)
1.37 + return false;
1.38 + }
1.39 }
1.40
1.41 args->set(zone_, i, type);
1.42 @@ -731,6 +760,8 @@
1.43 if (actual->isReference() && !given->isReference())
1.44 scope_->setUsesLifoHeap();
1.45 }
1.46 +
1.47 + node->setType(fun->type()->returnType());
1.48 }
1.49
1.50 void