}, AST_Symbol);
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);
var AST_SymbolFunarg = DEFNODE("SymbolFunarg", null, {
});
};
- function vardefs(no_in) {
+ function vardefs(no_in, in_const) {
var a = [];
for (;;) {
a.push(new AST_VarDef({
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,
end : prev()
}));
var var_ = function(no_in) {
return new AST_Var({
start : prev(),
- definitions : vardefs(no_in),
+ definitions : vardefs(no_in, false),
end : prev()
});
};
var const_ = function() {
return new AST_Const({
start : prev(),
- definitions : vardefs(),
+ definitions : vardefs(false, true),
end : prev()
});
};
this.global = false;
this.mangled_name = null;
this.undeclared = false;
+ this.constant = false;
};
SymbolDef.prototype = {
(node.scope = scope.parent_scope).def_function(node);
node.init.push(tw.parent());
}
- else if (node instanceof AST_SymbolVar) {
- scope.def_variable(node);
- var def = tw.parent();
+ else if (node instanceof AST_SymbolVar
+ || node instanceof AST_SymbolConst) {
+ var def = scope.def_variable(node);
+ def.constant = node instanceof AST_SymbolConst;
+ def = tw.parent();
if (def.value) node.init.push(def);
}
else if (node instanceof AST_SymbolCatch) {