Rain: fixed the dataType parser to accept user-named types
This commit is contained in:
parent
1d0426ac77
commit
e9d882f1ae
|
@ -132,6 +132,7 @@ dataType
|
|||
<|> 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}
|
||||
<|> do {(m,n) <- identifier ; return $ A.UserDataType A.Name {A.nameMeta = m, A.nameName = n, A.nameType = A.DataTypeName}}
|
||||
<?> "data type"
|
||||
|
||||
variableId :: RainParser A.Variable
|
||||
|
@ -260,7 +261,7 @@ tupleDef = do {sLeftR ; tm <- sepBy tupleDefMember sComma ; sRightR ; return tm}
|
|||
tupleDefMember = do {t <- dataType ; sColon ; n <- name ; return (n,t)}
|
||||
|
||||
declaration :: RainParser (Meta,A.Structured -> A.Structured)
|
||||
declaration = do {t <- dataType; sColon ; n <- name ; sSemiColon ;
|
||||
declaration = try $ do {t <- dataType; sColon ; n <- name ; sSemiColon ;
|
||||
return (findMeta t, A.Spec (findMeta t) $ A.Specification (findMeta t) n $ A.Declaration (findMeta t) t) }
|
||||
|
||||
topLevelDecl :: RainParser A.Structured
|
||||
|
|
|
@ -295,9 +295,10 @@ testDataType =
|
|||
,pass ("sint16",RP.dataType,assertEqual "testDataType 7" A.Int16)
|
||||
,pass ("sint32",RP.dataType,assertEqual "testDataType 8" A.Int32)
|
||||
,pass ("sint64",RP.dataType,assertEqual "testDataType 9" A.Int64)
|
||||
,fail ("boolean",RP.dataType)
|
||||
,fail ("uint24",RP.dataType)
|
||||
,fail ("int0",RP.dataType)
|
||||
,pass ("boolean",RP.dataType,assertEqual "testDataType 10" $ A.UserDataType $ typeName "boolean")
|
||||
,pass ("uint24",RP.dataType,assertEqual "testDataType 11" $ A.UserDataType $ typeName "uint24")
|
||||
,pass ("int0",RP.dataType,assertEqual "testDataType 12" $ A.UserDataType $ typeName "int0")
|
||||
,fail ("bool bool",RP.dataType)
|
||||
|
||||
,pass ("?int",RP.dataType,assertEqual "testDataType 102" $ A.Chan A.DirInput nonShared A.Int)
|
||||
,pass ("! bool",RP.dataType,assertEqual "testDataType 103" $ A.Chan A.DirOutput nonShared A.Bool)
|
||||
|
|
|
@ -42,6 +42,9 @@ simpleName s = A.Name { A.nameName = s , A.nameMeta = emptyMeta , A.nameType = A
|
|||
procName :: String -> A.Name
|
||||
procName s = A.Name { A.nameName = s , A.nameMeta = emptyMeta , A.nameType = A.ProcName }
|
||||
|
||||
typeName :: String -> A.Name
|
||||
typeName s = A.Name { A.nameName = s , A.nameMeta = emptyMeta , A.nameType = A.DataTypeName }
|
||||
|
||||
simpleNamePattern :: String -> Pattern
|
||||
simpleNamePattern s = tag3 A.Name DontCare A.VariableName s
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user