mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 790349 - Define keywords with a higher-order macro. r=jorendorff
--HG-- extra : rebase_source : 728450bd46473d7d741c119ecfcf4c3c3f98cbad
This commit is contained in:
parent
a546087964
commit
de64264fdd
@ -830,8 +830,8 @@ ifneq (,$(IMPORT_LIBRARY))
|
||||
endif
|
||||
$(MAKE) -C shell install
|
||||
|
||||
# Extra dependancies and rules for auto-generated headers
|
||||
host_jskwgen.$(OBJ_SUFFIX): jsversion.h jskeyword.tbl
|
||||
# Extra dependencies and rules for auto-generated headers
|
||||
host_jskwgen.$(OBJ_SUFFIX): jsversion.h vm/Keywords.h
|
||||
|
||||
# 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.
|
||||
|
@ -32,6 +32,7 @@
|
||||
|
||||
#include "frontend/Parser.h"
|
||||
#include "frontend/TokenStream.h"
|
||||
#include "vm/Keywords.h"
|
||||
#include "vm/RegExpObject.h"
|
||||
#include "vm/StringBuffer.h"
|
||||
|
||||
@ -46,10 +47,10 @@ using namespace js::frontend;
|
||||
using namespace js::unicode;
|
||||
|
||||
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},
|
||||
#include "jskeyword.tbl"
|
||||
#undef JS_KEYWORD
|
||||
FOR_EACH_JAVASCRIPT_KEYWORD(KEYWORD_INFO)
|
||||
#undef KEYWORD_INFO
|
||||
};
|
||||
|
||||
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 "vm/Keywords.h"
|
||||
|
||||
const char * const keyword_list[] = {
|
||||
#define JS_KEYWORD(keyword, type, op, version) #keyword,
|
||||
#include "jskeyword.tbl"
|
||||
#undef JS_KEYWORD
|
||||
#define KEYWORD_STRING(keyword, name, type, op, version) #keyword,
|
||||
FOR_EACH_JAVASCRIPT_KEYWORD(KEYWORD_STRING)
|
||||
#undef KEYWORD_STRING
|
||||
};
|
||||
|
||||
struct gen_opt {
|
||||
|
88
js/src/vm/Keywords.h
Normal file
88
js/src/vm/Keywords.h
Normal file
@ -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_ */
|
Loading…
Reference in New Issue
Block a user