- use prototype-less objects where feasible (minor speed improvement)
- get rid of HOP
This commit is contained in:
Mihai Bazon
2012-10-11 11:07:42 +03:00
parent 5053a29bc0
commit 172aa7a93c
5 changed files with 37 additions and 43 deletions

View File

@@ -215,9 +215,9 @@ function is_unicode_connector_punctuation(ch) {
function is_identifier(name) {
return /^[a-z_$][a-z0-9_$]*$/i.test(name)
&& name != "this"
&& !HOP(KEYWORDS_ATOM, name)
&& !HOP(RESERVED_WORDS, name)
&& !HOP(KEYWORDS, name);
&& !KEYWORDS_ATOM[name]
&& !RESERVED_WORDS[name]
&& !KEYWORDS[name];
};
function is_identifier_start(ch) {
@@ -317,9 +317,9 @@ function tokenizer($TEXT, filename) {
};
function token(type, value, is_comment) {
S.regex_allowed = ((type == "operator" && !HOP(UNARY_POSTFIX, value)) ||
(type == "keyword" && HOP(KEYWORDS_BEFORE_EXPRESSION, value)) ||
(type == "punc" && HOP(PUNC_BEFORE_EXPRESSION, value)));
S.regex_allowed = ((type == "operator" && !UNARY_POSTFIX[value]) ||
(type == "keyword" && KEYWORDS_BEFORE_EXPRESSION[value]) ||
(type == "punc" && PUNC_BEFORE_EXPRESSION[value]));
var ret = {
type : type,
value : value,
@@ -343,7 +343,7 @@ function tokenizer($TEXT, filename) {
};
function skip_whitespace() {
while (HOP(WHITESPACE_CHARS, peek()))
while (WHITESPACE_CHARS[peek()])
next();
};
@@ -493,7 +493,7 @@ function tokenizer($TEXT, filename) {
backslash = false;
}
}
if (HOP(KEYWORDS, name) && escaped) {
if (KEYWORDS[name] && escaped) {
hex = name.charCodeAt(0).toString(16).toUpperCase();
name = "\\u" + "0000".substr(hex.length) + hex + name.slice(1);
}
@@ -528,7 +528,7 @@ function tokenizer($TEXT, filename) {
function grow(op) {
if (!peek()) return op;
var bigger = op + peek();
if (HOP(OPERATORS, bigger)) {
if (OPERATORS[bigger]) {
next();
return grow(bigger);
} else {
@@ -563,11 +563,11 @@ function tokenizer($TEXT, filename) {
function read_word() {
var word = read_name();
return HOP(KEYWORDS_ATOM, word)
return KEYWORDS_ATOM[word]
? token("atom", word)
: !HOP(KEYWORDS, word)
: !KEYWORDS[word]
? token("name", word)
: HOP(OPERATORS, word)
: OPERATORS[word]
? token("operator", word)
: token("keyword", word);
};
@@ -590,10 +590,10 @@ function tokenizer($TEXT, filename) {
if (!ch) return token("eof");
if (is_digit(ch)) return read_num();
if (ch == '"' || ch == "'") return read_string();
if (HOP(PUNC_CHARS, ch)) return token("punc", next());
if (PUNC_CHARS[ch]) return token("punc", next());
if (ch == ".") return handle_dot();
if (ch == "/") return handle_slash();
if (HOP(OPERATOR_CHARS, ch)) return read_operator();
if (OPERATOR_CHARS[ch]) return read_operator();
if (ch == "\\" || is_identifier_start(ch)) return read_word();
parse_error("Unexpected character '" + ch + "'");
};
@@ -1200,7 +1200,7 @@ function parse($TEXT, options) {
func.end = prev();
return subscripts(func, allow_calls);
}
if (HOP(ATOMIC_START_TOKEN, S.token.type)) {
if (ATOMIC_START_TOKEN[S.token.type]) {
return subscripts(as_atom_node(), allow_calls);
}
unexpected();
@@ -1348,7 +1348,7 @@ function parse($TEXT, options) {
var maybe_unary = function(allow_calls) {
var start = S.token;
if (is("operator") && HOP(UNARY_PREFIX, S.token.value)) {
if (is("operator") && UNARY_PREFIX[S.token.value]) {
var ex = make_unary(AST_UnaryPrefix,
prog1(S.token.value, next),
maybe_unary(allow_calls));
@@ -1357,7 +1357,7 @@ function parse($TEXT, options) {
return ex;
}
var val = expr_atom(allow_calls);
while (is("operator") && HOP(UNARY_POSTFIX, S.token.value) && !S.token.nlb) {
while (is("operator") && UNARY_POSTFIX[S.token.value] && !S.token.nlb) {
val = make_unary(AST_UnaryPostfix, S.token.value, val);
val.start = start;
val.end = S.token;
@@ -1428,7 +1428,7 @@ function parse($TEXT, options) {
var maybe_assign = function(no_in) {
var start = S.token;
var left = maybe_conditional(no_in), val = S.token.value;
if (is("operator") && HOP(ASSIGNMENT, val)) {
if (is("operator") && ASSIGNMENT[val]) {
if (is_assignable(left)) {
next();
return new AST_Assign({