TypeCheck implements the Expr interface.
( ctx context.Context, semaCtx *SemaContext, desired *types.T, )
| 1374 | |
| 1375 | // TypeCheck implements the Expr interface. |
| 1376 | func (expr *Array) TypeCheck( |
| 1377 | ctx context.Context, semaCtx *SemaContext, desired *types.T, |
| 1378 | ) (TypedExpr, error) { |
| 1379 | desiredParam := types.Any |
| 1380 | if desired.Family() == types.ArrayFamily { |
| 1381 | desiredParam = desired.ArrayContents() |
| 1382 | } |
| 1383 | |
| 1384 | if len(expr.Exprs) == 0 { |
| 1385 | if desiredParam.Family() == types.AnyFamily { |
| 1386 | return nil, errAmbiguousArrayType |
| 1387 | } |
| 1388 | expr.typ = types.MakeArray(desiredParam) |
| 1389 | return expr, nil |
| 1390 | } |
| 1391 | |
| 1392 | typedSubExprs, typ, err := TypeCheckSameTypedExprs(ctx, semaCtx, desiredParam, expr.Exprs...) |
| 1393 | if err != nil { |
| 1394 | return nil, err |
| 1395 | } |
| 1396 | |
| 1397 | expr.typ = types.MakeArray(typ) |
| 1398 | for i := range typedSubExprs { |
| 1399 | expr.Exprs[i] = typedSubExprs[i] |
| 1400 | } |
| 1401 | |
| 1402 | return expr, nil |
| 1403 | } |
| 1404 | |
| 1405 | // TypeCheck implements the Expr interface. |
| 1406 | func (expr *ArrayFlatten) TypeCheck( |
nothing calls this directly
no test coverage detected