Skip to content

Commit 8cf6894

Browse files
authored
srcmap parsing fix (#356)
1 parent feaa412 commit 8cf6894

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

src/hevm/src/EVM/Solidity.hs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -143,29 +143,30 @@ makeSrcMaps = (\case (_, Fe, _) -> Nothing; x -> Just (done x))
143143
. Text.foldl' (\x y -> go y x) (mempty, F1 [] 1, SM 0 0 0 JumpRegular 0)
144144
where
145145
done (xs, s, p) = let (xs', _, _) = go ';' (xs, s, p) in xs'
146+
readR = read . reverse
146147

147148
go :: Char -> (Seq SrcMap, SrcMapParseState, SrcMap) -> (Seq SrcMap, SrcMapParseState, SrcMap)
148149
go ':' (xs, F1 [] _, p@(SM a _ _ _ _)) = (xs, F2 a [] 1, p)
149-
go ':' (xs, F1 ds k, p) = (xs, F2 (k * (read ds)) [] 1, p)
150+
go ':' (xs, F1 ds k, p) = (xs, F2 (k * (readR ds)) [] 1, p)
150151
go '-' (xs, F1 [] _, p) = (xs, F1 [] (-1), p)
151152
go d (xs, F1 ds k, p) | isDigit d = (xs, F1 (d : ds) k, p)
152153
go ';' (xs, F1 [] k, p) = (xs |> p, F1 [] k, p)
153-
go ';' (xs, F1 ds k, SM _ b c d e) = let p' = SM (k * (read ds)) b c d e in (xs |> p', F1 [] 1, p')
154+
go ';' (xs, F1 ds k, SM _ b c d e) = let p' = SM (k * (readR ds)) b c d e in (xs |> p', F1 [] 1, p')
154155

155156
go '-' (xs, F2 a [] _, p) = (xs, F2 a [] (-1), p)
156157
go d (xs, F2 a ds k, p) | isDigit d = (xs, F2 a (d : ds) k, p)
157158
go ':' (xs, F2 a [] _, p@(SM _ b _ _ _)) = (xs, F3 a b [] 1, p)
158-
go ':' (xs, F2 a ds k, p) = (xs, F3 a (k * (read ds)) [] 1, p)
159+
go ':' (xs, F2 a ds k, p) = (xs, F3 a (k * (readR ds)) [] 1, p)
159160
go ';' (xs, F2 a [] _, SM _ b c d e) = let p' = SM a b c d e in (xs |> p', F1 [] 1, p')
160-
go ';' (xs, F2 a ds k, SM _ _ c d e) = let p' = SM a (k * (read ds)) c d e in
161+
go ';' (xs, F2 a ds k, SM _ _ c d e) = let p' = SM a (k * (readR ds)) c d e in
161162
(xs |> p', F1 [] 1, p')
162163

163164
go d (xs, F3 a b ds k, p) | isDigit d = (xs, F3 a b (d : ds) k, p)
164165
go '-' (xs, F3 a b [] _, p) = (xs, F3 a b [] (-1), p)
165166
go ':' (xs, F3 a b [] _, p@(SM _ _ c _ _)) = (xs, F4 a b c Nothing, p)
166-
go ':' (xs, F3 a b ds k, p) = (xs, F4 a b (k * (read ds)) Nothing, p)
167+
go ':' (xs, F3 a b ds k, p) = (xs, F4 a b (k * (readR ds)) Nothing, p)
167168
go ';' (xs, F3 a b [] _, SM _ _ c d e) = let p' = SM a b c d e in (xs |> p', F1 [] 1, p')
168-
go ';' (xs, F3 a b ds k, SM _ _ _ d e) = let p' = SM a b (k * (read ds)) d e in
169+
go ';' (xs, F3 a b ds k, SM _ _ _ d e) = let p' = SM a b (k * (readR ds)) d e in
169170
(xs |> p', F1 [] 1, p')
170171

171172
go 'i' (xs, F4 a b c Nothing, p) = (xs, F4 a b c (Just JumpInto), p)
@@ -179,7 +180,7 @@ makeSrcMaps = (\case (_, Fe, _) -> Nothing; x -> Just (done x))
179180
go d (xs, F5 a b c j ds, p) | isDigit d = (xs, F5 a b c j (d : ds), p)
180181
go ';' (xs, F5 a b c j [], _) = let p' = SM a b c j (-1) in -- solc <0.6
181182
(xs |> p', F1 [] 1, p')
182-
go ';' (xs, F5 a b c j ds, _) = let p' = SM a b c j (read ds) in -- solc >=0.6
183+
go ';' (xs, F5 a b c j ds, _) = let p' = SM a b c j (readR ds) in -- solc >=0.6
183184
(xs |> p', F1 [] 1, p')
184185

185186
go c (xs, state, p) = (xs, error ("srcmap: y u " ++ show c ++ " in state" ++ show state ++ "?!?"), p)

0 commit comments

Comments
 (0)