diff --git a/frontends/ParseOccam.hs b/frontends/ParseOccam.hs index 81e154e..6e1d574 100644 --- a/frontends/ParseOccam.hs +++ b/frontends/ParseOccam.hs @@ -936,7 +936,11 @@ arrayConstructor e <- inTypeContext subCtx expression scopeOutRep r' sRight - return $ A.ExprConstr m $ A.RepConstr m r' e + innerT <- typeOfExpression e + let t = case ctx of + Just t -> t + Nothing -> A.Array [A.UnknownDimension] innerT + return $ A.ExprConstr m $ A.RepConstr m t r' e "array constructor expression" associativeOpExpression :: OccParser A.Expression diff --git a/frontends/ParseRain.hs b/frontends/ParseRain.hs index 1ab63da..03511d5 100644 --- a/frontends/ParseRain.hs +++ b/frontends/ParseRain.hs @@ -215,7 +215,8 @@ literal = do {(lr, dim) <- stringLiteral ; return $ A.Literal (findMeta lr) (A.L "literal" range :: RainParser A.Expression -range = try $ do {m <- sLeftQ ; begin <- integerLiteral; sDots ; end <- integerLiteral ; sRightQ ; return $ A.ExprConstr m $ A.RangeConstr m begin end} +range = try $ do {m <- sLeftQ ; begin <- integerLiteral; sDots ; end <- integerLiteral ; + sRightQ ; return $ A.ExprConstr m $ A.RangeConstr m A.Any begin end} expression :: RainParser A.Expression expression diff --git a/frontends/ParseRainTest.hs b/frontends/ParseRainTest.hs index 3b9ebb8..0dc9788 100644 --- a/frontends/ParseRainTest.hs +++ b/frontends/ParseRainTest.hs @@ -255,11 +255,11 @@ testRange :: [ParseTest A.Expression] testRange = [ pass("[0..1]", RP.expression, assertPatternMatch "testRange 0" $ pat $ - A.ExprConstr m $ A.RangeConstr m (intLiteral 0) (intLiteral 1)) + A.ExprConstr m $ A.RangeConstr m A.Any (intLiteral 0) (intLiteral 1)) ,pass("[0..10000]", RP.expression, assertPatternMatch "testRange 1" $ pat $ - A.ExprConstr m $ A.RangeConstr m (intLiteral 0) (intLiteral 10000)) + A.ExprConstr m $ A.RangeConstr m A.Any (intLiteral 0) (intLiteral 10000)) ,pass("[-3..-1]", RP.expression, assertPatternMatch "testRange 2" $ pat $ - A.ExprConstr m $ A.RangeConstr m (intLiteral $ -3) (intLiteral $ -1)) + A.ExprConstr m $ A.RangeConstr m A.Any (intLiteral $ -3) (intLiteral $ -1)) --For now, at least, this should fail: ,fail("[0..x]", RP.expression) ]