Skip to content

Commit 3629799

Browse files
committed
Javascript identifiers allow only BMP codepoints
1 parent 33b9ba4 commit 3629799

1 file changed

Lines changed: 9 additions & 2 deletions

File tree

src/Language/ECMAScript3/Lexer.hs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ module Language.ECMAScript3.Lexer(lexeme,identifier,reserved,operator,reservedOp
1313
,hexIntLit,decIntLit, decDigits, decDigitsOpt, exponentPart, decLit) where
1414

1515
import Prelude hiding (lex)
16+
import Data.Char
1617
import Text.Parsec
1718
import qualified Text.Parsec.Token as T
1819
import Language.ECMAScript3.Parser.State
@@ -21,8 +22,14 @@ import Control.Monad.Identity
2122
import Control.Applicative ((<$>), (<*>))
2223
import Data.Maybe (isNothing)
2324

25+
jsLetter :: (Stream s m Char) => ParsecT s u m Char
26+
jsLetter = satisfy (\x -> isAlpha x && x < '\65536') <?> "letter"
27+
28+
jsAlphaNum :: (Stream s m Char => ParsecT s u m Char)
29+
jsAlphaNum = satisfy (\x -> isAlphaNum x && x < '\65536') <?> "letter or digit"
30+
2431
identifierStart :: Stream s Identity Char => Parser s Char
25-
identifierStart = letter <|> oneOf "$_"
32+
identifierStart = jsLetter <|> oneOf "$_"
2633

2734
javascriptDef :: Stream s Identity Char =>T.GenLanguageDef s ParserState Identity
2835
javascriptDef =
@@ -31,7 +38,7 @@ javascriptDef =
3138
"//"
3239
False -- no nested comments
3340
identifierStart
34-
(alphaNum <|> oneOf "$_") -- identifier rest
41+
(jsAlphaNum <|> oneOf "$_") -- identifier rest
3542
(oneOf "{}<>()~.,?:|&^=!+-*/%!") -- operator start
3643
(oneOf "=<>|&+") -- operator rest
3744
["break", "case", "catch", "const", "continue", "debugger",

0 commit comments

Comments
 (0)