var PUNC_CHARS = makePredicate(characters("[]{}(),;:"));
-var REGEXP_MODIFIERS = makePredicate(characters("gmsiy"));
-
/* -----[ Tokenizer ]----- */
// regexps adapted from http://xregexp.com/plugins/#unicode
{}
);
-var STATEMENTS_WITH_LABELS = array_to_hash([ "for", "do", "while", "switch" ]);
-
-var ATOMIC_START_TOKEN = array_to_hash([ "atom", "num", "string", "regexp", "name" ]);
+var ATOMIC_START_TOKEN = makePredicate([ "atom", "num", "string", "regexp", "name" ]);
/* -----[ Parser ]----- */
var tok = S.token, ret;
switch (tok.type) {
case "name":
- case "keyword":
ret = _make_symbol(AST_SymbolRef);
break;
case "num":
break;
}
break;
- case "operator":
- if (!is_identifier_string(tok.value)) {
- croak("Invalid getter/setter name: " + tok.value,
- tok.line, tok.col, tok.pos);
- }
- ret = _make_symbol(AST_SymbolRef);
- break;
}
next();
return ret;
func.end = prev();
return subscripts(func, allow_calls);
}
- if (ATOMIC_START_TOKEN[S.token.type]) {
+ if (ATOMIC_START_TOKEN(S.token.type)) {
return subscripts(as_atom_node(), allow_calls);
}
unexpected();
"use strict";
-function array_to_hash(a) {
- var ret = Object.create(null);
- for (var i = 0; i < a.length; ++i)
- ret[a[i]] = true;
- return ret;
-};
-
function slice(a, start) {
return Array.prototype.slice.call(a, start || 0);
};