First class block scope
- Make let, const, and class symbols be declared in a block scope. - Piggy back on existing catch symbol implementation to get block-aware mangling working - Make sure unused block-scoped declarations can be dropped - Don't eliminate a block if it has a block-scoped declaration - Remove silly empty anonymous blocks left over from drop_unused - AST_Toplevel now gets to call drop_unused too, since block-scoped variables aren't global! - Don't consider block declarations global
This commit is contained in:
committed by
Richard van Velzen
parent
6702cae918
commit
634f231b78
13
lib/parse.js
13
lib/parse.js
@@ -1214,11 +1214,14 @@ function parse($TEXT, options) {
|
||||
});
|
||||
};
|
||||
|
||||
function vardefs(no_in, in_const) {
|
||||
function vardefs(no_in, kind) {
|
||||
var a = [];
|
||||
var def;
|
||||
for (;;) {
|
||||
var sym_type = in_const ? AST_SymbolConst : AST_SymbolVar;
|
||||
var sym_type =
|
||||
kind === "var" ? AST_SymbolVar :
|
||||
kind === "const" ? AST_SymbolConst :
|
||||
kind === "let" ? AST_SymbolLet : null;
|
||||
if (is("punc", "{") || is("punc", "[")) {
|
||||
def = new AST_VarDef({
|
||||
start: S.token,
|
||||
@@ -1287,7 +1290,7 @@ function parse($TEXT, options) {
|
||||
var var_ = function(no_in) {
|
||||
return new AST_Var({
|
||||
start : prev(),
|
||||
definitions : vardefs(no_in, false),
|
||||
definitions : vardefs(no_in, "var"),
|
||||
end : prev()
|
||||
});
|
||||
};
|
||||
@@ -1295,7 +1298,7 @@ function parse($TEXT, options) {
|
||||
var let_ = function(no_in) {
|
||||
return new AST_Let({
|
||||
start : prev(),
|
||||
definitions : vardefs(no_in, false),
|
||||
definitions : vardefs(no_in, "let"),
|
||||
end : prev()
|
||||
});
|
||||
};
|
||||
@@ -1303,7 +1306,7 @@ function parse($TEXT, options) {
|
||||
var const_ = function() {
|
||||
return new AST_Const({
|
||||
start : prev(),
|
||||
definitions : vardefs(false, true),
|
||||
definitions : vardefs(false, "const"),
|
||||
end : prev()
|
||||
});
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user