add AST_SymbolConst for names defined with const

This commit is contained in:
Mihai Bazon
2012-10-02 12:22:39 +03:00
parent ff696cd7bc
commit 347160c631
3 changed files with 15 additions and 8 deletions

View File

@@ -599,7 +599,11 @@ var AST_SymbolDeclaration = DEFNODE("SymbolDeclaration", "init", {
}, AST_Symbol); }, AST_Symbol);
var AST_SymbolVar = DEFNODE("SymbolVar", null, { var AST_SymbolVar = DEFNODE("SymbolVar", null, {
$documentation: "Symbol defining a variable or constant", $documentation: "Symbol defining a variable",
}, AST_SymbolDeclaration);
var AST_SymbolConst = DEFNODE("SymbolConst", null, {
$documentation: "A constant declaration"
}, AST_SymbolDeclaration); }, AST_SymbolDeclaration);
var AST_SymbolFunarg = DEFNODE("SymbolFunarg", null, { var AST_SymbolFunarg = DEFNODE("SymbolFunarg", null, {

View File

@@ -1105,12 +1105,12 @@ function parse($TEXT, options) {
}); });
}; };
function vardefs(no_in) { function vardefs(no_in, in_const) {
var a = []; var a = [];
for (;;) { for (;;) {
a.push(new AST_VarDef({ a.push(new AST_VarDef({
start : S.token, start : S.token,
name : as_symbol(AST_SymbolVar), name : as_symbol(in_const ? AST_SymbolConst : AST_SymbolVar),
value : is("operator", "=") ? (next(), expression(false, no_in)) : null, value : is("operator", "=") ? (next(), expression(false, no_in)) : null,
end : prev() end : prev()
})); }));
@@ -1124,7 +1124,7 @@ function parse($TEXT, options) {
var var_ = function(no_in) { var var_ = function(no_in) {
return new AST_Var({ return new AST_Var({
start : prev(), start : prev(),
definitions : vardefs(no_in), definitions : vardefs(no_in, false),
end : prev() end : prev()
}); });
}; };
@@ -1132,7 +1132,7 @@ function parse($TEXT, options) {
var const_ = function() { var const_ = function() {
return new AST_Const({ return new AST_Const({
start : prev(), start : prev(),
definitions : vardefs(), definitions : vardefs(false, true),
end : prev() end : prev()
}); });
}; };

View File

@@ -49,6 +49,7 @@ function SymbolDef(scope, orig) {
this.global = false; this.global = false;
this.mangled_name = null; this.mangled_name = null;
this.undeclared = false; this.undeclared = false;
this.constant = false;
}; };
SymbolDef.prototype = { SymbolDef.prototype = {
@@ -144,9 +145,11 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(){
(node.scope = scope.parent_scope).def_function(node); (node.scope = scope.parent_scope).def_function(node);
node.init.push(tw.parent()); node.init.push(tw.parent());
} }
else if (node instanceof AST_SymbolVar) { else if (node instanceof AST_SymbolVar
scope.def_variable(node); || node instanceof AST_SymbolConst) {
var def = tw.parent(); var def = scope.def_variable(node);
def.constant = node instanceof AST_SymbolConst;
def = tw.parent();
if (def.value) node.init.push(def); if (def.value) node.init.push(def);
} }
else if (node instanceof AST_SymbolCatch) { else if (node instanceof AST_SymbolCatch) {