on master help sign in
thread (ForeignPtr Word8) through more parsers
bb0e3b1Evan Czaplicki
compiler/src/Parse/Variable.hs+12−11
@@ -1,5 +1,5 @@
1{-# OPTIONS_GHC -Wall #-}
1{-# OPTIONS_GHC -Wall #-}
2−{-# LANGUAGE BangPatterns, MagicHash, UnboxedTuples, OverloadedStrings #-}
2+{-# LANGUAGE BangPatterns, MagicHash, OverloadedStrings, UnboxedTuples #-}
3module Parse.Variable
3module Parse.Variable
4 ( lower
4 ( lower
5 , upper
5 , upper
@@ -8,6 +8,7 @@ module Parse.Variable
8 , foreignUpper
8 , foreignUpper
9 , foreignAlpha
9 , foreignAlpha
10 , chompInnerChars
10 , chompInnerChars
11+ , getUpperWidth
11 , getInnerWidth
12 , getInnerWidth
12 , getInnerWidthHelp
13 , getInnerWidthHelp
13 , reservedWords
14 , reservedWords
@@ -34,13 +35,13 @@ import qualified Parse.Primitives as P
34
35
35upper :: (Row -> Col -> x) -> Parser x Name.Name
36upper :: (Row -> Col -> x) -> Parser x Name.Name
36upper toError =
37upper toError =
37− P.Parser $ \(P.State pos end indent row col) cok _ _ eerr ->
38+ P.Parser $ \(P.State src pos end indent row col) cok _ _ eerr ->
38 let (# newPos, newCol #) = chompUpper pos end col in
39 let (# newPos, newCol #) = chompUpper pos end col in
39 if pos == newPos then
40 if pos == newPos then
40 eerr row col toError
41 eerr row col toError
41 else
42 else
42 let !name = Name.fromPtr pos newPos in
43 let !name = Name.fromPtr pos newPos in
43− cok name (P.State newPos end indent row newCol)
44+ cok name (P.State src newPos end indent row newCol)
44
45
45
46
46
47
@@ -49,7 +50,7 @@ upper toError =
49
50
50lower :: (Row -> Col -> x) -> Parser x Name.Name
51lower :: (Row -> Col -> x) -> Parser x Name.Name
51lower toError =
52lower toError =
52− P.Parser $ \(P.State pos end indent row col) cok _ _ eerr ->
53+ P.Parser $ \(P.State src pos end indent row col) cok _ _ eerr ->
53 let (# newPos, newCol #) = chompLower pos end col in
54 let (# newPos, newCol #) = chompLower pos end col in
54 if pos == newPos then
55 if pos == newPos then
55 eerr row col toError
56 eerr row col toError
@@ -60,7 +61,7 @@ lower toError =
60 else
61 else
61 let
62 let
62 !newState =
63 !newState =
63− P.State newPos end indent row newCol
64+ P.State src newPos end indent row newCol
64 in
65 in
65 cok name newState
66 cok name newState
66
67
@@ -86,7 +87,7 @@ reservedWords =
86
87
87moduleName :: (Row -> Col -> x) -> Parser x Name.Name
88moduleName :: (Row -> Col -> x) -> Parser x Name.Name
88moduleName toError =
89moduleName toError =
89− P.Parser $ \(P.State pos end indent row col) cok _ cerr eerr ->
90+ P.Parser $ \(P.State src pos end indent row col) cok _ cerr eerr ->
90 let
91 let
91 (# pos1, col1 #) = chompUpper pos end col
92 (# pos1, col1 #) = chompUpper pos end col
92 in
93 in
@@ -100,7 +101,7 @@ moduleName toError =
100 Good ->
101 Good ->
101 let
102 let
102 !name = Name.fromPtr pos newPos
103 !name = Name.fromPtr pos newPos
103− !newState = P.State newPos end indent row newCol
104+ !newState = P.State src newPos end indent row newCol
104 in
105 in
105 cok name newState
106 cok name newState
106
107
@@ -140,13 +141,13 @@ data Upper
140
141
141foreignUpper :: (Row -> Col -> x) -> Parser x Upper
142foreignUpper :: (Row -> Col -> x) -> Parser x Upper
142foreignUpper toError =
143foreignUpper toError =
143− P.Parser $ \(P.State pos end indent row col) cok _ _ eerr ->
144+ P.Parser $ \(P.State src pos end indent row col) cok _ _ eerr ->
144 let (# upperStart, upperEnd, newCol #) = foreignUpperHelp pos end col in
145 let (# upperStart, upperEnd, newCol #) = foreignUpperHelp pos end col in
145 if upperStart == upperEnd then
146 if upperStart == upperEnd then
146 eerr row newCol toError
147 eerr row newCol toError
147 else
148 else
148 let
149 let
149− !newState = P.State upperEnd end indent row newCol
150+ !newState = P.State src upperEnd end indent row newCol
150 !name = Name.fromPtr upperStart upperEnd
151 !name = Name.fromPtr upperStart upperEnd
151 !foreign =
152 !foreign =
152 if upperStart == pos then
153 if upperStart == pos then
@@ -179,13 +180,13 @@ foreignUpperHelp pos end col =
179
180
180foreignAlpha :: (Row -> Col -> x) -> Parser x Src.Expr_
181foreignAlpha :: (Row -> Col -> x) -> Parser x Src.Expr_
181foreignAlpha toError =
182foreignAlpha toError =
182− P.Parser $ \(P.State pos end indent row col) cok _ _ eerr ->
183+ P.Parser $ \(P.State src pos end indent row col) cok _ _ eerr ->
183 let (# alphaStart, alphaEnd, newCol, varType #) = foreignAlphaHelp pos end col in
184 let (# alphaStart, alphaEnd, newCol, varType #) = foreignAlphaHelp pos end col in
184 if alphaStart == alphaEnd then
185 if alphaStart == alphaEnd then
185 eerr row newCol toError
186 eerr row newCol toError
186 else
187 else
187 let
188 let
188− !newState = P.State alphaEnd end indent row newCol
189+ !newState = P.State src alphaEnd end indent row newCol
189 !name = Name.fromPtr alphaStart alphaEnd
190 !name = Name.fromPtr alphaStart alphaEnd
190 in
191 in
191 if alphaStart == pos then
192 if alphaStart == pos then