mirror of
https://github.com/zhigang1992/esbuild.git
synced 2026-01-13 09:00:56 +08:00
49 lines
1.1 KiB
Go
49 lines
1.1 KiB
Go
package js_parser
|
|
|
|
import (
|
|
"github.com/evanw/esbuild/internal/js_lexer"
|
|
"github.com/evanw/esbuild/internal/logger"
|
|
)
|
|
|
|
func ParseGlobalName(log logger.Log, source logger.Source) (result []string, ok bool) {
|
|
ok = true
|
|
defer func() {
|
|
r := recover()
|
|
if _, isLexerPanic := r.(js_lexer.LexerPanic); isLexerPanic {
|
|
ok = false
|
|
} else if r != nil {
|
|
panic(r)
|
|
}
|
|
}()
|
|
|
|
lexer := js_lexer.NewLexerGlobalName(log, source)
|
|
|
|
// Start off with an identifier
|
|
result = append(result, lexer.Identifier)
|
|
lexer.Expect(js_lexer.TIdentifier)
|
|
|
|
// Follow with dot or index expressions
|
|
for lexer.Token != js_lexer.TEndOfFile {
|
|
switch lexer.Token {
|
|
case js_lexer.TDot:
|
|
lexer.Next()
|
|
if !lexer.IsIdentifierOrKeyword() {
|
|
lexer.Expect(js_lexer.TIdentifier)
|
|
}
|
|
result = append(result, lexer.Identifier)
|
|
lexer.Next()
|
|
|
|
case js_lexer.TOpenBracket:
|
|
lexer.Next()
|
|
result = append(result, js_lexer.UTF16ToString(lexer.StringLiteral))
|
|
lexer.Expect(js_lexer.TStringLiteral)
|
|
lexer.Expect(js_lexer.TCloseBracket)
|
|
|
|
default:
|
|
lexer.Expect(js_lexer.TDot)
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|