Skip to content

Commit 75b666f

Browse files
committed
JS: support import.meta expressions
1 parent e7a3137 commit 75b666f

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

js/parse.go

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -205,12 +205,22 @@ func (p *Parser) parseModule() (module BlockStmt) {
205205
// could be an import call expression
206206
left := &LiteralExpr{ImportToken, []byte("import")}
207207
p.exprLevel++
208-
suffix := p.parseExpressionSuffix(left, OpExpr, OpCall)
208+
expr := p.parseExpressionSuffix(left, OpExpr, OpCall)
209209
p.exprLevel--
210-
module.List = append(module.List, &ExprStmt{suffix})
210+
module.List = append(module.List, &ExprStmt{expr})
211211
if !p.prevLT && p.tt == SemicolonToken {
212212
p.next()
213213
}
214+
} else if p.tt == DotToken {
215+
p.next()
216+
if !p.consume("import.meta expression", MetaToken) {
217+
return module
218+
}
219+
left := &ImportMetaExpr{}
220+
p.exprLevel++
221+
expr := p.parseExpressionSuffix(left, OpExpr, OpMember)
222+
p.exprLevel--
223+
module.List = append(module.List, &ExprStmt{expr})
214224
} else {
215225
importStmt := p.parseImportStmt()
216226
module.List = append(module.List, &importStmt)
@@ -696,7 +706,7 @@ func (p *Parser) parseImportStmt() (importStmt ImportStmt) {
696706
p.fail("import statement", IdentifierToken)
697707
return
698708
}
699-
importStmt.List = []Alias{Alias{star, p.data}}
709+
importStmt.List = []Alias{{star, p.data}}
700710
p.next()
701711
} else if expectClause && p.tt == OpenBraceToken {
702712
p.next()
@@ -769,10 +779,10 @@ func (p *Parser) parseExportStmt() (exportStmt ExportStmt) {
769779
p.fail("export statement", IdentifierToken, StringToken)
770780
return
771781
}
772-
exportStmt.List = []Alias{Alias{star, p.data}}
782+
exportStmt.List = []Alias{{star, p.data}}
773783
p.next()
774784
} else {
775-
exportStmt.List = []Alias{Alias{nil, star}}
785+
exportStmt.List = []Alias{{nil, star}}
776786
}
777787
if p.tt != FromToken {
778788
p.fail("export statement", FromToken)

js/parse_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,7 @@ func TestParse(t *testing.T) {
295295
{"x = new new.target", "Stmt(x=(new (new.target)))"},
296296
{"x = new import.meta", "Stmt(x=(new (import.meta)))"},
297297
{"x = import(a)", "Stmt(x=(import(a)))"},
298+
{"import.meta.url", "Stmt((import.meta).url)"},
298299
{"import('module')", "Stmt(import('module'))"},
299300
{"x = +a", "Stmt(x=(+a))"},
300301
{"x = ++a", "Stmt(x=(++a))"},

0 commit comments

Comments
 (0)