language-ats 1.7.5.0 → 1.7.6.0
raw patch · 8 files changed
+73/−16 lines, 8 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Language.ATS: IntLit :: Int -> Expression a
+ Language.ATS: IntLit :: Integer -> Expression a
- Language.ATS: IntTok :: AlexPosn -> Int -> Token
+ Language.ATS: IntTok :: AlexPosn -> Integer -> Token
- Language.ATS: StaticInt :: Int -> StaticExpression a
+ Language.ATS: StaticInt :: Integer -> StaticExpression a
- Language.ATS: UintLit :: Word -> Expression a
+ Language.ATS: UintLit :: Natural -> Expression a
- Language.ATS: UintTok :: AlexPosn -> Word -> Token
+ Language.ATS: UintTok :: AlexPosn -> Natural -> Token
Files
- CHANGELOG.md +4/−0
- language-ats.cabal +1/−1
- src/Language/ATS/Lexer.x +4/−3
- src/Language/ATS/Parser.y +5/−5
- src/Language/ATS/PrettyPrint.hs +1/−1
- src/Language/ATS/Types.hs +7/−6
- test/data/memchr.out +32/−0
- test/data/memchr.sats +19/−0
CHANGELOG.md view
@@ -1,5 +1,9 @@ # language-ats +## 1.7.6.0++ * Use `Natural`/`Integer` for literals+ ## 1.7.5.0 * Fix `StaticExpression` to allow calls with dynamic components
language-ats.cabal view
@@ -1,6 +1,6 @@ cabal-version: 1.18 name: language-ats-version: 1.7.5.0+version: 1.7.6.0 license: BSD3 license-file: LICENSE copyright: Copyright: (c) 2018-2019 Vanessa McHale
src/Language/ATS/Lexer.x view
@@ -23,6 +23,7 @@ import Data.Bool (bool) import Control.DeepSeq (NFData) import GHC.Generics (Generic)+import GHC.Natural (Natural) import Text.PrettyPrint.ANSI.Leijen hiding (line, bool, column, (<$>)) }@@ -428,7 +429,7 @@ data Token = Identifier AlexPosn String | SpecialIdentifier AlexPosn String | Keyword AlexPosn Keyword- | IntTok AlexPosn Int+ | IntTok AlexPosn Integer | HexIntTok AlexPosn String | FloatTok AlexPosn Float | CharTok AlexPosn Char@@ -444,7 +445,7 @@ | CommentEnd AlexPosn | CommentContents AlexPosn String | MacroBlock AlexPosn String- | UintTok AlexPosn Word+ | UintTok AlexPosn Natural | SignatureTok AlexPosn String | DoubleParenTok AlexPosn | DoubleBracesTok AlexPosn@@ -571,7 +572,7 @@ pretty CommentEnd{} = "*)" pretty (CommentContents _ s) = text s pretty (FuncType _ s) = text s- pretty (UintTok _ u) = pretty u+ pretty (UintTok _ u) = pretty (fromIntegral u :: Integer) pretty (SignatureTok _ s) = ":" <> text s pretty (Operator _ s) = text s pretty (MacroBlock _ s) = "#"
src/Language/ATS/Parser.y view
@@ -931,7 +931,7 @@ | dataprop IdentifierOr SortArgs vbar {% left $ Expected $4 "=" "|" } EitherInt :: { Fix }- : intLit { Left $1 }+ : intLit { Left (fromIntegral $1) } | parens(Operator) { Right $1 } Fixity :: { Fixity AlexPosn }@@ -1058,13 +1058,13 @@ | overload doubleSqBrackets with IdentifierOr { OverloadIdent $1 "[]" (Unqualified $4) Nothing } | overload BinOp with Name { OverloadOp $1 $2 $4 Nothing } | overload BinOp with customOperator { OverloadOp $1 $2 (Unqualified $ to_string $4) Nothing }- | overload BinOp with identifierSpace of intLit { OverloadOp $1 $2 (Unqualified $ to_string $4) (Just $6) }+ | overload BinOp with identifierSpace of intLit { OverloadOp $1 $2 (Unqualified $ to_string $4) (Just $ fromIntegral $6) } | overload identifierSpace with Name { OverloadIdent $1 (to_string $2) $4 Nothing } | overload identifierSpace with identifierSpace { OverloadIdent $1 (to_string $2) (Unqualified $ to_string $4) Nothing }- | overload identifierSpace with identifierSpace of intLit { OverloadIdent $1 (to_string $2) (Unqualified $ to_string $4) (Just $6) }+ | overload identifierSpace with identifierSpace of intLit { OverloadIdent $1 (to_string $2) (Unqualified $ to_string $4) (Just $ fromIntegral $6) } | overload tilde with identifier { OverloadIdent $1 "~" (Unqualified $ to_string $4) Nothing } -- FIXME figure out a general solution.- | overload tilde with identifierSpace of intLit { OverloadIdent $1 "~" (Unqualified $ to_string $4) (Just $6) }- | overload doubleSqBrackets with identifierSpace of intLit { OverloadIdent $1 "[]" (Unqualified $ to_string $4) (Just $6) }+ | overload tilde with identifierSpace of intLit { OverloadIdent $1 "~" (Unqualified $ to_string $4) (Just $ fromIntegral $6) }+ | overload doubleSqBrackets with identifierSpace of intLit { OverloadIdent $1 "[]" (Unqualified $ to_string $4) (Just $ fromIntegral $6) } | overload dot identifierSpace with Name { OverloadIdent $1 ('.' : (to_string $3)) $5 Nothing } | assume identifierSpace SortArgs eq Type { Assume (Unqualified (to_string $2)) $3 $5 } | assume Name SortArgs eq Type { Assume $2 $3 $5 }
src/Language/ATS/PrettyPrint.hs view
@@ -132,7 +132,7 @@ a (LetF _ e e') = flatAlt ("let" <$> indent 2 (pretty e) <$> endLet e') ("let" <+> pretty e <$> endLet e')- a (UintLitF u) = pretty u <> "u"+ a (UintLitF u) = pretty (fromIntegral u :: Integer) <> "u" a (IntLitF i) = pretty i a (HexLitF hi) = "0x" <> text hi a (LambdaF _ lt p e) = prettyLam "lam" p lt e
src/Language/ATS/Types.hs view
@@ -56,6 +56,7 @@ import Data.List.NonEmpty (NonEmpty) import qualified Data.Map as M import GHC.Generics (Generic)+import GHC.Natural (Natural) import Language.ATS.Lexer (Addendum (..)) type Fix = Either Int String@@ -308,7 +309,7 @@ data StaticExpression a = StaticVal (Name a) | StaticBinary (BinOp a) (StaticExpression a) (StaticExpression a)- | StaticInt Int+ | StaticInt Integer | StaticHex String | SPrecede (StaticExpression a) (StaticExpression a) | SPrecedeList { _sExprs :: [StaticExpression a] }@@ -328,7 +329,7 @@ data StaticExpressionF a x = StaticValF (Name a) | StaticBinaryF (BinOp a) x x- | StaticIntF Int+ | StaticIntF Integer | StaticHexF String | SPrecedeF x x | SPrecedeListF [x]@@ -363,9 +364,9 @@ , whenTrue :: Expression a -- ^ Expression to be returned when true , elseExpr :: Maybe (Expression a) -- ^ Expression to be returned when false }- | UintLit Word -- ^ E.g. @1000u@+ | UintLit Natural -- ^ E.g. @1000u@ | FloatLit Float- | IntLit Int+ | IntLit Integer | HexLit String | UnderscoreLit a | Lambda a (LambdaType a) (Pattern a) (Expression a) -- TODO: Fix@@ -416,9 +417,9 @@ | NamedValF (Name a) | ListLiteralF a String (Type a) [x] | IfF x x (Maybe x)- | UintLitF Word+ | UintLitF Natural | FloatLitF Float- | IntLitF Int+ | IntLitF Integer | HexLitF String | UnderscoreLitF a | LambdaF a (LambdaType a) (Pattern a) x
+ test/data/memchr.out view
@@ -0,0 +1,32 @@+// bad (?) idea: use rawmemchr + append lol+fn memchr+{ l : addr | l != null }{m:nat}{ n : nat | n <= m }(bytes_v(l,m)+ | ptr(l), int, size_t(n)) :+ [ l0 : addr | l0 == null || l0 >= l && l0-l <= m ] ( bytes_v(l, l0-l)+ , bytes_v(l0, l+m-l0)+ | ptr(l0)) =+ "mac#"++fn memchr2_rs+{ l : addr | l != null }{m:nat}{ n : nat | n <= m }(!bytes_v(l, m)+ | ptr(l), char, char, size_t(n)) :+ [ k : nat | k <= n || k == 18446744073709551615 ] size_t(k) =+ "ext#"++fn memchr2+{ l : addr | l != null }{m:nat}{ n : nat | n <= m }(!bytes_v(l, m)+ | ptr(l), char, char, size_t(n)) :+ Option_vt([ k : nat | k <= n ] size_t(k)) =+ "ext#"++fn memchr3_rs+{ l : addr | l != null }{m:nat}{ n : nat | n <= m }(!bytes_v(l, m)+ | ptr(l), char, char, char, size_t(n)) :+ [ k : nat | k <= n || k == 18446744073709551615 ] size_t(k) =+ "ext#"++fn memchr3+{ l : addr | l != null }{m:nat}{ n : nat | n <= m }(!bytes_v(l, m)+ | ptr(l), char, char, char, size_t(n)) :+ Option_vt([ k : nat | k <= n ] size_t(k)) =+ "ext#"
+ test/data/memchr.sats view
@@ -0,0 +1,19 @@+// bad (?) idea: use rawmemchr + append lol+fn memchr { l : addr | l != null }{m:nat}{ n : nat | n <= m }(bytes_v(l,m) | ptr(l), int, size_t(n)) :+ [ l0 : addr | l0 == null || l0 >= l && l0-l <= m ] (bytes_v(l, l0-l), bytes_v(l0, l+m-l0)| ptr(l0)) =+ "mac#"++fn memchr2_rs { l : addr | l != null }{m:nat}{ n : nat | n <= m }(!bytes_v(l, m) | ptr(l), char, char, size_t(n)) :+ [ k : nat | k <= n || k == 18446744073709551615 ] size_t(k) =+ "ext#"++fn memchr2 { l : addr | l != null }{m:nat}{ n : nat | n <= m }(!bytes_v(l, m) | ptr(l), char, char, size_t(n)) :+ Option_vt([ k : nat | k <= n ] size_t(k)) =+ "ext#"++fn memchr3_rs { l : addr | l != null }{m:nat}{ n : nat | n <= m }(!bytes_v(l, m) | ptr(l), char, char, char, size_t(n)) + : [ k : nat | k <= n || k == 18446744073709551615 ] size_t(k) =+ "ext#"+fn memchr3 { l : addr | l != null }{m:nat}{ n : nat | n <= m }(!bytes_v(l, m) | ptr(l), char, char, char, size_t(n)) + : Option_vt([ k : nat | k <= n ] size_t(k)) =+ "ext#"