@@ -1307,66 +1307,70 @@ eatShader array offset length row col =
13071307-- KERNEL CHOMP
13081308
13091309
1310−data ChunkTag = KernelEnum Word8 | KernelImport
1310+data ChunkTag
1311+ = KernelEnum Word8 Text
1312+ | KernelProd Bool
1313+ | KernelImport Text
13111314
13121315
1313−kernelChunk :: Parser (BS.ByteString, Maybe (ChunkTag, Text))
1316+kernelChunk :: Parser (BS.ByteString, Maybe ChunkTag)
13141317kernelChunk =
13151318 Parser $ \(State array offset length indent row col ctx) cok _ _ _ ->
13161319 let
1317− (# maybeChunkTag, newOffset, newLength, newRow, newCol #) =
1318− kernelChunkHelp array offset length row col
1320+ (# maybeChunkTag, jsOffset, newOffset, newLength, newRow, newCol #) =
1321+ chompChunk array offset length row col
13191322
1320− javascript =
1321− Text.encodeUtf8 (Text.Text array offset (newOffset - offset))
1322− in
1323− case maybeChunkTag of
1324− Nothing ->
1325− let
1326− !newState =
1327− State array newOffset newLength indent newRow newCol ctx
1328− in
1329− cok (javascript, Nothing) newState noError
1330−
1331− Just tag ->
1332− let
1333− (# newerOffset, newerLength, newerCol #) =
1334− varPrimHelp array newOffset newLength newCol
1323+ !javascript =
1324+ Text.encodeUtf8 (Text.Text array offset (jsOffset - offset))
13351325
1336− !newState =
1337− State array newerOffset newerLength indent newRow newerCol ctx
1338−
1339− !kernelSymbol =
1340− Text.Text array newOffset (newerOffset - newOffset)
1341− in
1342− cok (javascript, Just (tag, kernelSymbol)) newState noError
1326+ !newState =
1327+ State array newOffset newLength indent newRow newCol ctx
1328+ in
1329+ cok (javascript, maybeChunkTag) newState noError
13431330
13441331
1345−kernelChunkHelp :: Text.Array -> Int -> Int -> Int -> Int -> (# Maybe ChunkTag, Int, Int, Int, Int #)
1346−kernelChunkHelp array offset length row col =
1332+chompChunk :: Text.Array -> Int -> Int -> Int -> Int -> (# Maybe ChunkTag, Int, Int, Int, Int, Int #)
1333+chompChunk array offset length row col =
13471334 if length == 0 then
1348− (# Nothing, offset, length, row, col #)
1335+ (# Nothing, offset, offset, length, row, col #)
13491336
13501337 else
13511338 let
13521339 !word = Text.unsafeIndex array offset
13531340 in
13541341 if word == 0x005F {- _ -} && length > 3 && Text.unsafeIndex array (offset + 1) == 0x005F {- _ -} then
1355− (# Just (toChunkTag (Text.unsafeIndex array (offset + 2))), offset, length, row, col #)
1342+ chompChunkTag array offset (offset + 2) (length - 2) row (col + 2)
13561343
13571344 else if word == 0x000A {- \n -} then
1358− kernelChunkHelp array (offset + 1) (length - 1) (row + 1) 1
1345+ chompChunk array (offset + 1) (length - 1) (row + 1) 1
13591346
13601347 else if word < 0xD800 || word > 0xDBFF then
1361− kernelChunkHelp array (offset + 1) (length - 1) row (col + 1)
1348+ chompChunk array (offset + 1) (length - 1) row (col + 1)
13621349
13631350 else
1364− kernelChunkHelp array (offset + 2) (length - 2) row (col + 1)
1351+ chompChunk array (offset + 2) (length - 2) row (col + 1)
13651352
13661353
1367−toChunkTag :: Word16 -> ChunkTag
1368−toChunkTag word =
1369− if isDigit word then
1370− KernelEnum (fromIntegral (word - 0x0030 {- 0 -}))
1371− else
1372− KernelImport
1354+chompChunkTag :: Text.Array -> Int -> Int -> Int -> Int -> Int -> (# Maybe ChunkTag, Int, Int, Int, Int, Int #)
1355+chompChunkTag array jsOffset offset length row col =
1356+ let
1357+ (# newOffset, newLength, newCol #) =
1358+ varPrimHelp array offset length col
1359+
1360+ !word =
1361+ Text.unsafeIndex array offset
1362+
1363+ !kernelSymbol =
1364+ Text.Text array offset (newOffset - offset)
1365+
1366+ !chunkTag =
1367+ if isDigit word then
1368+ KernelEnum (fromIntegral (word - 0x0030 {- 0 -})) kernelSymbol
1369+ else if kernelSymbol == "DEV" then
1370+ KernelProd False
1371+ else if kernelSymbol == "PROD" then
1372+ KernelProd True
1373+ else
1374+ KernelImport kernelSymbol
1375+ in
1376+ (# Just chunkTag, jsOffset, newOffset, newLength, row, newCol #)