зеркало из https://github.com/mozilla/gecko-dev.git
Bug 790349 - Define keywords with a higher-order macro. r=jorendorff
--HG-- extra : rebase_source : 728450bd46473d7d741c119ecfcf4c3c3f98cbad
This commit is contained in:
Родитель
a64d75f7d2
Коммит
3c58f7a44a
|
@ -830,8 +830,8 @@ ifneq (,$(IMPORT_LIBRARY))
|
||||||
endif
|
endif
|
||||||
$(MAKE) -C shell install
|
$(MAKE) -C shell install
|
||||||
|
|
||||||
# Extra dependancies and rules for auto-generated headers
|
# Extra dependencies and rules for auto-generated headers
|
||||||
host_jskwgen.$(OBJ_SUFFIX): jsversion.h jskeyword.tbl
|
host_jskwgen.$(OBJ_SUFFIX): jsversion.h vm/Keywords.h
|
||||||
|
|
||||||
# Use CURDIR to avoid finding a jsautokw.h in the source tree (from a
|
# Use CURDIR to avoid finding a jsautokw.h in the source tree (from a
|
||||||
# previous build?) via VPATH when we're building in a separate tree.
|
# previous build?) via VPATH when we're building in a separate tree.
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
|
|
||||||
#include "frontend/Parser.h"
|
#include "frontend/Parser.h"
|
||||||
#include "frontend/TokenStream.h"
|
#include "frontend/TokenStream.h"
|
||||||
|
#include "vm/Keywords.h"
|
||||||
#include "vm/RegExpObject.h"
|
#include "vm/RegExpObject.h"
|
||||||
#include "vm/StringBuffer.h"
|
#include "vm/StringBuffer.h"
|
||||||
|
|
||||||
|
@ -46,10 +47,10 @@ using namespace js::frontend;
|
||||||
using namespace js::unicode;
|
using namespace js::unicode;
|
||||||
|
|
||||||
static const KeywordInfo keywords[] = {
|
static const KeywordInfo keywords[] = {
|
||||||
#define JS_KEYWORD(keyword, type, op, version) \
|
#define KEYWORD_INFO(keyword, name, type, op, version) \
|
||||||
{js_##keyword##_str, type, op, version},
|
{js_##keyword##_str, type, op, version},
|
||||||
#include "jskeyword.tbl"
|
FOR_EACH_JAVASCRIPT_KEYWORD(KEYWORD_INFO)
|
||||||
#undef JS_KEYWORD
|
#undef KEYWORD_INFO
|
||||||
};
|
};
|
||||||
|
|
||||||
const KeywordInfo *
|
const KeywordInfo *
|
||||||
|
|
|
@ -1,75 +0,0 @@
|
||||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
|
||||||
* vim: set sw=4 ts=8 et tw=80:
|
|
||||||
*
|
|
||||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
JS_KEYWORD(false, TOK_FALSE, JSOP_FALSE, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(true, TOK_TRUE, JSOP_TRUE, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(null, TOK_NULL, JSOP_NULL, JSVERSION_DEFAULT)
|
|
||||||
|
|
||||||
/* ES5 Keywords. */
|
|
||||||
JS_KEYWORD(break, TOK_BREAK, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(case, TOK_CASE, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(catch, TOK_CATCH, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(continue, TOK_CONTINUE, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(debugger, TOK_DEBUGGER, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(default, TOK_DEFAULT, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(delete, TOK_DELETE, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(do, TOK_DO, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(else, TOK_ELSE, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(finally, TOK_FINALLY, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(for, TOK_FOR, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(function, TOK_FUNCTION, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(if, TOK_IF, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(in, TOK_IN, JSOP_IN, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(instanceof, TOK_INSTANCEOF, JSOP_INSTANCEOF,JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(new, TOK_NEW, JSOP_NEW, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(return, TOK_RETURN, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(switch, TOK_SWITCH, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(this, TOK_THIS, JSOP_THIS, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(throw, TOK_THROW, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(try, TOK_TRY, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(typeof, TOK_TYPEOF, JSOP_TYPEOF, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(var, TOK_VAR, JSOP_DEFVAR, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(void, TOK_VOID, JSOP_VOID, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(while, TOK_WHILE, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(with, TOK_WITH, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
|
|
||||||
/* ES5 reserved keywords reserved in all code. */
|
|
||||||
JS_KEYWORD(class, TOK_RESERVED, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(enum, TOK_RESERVED, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(extends, TOK_RESERVED, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(super, TOK_RESERVED, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* ES5 reserved keywords with long-implemented behavior, allowed in our
|
|
||||||
* implementation to ease code migration.
|
|
||||||
*/
|
|
||||||
#if JS_HAS_CONST
|
|
||||||
JS_KEYWORD(const, TOK_CONST, JSOP_DEFCONST, JSVERSION_DEFAULT)
|
|
||||||
#else
|
|
||||||
JS_KEYWORD(const, TOK_RESERVED, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
#endif
|
|
||||||
#if JS_HAS_BLOCK_SCOPE
|
|
||||||
JS_KEYWORD(let, TOK_LET, JSOP_NOP, JSVERSION_1_7)
|
|
||||||
#else
|
|
||||||
JS_KEYWORD(let, TOK_STRICT_RESERVED, JSOP_NOP, JSVERSION_1_7)
|
|
||||||
#endif
|
|
||||||
#if JS_HAS_GENERATORS
|
|
||||||
JS_KEYWORD(yield, TOK_YIELD, JSOP_NOP, JSVERSION_1_7)
|
|
||||||
#else
|
|
||||||
JS_KEYWORD(yield, TOK_STRICT_RESERVED, JSOP_NOP, JSVERSION_1_7)
|
|
||||||
#endif
|
|
||||||
JS_KEYWORD(export, TOK_RESERVED, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(import, TOK_RESERVED, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
|
|
||||||
/* ES5 future reserved keywords in strict mode. */
|
|
||||||
JS_KEYWORD(implements, TOK_STRICT_RESERVED, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(interface, TOK_STRICT_RESERVED, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(package, TOK_STRICT_RESERVED, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(private, TOK_STRICT_RESERVED, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(protected, TOK_STRICT_RESERVED, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(public, TOK_STRICT_RESERVED, JSOP_NOP, JSVERSION_DEFAULT)
|
|
||||||
JS_KEYWORD(static, TOK_STRICT_RESERVED, JSOP_NOP, JSVERSION_DEFAULT)
|
|
|
@ -15,10 +15,12 @@
|
||||||
|
|
||||||
#include "jsversion.h"
|
#include "jsversion.h"
|
||||||
|
|
||||||
|
#include "vm/Keywords.h"
|
||||||
|
|
||||||
const char * const keyword_list[] = {
|
const char * const keyword_list[] = {
|
||||||
#define JS_KEYWORD(keyword, type, op, version) #keyword,
|
#define KEYWORD_STRING(keyword, name, type, op, version) #keyword,
|
||||||
#include "jskeyword.tbl"
|
FOR_EACH_JAVASCRIPT_KEYWORD(KEYWORD_STRING)
|
||||||
#undef JS_KEYWORD
|
#undef KEYWORD_STRING
|
||||||
};
|
};
|
||||||
|
|
||||||
struct gen_opt {
|
struct gen_opt {
|
||||||
|
|
|
@ -0,0 +1,88 @@
|
||||||
|
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||||
|
* vim: set sw=4 ts=8 et tw=80:
|
||||||
|
*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
/* A higher-order macro for enumerating keyword tokens. */
|
||||||
|
|
||||||
|
#ifndef Keywords_h_
|
||||||
|
#define Keywords_h_
|
||||||
|
|
||||||
|
#include "jsversion.h"
|
||||||
|
|
||||||
|
#if JS_HAS_CONST
|
||||||
|
# define FOR_CONST_KEYWORD(macro) \
|
||||||
|
macro(const, const_, TOK_CONST, JSOP_DEFCONST, JSVERSION_DEFAULT)
|
||||||
|
#else
|
||||||
|
# define FOR_CONST_KEYWORD(macro) \
|
||||||
|
macro(const, const_, TOK_RESERVED, JSOP_NOP, JSVERSION_DEFAULT)
|
||||||
|
#endif
|
||||||
|
#if JS_HAS_BLOCK_SCOPE
|
||||||
|
# define FOR_LET_KEYWORD(macro) \
|
||||||
|
macro(let, let, TOK_LET, JSOP_NOP, JSVERSION_1_7)
|
||||||
|
#else
|
||||||
|
# define FOR_LET_KEYWORD(macro) \
|
||||||
|
macro(let, let, TOK_STRICT_RESERVED, JSOP_NOP, JSVERSION_1_7)
|
||||||
|
#endif
|
||||||
|
#if JS_HAS_GENERATORS
|
||||||
|
# define FOR_YIELD_KEYWORD(macro) \
|
||||||
|
macro(yield, yield, TOK_YIELD, JSOP_NOP, JSVERSION_1_7)
|
||||||
|
#else
|
||||||
|
# define FOR_YIELD_KEYWORD(macro) \
|
||||||
|
macro(yield, yield, TOK_STRICT_RESERVED, JSOP_NOP, JSVERSION_1_7)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define FOR_EACH_JAVASCRIPT_KEYWORD(macro) \
|
||||||
|
macro(false, false_, TOK_FALSE, JSOP_FALSE, JSVERSION_DEFAULT) \
|
||||||
|
macro(true, true_, TOK_TRUE, JSOP_TRUE, JSVERSION_DEFAULT) \
|
||||||
|
macro(null, null, TOK_NULL, JSOP_NULL, JSVERSION_DEFAULT) \
|
||||||
|
/* ES5 Keywords. */ \
|
||||||
|
macro(break, break_, TOK_BREAK, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(case, case_, TOK_CASE, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(catch, catch_, TOK_CATCH, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(continue, continue_, TOK_CONTINUE, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(debugger, debugger, TOK_DEBUGGER, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(default, default_, TOK_DEFAULT, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(delete, delete_, TOK_DELETE, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(do, do_, TOK_DO, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(else, else_, TOK_ELSE, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(finally, finally_, TOK_FINALLY, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(for, for_, TOK_FOR, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(function, function, TOK_FUNCTION, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(if, if_, TOK_IF, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(in, in, TOK_IN, JSOP_IN, JSVERSION_DEFAULT) \
|
||||||
|
macro(instanceof, instanceof, TOK_INSTANCEOF, JSOP_INSTANCEOF,JSVERSION_DEFAULT) \
|
||||||
|
macro(new, new_, TOK_NEW, JSOP_NEW, JSVERSION_DEFAULT) \
|
||||||
|
macro(return, return_, TOK_RETURN, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(switch, switch_, TOK_SWITCH, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(this, this_, TOK_THIS, JSOP_THIS, JSVERSION_DEFAULT) \
|
||||||
|
macro(throw, throw_, TOK_THROW, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(try, try_, TOK_TRY, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(typeof, typeof, TOK_TYPEOF, JSOP_TYPEOF, JSVERSION_DEFAULT) \
|
||||||
|
macro(var, var, TOK_VAR, JSOP_DEFVAR, JSVERSION_DEFAULT) \
|
||||||
|
macro(void, void_, TOK_VOID, JSOP_VOID, JSVERSION_DEFAULT) \
|
||||||
|
macro(while, while_, TOK_WHILE, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(with, with, TOK_WITH, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
/* ES5 reserved keywords reserved in all code. */ \
|
||||||
|
macro(class, class_, TOK_RESERVED, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(enum, enum_, TOK_RESERVED, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(export, export, TOK_RESERVED, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(extends, extends, TOK_RESERVED, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(import, import, TOK_RESERVED, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(super, super, TOK_RESERVED, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
/* ES5 future reserved keywords in strict mode. */ \
|
||||||
|
macro(implements, implements, TOK_STRICT_RESERVED, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(interface, interface, TOK_STRICT_RESERVED, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(package, package, TOK_STRICT_RESERVED, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(private, private_, TOK_STRICT_RESERVED, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(protected, protected_, TOK_STRICT_RESERVED, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(public, public_, TOK_STRICT_RESERVED, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
macro(static, static_, TOK_STRICT_RESERVED, JSOP_NOP, JSVERSION_DEFAULT) \
|
||||||
|
/* Various conditional keywords. */ \
|
||||||
|
FOR_CONST_KEYWORD(macro) \
|
||||||
|
FOR_LET_KEYWORD(macro) \
|
||||||
|
FOR_YIELD_KEYWORD(macro)
|
||||||
|
|
||||||
|
#endif /* Keywords_h_ */
|
Загрузка…
Ссылка в новой задаче