on master help sign in
Introduce Elm.Name.fromForeignPtr
1e6121aEvan Czaplicki
src/Elm/Name.hs+25−2
@@ -8,22 +8,26 @@ module Elm.Name
8 , toShort
8 , toShort
9 , addIndex
9 , addIndex
10 , toCompositeName
10 , toCompositeName
11+ , fromForeignPtr
11 , int, float, bool, char, string
12 , int, float, bool, char, string
12− , maybe, list, array, tuple
13+ , maybe, list, array, tuple, jsArray
13 , task, router, cmd, sub, platform, browser
14 , task, router, cmd, sub, platform, browser
14 , shader, debug, bitwise, basics
15 , shader, debug, bitwise, basics
15 , utils, negate, value
16 , utils, negate, value
16− , node, program, main, dollar
17+ , node, program, main, dollar, identity
17 )
18 )
18 where
19 where
19
20
20
21
21import Prelude hiding (length, maybe, negate)
22import Prelude hiding (length, maybe, negate)
22import qualified Data.ByteString.Builder as B
23import qualified Data.ByteString.Builder as B
24+import qualified Data.ByteString.Internal as B
23import qualified Data.ByteString.Short as S
25import qualified Data.ByteString.Short as S
24import qualified Data.Set as Set
26import qualified Data.Set as Set
25import qualified Data.Text as Text
27import qualified Data.Text as Text
26import qualified Data.Text.Encoding as Text
28import qualified Data.Text.Encoding as Text
29+import Data.Word (Word8)
30+import Foreign.ForeignPtr (ForeignPtr)
27
31
28
32
29
33
@@ -64,6 +68,15 @@ toCompositeName names =
64
68
65
69
66
70
71+-- FROM PARSER
72+
73+
74+fromForeignPtr :: ForeignPtr Word8 -> Int -> Int -> Name
75+fromForeignPtr fptr offset len =
76+ Text.decodeUtf8 (B.PS fptr offset len)
77+
78+
79+
67-- COMMON NAMES
80-- COMMON NAMES
68
81
69
82
@@ -112,6 +125,11 @@ tuple :: Name
112tuple = "Tuple"
125tuple = "Tuple"
113
126
114
127
128+{-# NOINLINE jsArray #-}
129+jsArray :: Name
130+jsArray = "JsArray"
131+
132+
115{-# NOINLINE task #-}
133{-# NOINLINE task #-}
116task :: Name
134task :: Name
117task = "Task"
135task = "Task"
@@ -195,3 +213,8 @@ main = "main"
195{-# NOINLINE dollar #-}
213{-# NOINLINE dollar #-}
196dollar :: Name
214dollar :: Name
197dollar = "$"
215dollar = "$"
216+
217+
218+{-# NOINLINE identity #-}
219+identity :: Name
220+identity = "identity"
src/Parse/Primitives/Kernel.hs+2−3
@@ -9,7 +9,6 @@ module Parse.Primitives.Kernel
9
9
10import Prelude hiding (length)
10import Prelude hiding (length)
11import qualified Data.ByteString.Internal as B
11import qualified Data.ByteString.Internal as B
12−import qualified Data.Text.Encoding as Text
13import Data.Text (Text)
12import Data.Text (Text)
14import Data.Word (Word8)
13import Data.Word (Word8)
15import Foreign.ForeignPtr (ForeignPtr)
14import Foreign.ForeignPtr (ForeignPtr)
@@ -96,10 +95,10 @@ chompSpecial fp offset terminal row col jsOffset =
96
95
97 !special =
96 !special =
98 if word == 0x24 {- $ -} then
97 if word == 0x24 {- $ -} then
99− ElmField (Text.decodeUtf8 (B.PS fp offset (newOffset - offset)))
98+ ElmField (N.fromForeignPtr fp offset (newOffset - offset))
100
99
101 else
100 else
102− let !name = Text.decodeUtf8 (B.PS fp tagOffset (newOffset - tagOffset)) in
101+ let !name = N.fromForeignPtr fp tagOffset (newOffset - tagOffset) in
103 if 0x30 <= word && word <= 0x39 then
102 if 0x30 <= word && word <= 0x39 then
104 Enum (fromIntegral (word - 0x30)) name
103 Enum (fromIntegral (word - 0x30)) name
105
104
src/Parse/Primitives/Shader.hs+2−3
@@ -7,12 +7,11 @@ module Parse.Primitives.Shader
7 where
7 where
8
8
9
9
10−import qualified Data.ByteString.Internal as B
11import qualified Data.Text as Text
10import qualified Data.Text as Text
12−import qualified Data.Text.Encoding as Text
13import Foreign.ForeignPtr (ForeignPtr)
11import Foreign.ForeignPtr (ForeignPtr)
14import GHC.Word (Word8)
12import GHC.Word (Word8)
15
13
14+import qualified Elm.Name as N
16import Parse.Primitives.Internals (Parser(..), State(..), noError)
15import Parse.Primitives.Internals (Parser(..), State(..), noError)
17import qualified Parse.Primitives.Internals as I
16import qualified Parse.Primitives.Internals as I
18import qualified Parse.Primitives.Symbol as Symbol
17import qualified Parse.Primitives.Symbol as Symbol
@@ -40,7 +39,7 @@ block =
40 Ok newOffset newRow newCol ->
39 Ok newOffset newRow newCol ->
41 let
40 let
42 !size = newOffset - offset
41 !size = newOffset - offset
43− !shader = Text.decodeUtf8 (B.PS fp offset size)
42+ !shader = N.fromForeignPtr fp offset size
44 !newState = State fp (newOffset + 2) terminal indent newRow newCol ctx
43 !newState = State fp (newOffset + 2) terminal indent newRow newCol ctx
45 in
44 in
46 cok shader newState noError
45 cok shader newState noError
src/Parse/Primitives/Symbol.hs+2−2
@@ -19,10 +19,10 @@ import qualified Data.Map as Map
19import qualified Data.IntSet as IntSet
19import qualified Data.IntSet as IntSet
20import qualified Data.Vector as Vector
20import qualified Data.Vector as Vector
21import Data.Text (Text)
21import Data.Text (Text)
22−import qualified Data.Text.Encoding as Text
23import Foreign.ForeignPtr (ForeignPtr)
22import Foreign.ForeignPtr (ForeignPtr)
24import GHC.Word (Word8)
23import GHC.Word (Word8)
25
24
25+import qualified Elm.Name as N
26import Parse.Primitives.Internals (Parser(..), State(..), expect, noError, oneOf)
26import Parse.Primitives.Internals (Parser(..), State(..), expect, noError, oneOf)
27import qualified Parse.Primitives.Internals as I
27import qualified Parse.Primitives.Internals as I
28import qualified Parse.Primitives.Variable as Var
28import qualified Parse.Primitives.Variable as Var
@@ -65,7 +65,7 @@ binop =
65
65
66 else
66 else
67 let !length = newOffset - offset in
67 let !length = newOffset - offset in
68− case Text.decodeUtf8 (B.PS fp offset length) of
68+ case N.fromForeignPtr fp offset length of
69 "." -> cerr (E.ParseError row col (E.BadOp Dot ctx))
69 "." -> cerr (E.ParseError row col (E.BadOp Dot ctx))
70 "|" -> cerr (E.ParseError row col (E.BadOp Pipe ctx))
70 "|" -> cerr (E.ParseError row col (E.BadOp Pipe ctx))
71 "->" -> cerr (E.ParseError row col (E.BadOp Arrow ctx))
71 "->" -> cerr (E.ParseError row col (E.BadOp Arrow ctx))