on master help sign in
Integer overflow fix, style fixes
commit93028099f9f9d604bde055ba33dffde6377b0e0c authorSaurabh Rawat <eklavya@Saurabhs-MacBook-Pro.local> dateFri 2 Oct 2015, 23:25 (11 years ago) parent01a11c7
1 file changed+24−13
libs/base/Data/String.idr+24−13
libs/base/Data/String.idr+24−13
@@ -10,12 +10,17 @@ parsePositive : Num a => String -> Maybe a
1010parsePositive s = parsePosTrimmed (trim s) where
1111 parsePosTrimmed s with (strM s)
1212 parsePosTrimmed "" | StrNil = Nothing
13− parsePosTrimmed (strCons x xs) | (StrCons x xs) = if (x == '+') then map fromInteger (parsePosAux (unpack xs) 0)
14− else map fromInteger (parsePosAux (unpack xs) (ord x - ord '0')) where
15− parsePosAux : (List Char) -> Int -> Maybe Integer
16− parsePosAux [] acc = Just (cast acc)
17− parsePosAux (c :: cs) acc = if (c >= '0' && c <= '9') then parsePosAux cs ((acc * 10) + (ord c) - (ord '0'))
18− else Nothing
13+ parsePosTrimmed (strCons x xs) | (StrCons x xs) =
14+ if (x == '+')
15+ then map fromInteger (parsePosAux (unpack xs) (cast {from=Int} 0))
16+ else map fromInteger (parsePosAux (unpack xs) (cast (ord x - ord '0')))
17+ where
18+ parsePosAux : (List Char) -> Integer -> Maybe Integer
19+ parsePosAux [] acc = Just acc
20+ parsePosAux (c :: cs) acc =
21+ if (c >= '0' && c <= '9')
22+ then parsePosAux cs ((acc * (cast {from=Int} 10)) + (cast ((ord c) - (ord '0'))))
23+ else Nothing
1924
2025
2126||| Convert a number string to a Num.
@@ -28,11 +33,17 @@ parseInteger : (Num a, Neg a) => String -> Maybe a
2833parseInteger s = parseIntTrimmed (trim s) where
2934 parseIntTrimmed s with (strM s)
3035 parseIntTrimmed "" | StrNil = Nothing
31− parseIntTrimmed (strCons x xs) | (StrCons x xs) = if (x == '-') then map (\y => negate (fromInteger y)) (parseIntegerAux (unpack xs) 0)
32− else if (x == '+') then map fromInteger (parseIntegerAux (unpack xs) 0)
33− else map fromInteger (parseIntegerAux (unpack xs) (ord x - ord '0')) where
34− parseIntegerAux : (List Char) -> Int -> Maybe Integer
35− parseIntegerAux [] acc = Just (cast acc)
36− parseIntegerAux (c :: cs) acc = if (c >= '0' && c <= '9') then parseIntegerAux cs ((acc * 10) + (ord c) - (ord '0'))
37− else Nothing
36+ parseIntTrimmed (strCons x xs) | (StrCons x xs) =
37+ if (x == '-')
38+ then map (\y => negate (fromInteger y)) (parseIntegerAux (unpack xs) (cast {from=Int} 0))
39+ else if (x == '+')
40+ then map fromInteger (parseIntegerAux (unpack xs) (cast {from=Int} 0))
41+ else map fromInteger (parseIntegerAux (unpack xs) (cast (ord x - ord '0')))
42+ where
43+ parseIntegerAux : (List Char) -> Integer -> Maybe Integer
44+ parseIntegerAux [] acc = Just acc
45+ parseIntegerAux (c :: cs) acc =
46+ if (c >= '0' && c <= '9')
47+ then parseIntegerAux cs ((acc * (cast {from=Int} 10)) + (cast ((ord c) - (ord '0'))))
48+ else Nothing
3849