src/compiler/NameBinding.cpp
changeset 220 5df4a112967d
parent 217 c22e983b3b6e
child 222 0cde1379b29f
     1.1 --- a/src/compiler/NameBinding.cpp	Sun Nov 18 22:18:23 2012 -0800
     1.2 +++ b/src/compiler/NameBinding.cpp	Mon Nov 19 01:13:44 2012 -0800
     1.3 @@ -802,7 +802,24 @@
     1.4              Parameter *param = sig.parameters()->at(i);
     1.5              if ((type = bindType(param->type())) == NULL)
     1.6                  return false;
     1.7 +
     1.8 +            if (type->isArray() || param->dims()) {
     1.9 +                int dims[MAX_ARRAY_DEPTH];
    1.10 +                int levels = evaluateDimensions(param->pos(), type, param->dims(), dims);
    1.11 +                if (levels < 0)
    1.12 +                    return false;
    1.13 +
    1.14 +                // If we got extra dimensions, we need to build a new type.
    1.15 +                // Unlike variables, we do not infer anything about array
    1.16 +                // sizes from its default initializer.
    1.17 +                if (param->dims()) {
    1.18 +                    if ((type = buildArrayType(type, dims, param->dims()->length())) == NULL)
    1.19 +                        return false;
    1.20 +                }
    1.21 +            }
    1.22 +
    1.23              params->set(zone_, i, type);
    1.24 +            param->sym()->setType(type);
    1.25          }
    1.26  
    1.27          fun->setParameterTypes(params);