Rain: moved the resolution of int (to a 64-bit signed integer) out to a pass
This commit is contained in:
parent
5b19a7658f
commit
1890b281fe
|
@ -177,7 +177,7 @@ name
|
|||
dataType :: RainParser A.Type
|
||||
dataType
|
||||
= do {sBool ; return A.Bool}
|
||||
<|> do {sInt ; return A.Int64}
|
||||
<|> do {sInt ; return A.Int}
|
||||
<|> do {sChannel ; inner <- dataType ; return $ A.Chan A.DirUnknown (A.ChanAttributes {A.caWritingShared = False, A.caReadingShared = False}) inner}
|
||||
<|> do {sIn ; inner <- dataType ; return $ A.Chan A.DirInput (A.ChanAttributes {A.caWritingShared = False, A.caReadingShared = False}) inner}
|
||||
<|> do {sOut ; inner <- dataType ; return $ A.Chan A.DirOutput (A.ChanAttributes {A.caWritingShared = False, A.caReadingShared = False}) inner}
|
||||
|
|
|
@ -192,7 +192,7 @@ testTopLevelDecl =
|
|||
)
|
||||
, pass ("process onearg(int: x) {x = 0;}", RP.topLevelDecl,
|
||||
assertPatternMatch "testTopLevelDecl 1" $ tag3 A.Spec DontCare
|
||||
(tag3 A.Specification DontCare (simpleNamePattern "onearg") $ tag4 A.Proc DontCare A.PlainSpec [tag3 A.Formal A.ValAbbrev A.Int64 (simpleNamePattern "x")]
|
||||
(tag3 A.Specification DontCare (simpleNamePattern "onearg") $ tag4 A.Proc DontCare A.PlainSpec [tag3 A.Formal A.ValAbbrev A.Int (simpleNamePattern "x")]
|
||||
(tag2 A.Seq DontCare $ tag2 A.Several DontCare [tag2 A.OnlyP DontCare $ makeAssignPattern (variablePattern "x") (intLiteralPattern 0)]) )
|
||||
(tag2 A.OnlyP DontCare $ tag1 A.Main DontCare)
|
||||
)
|
||||
|
@ -214,14 +214,14 @@ testDataType :: [ParseTest A.Type]
|
|||
testDataType =
|
||||
[
|
||||
pass ("bool",RP.dataType,assertEqual "testDataType 0" A.Bool)
|
||||
,pass ("int",RP.dataType,assertEqual "testDataType 1" A.Int64)
|
||||
,pass ("int",RP.dataType,assertEqual "testDataType 1" A.Int)
|
||||
,fail ("boolean",RP.dataType)
|
||||
|
||||
,pass ("?int",RP.dataType,assertEqual "testDataType 2" $ A.Chan A.DirInput nonShared A.Int64)
|
||||
,pass ("?int",RP.dataType,assertEqual "testDataType 2" $ A.Chan A.DirInput nonShared A.Int)
|
||||
,pass ("! bool",RP.dataType,assertEqual "testDataType 3" $ A.Chan A.DirOutput nonShared A.Bool)
|
||||
--These types should succeed in the *parser* -- they would be thrown out further down the line:
|
||||
,pass ("??int",RP.dataType,assertEqual "testDataType 4" $ A.Chan A.DirInput nonShared $ A.Chan A.DirInput nonShared A.Int64)
|
||||
,pass ("? ? int",RP.dataType,assertEqual "testDataType 4" $ A.Chan A.DirInput nonShared $ A.Chan A.DirInput nonShared A.Int64)
|
||||
,pass ("??int",RP.dataType,assertEqual "testDataType 4" $ A.Chan A.DirInput nonShared $ A.Chan A.DirInput nonShared A.Int)
|
||||
,pass ("? ? int",RP.dataType,assertEqual "testDataType 4" $ A.Chan A.DirInput nonShared $ A.Chan A.DirInput nonShared A.Int)
|
||||
,pass ("!!bool",RP.dataType,assertEqual "testDataType 5" $ A.Chan A.DirOutput nonShared $ A.Chan A.DirOutput nonShared A.Bool)
|
||||
,pass ("?!bool",RP.dataType,assertEqual "testDataType 6" $ A.Chan A.DirInput nonShared $ A.Chan A.DirOutput nonShared A.Bool)
|
||||
|
||||
|
|
|
@ -28,12 +28,20 @@ import Errors
|
|||
|
||||
rainPasses :: [(String,Pass)]
|
||||
rainPasses =
|
||||
[ ("Uniquify variable declarations and resolve variable names",uniquifyAndResolveVars)
|
||||
[ ("Resolve Int -> Int64",transformInt)
|
||||
,("Uniquify variable declarations and resolve variable names",uniquifyAndResolveVars)
|
||||
,("Record declared name types in dictionary",recordDeclNameTypes)
|
||||
,("Record inferred name types in dictionary",recordInfNameTypes)
|
||||
,("Convert seqeach/pareach loops into classic replicated SEQ/PAR",transformEach)
|
||||
]
|
||||
|
||||
transformInt :: Data t => t -> PassM t
|
||||
transformInt = everywhereM (mkM transformInt')
|
||||
where
|
||||
transformInt' :: A.Type -> PassM A.Type
|
||||
transformInt' A.Int = return A.Int64
|
||||
transformInt' t = return t
|
||||
|
||||
uniquifyAndResolveVars :: Data t => t -> PassM t
|
||||
uniquifyAndResolveVars = everywhereM (mkM uniquifyAndResolveVars')
|
||||
where
|
||||
|
|
Loading…
Reference in New Issue
Block a user