Adjusted the parsers to store a type with array constructors (Rain will infer it later, so it uses Any)
This commit is contained in:
parent
7baeb318f2
commit
a930e17f89
|
@ -936,7 +936,11 @@ arrayConstructor
|
||||||
e <- inTypeContext subCtx expression
|
e <- inTypeContext subCtx expression
|
||||||
scopeOutRep r'
|
scopeOutRep r'
|
||||||
sRight
|
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"
|
<?> "array constructor expression"
|
||||||
|
|
||||||
associativeOpExpression :: OccParser A.Expression
|
associativeOpExpression :: OccParser A.Expression
|
||||||
|
|
|
@ -215,7 +215,8 @@ literal = do {(lr, dim) <- stringLiteral ; return $ A.Literal (findMeta lr) (A.L
|
||||||
<?> "literal"
|
<?> "literal"
|
||||||
|
|
||||||
range :: RainParser A.Expression
|
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 :: RainParser A.Expression
|
||||||
expression
|
expression
|
||||||
|
|
|
@ -255,11 +255,11 @@ testRange :: [ParseTest A.Expression]
|
||||||
testRange =
|
testRange =
|
||||||
[
|
[
|
||||||
pass("[0..1]", RP.expression, assertPatternMatch "testRange 0" $ pat $
|
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 $
|
,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 $
|
,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:
|
--For now, at least, this should fail:
|
||||||
,fail("[0..x]", RP.expression)
|
,fail("[0..x]", RP.expression)
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user