+2015-11-01 Yusuke Suzuki <utatane.tea@gmail.com>
+
+ [ES6] Support Generator Syntax
+ https://bugs.webkit.org/show_bug.cgi?id=150769
+
+ Reviewed by Geoffrey Garen.
+
+ Added ENABLE_ES6_GENERATORS flag.
+
+ * Source/cmake/OptionsWin.cmake:
+ * Source/cmake/WebKitFeatures.cmake:
+
2015-10-30 Gyuyoung Kim <gyuyoung.kim@webkit.org>
[EFL] Add Shadow DOM feature
+2015-11-01 Yusuke Suzuki <utatane.tea@gmail.com>
+
+ [ES6] Support Generator Syntax
+ https://bugs.webkit.org/show_bug.cgi?id=150769
+
+ Reviewed by Geoffrey Garen.
+
+ Change "yield" from reserved-if-strict word to keyword.
+ http://ecma-international.org/ecma-262/6.0/#sec-keywords
+
+ * js/dom/reserved-words-as-property-expected.txt:
+ * js/keywords-and-reserved_words-expected.txt:
+ * js/let-syntax-expected.txt:
+ * js/reserved-words-strict-expected.txt:
+ * js/script-tests/keywords-and-reserved_words.js:
+ * js/script-tests/reserved-words-strict.js:
+
2015-11-01 Darin Adler <darin@apple.com>
Re-land a piece of the patch for:
PASS (function(){({ yield: 42 }.yield === 42)}); true is true
PASS ({ get yield(){}, set yield(x){}, parsedOkay: 42 }.parsedOkay === 42) is true
PASS (function(){({ get yield(){}, set yield(x){}, parsedOkay: 42 }.parsedOkay === 42)}); true is true
-PASS "use strict";var yield; true threw exception SyntaxError: Cannot use the reserved word 'yield' as a variable name in strict mode..
-PASS (function(){"use strict";var yield; true}); true threw exception SyntaxError: Cannot use the reserved word 'yield' as a variable name in strict mode..
-PASS "use strict";var yield = 42; yield === 42 threw exception SyntaxError: Cannot use the reserved word 'yield' as a variable name in strict mode..
-PASS (function(){"use strict";var yield = 42; yield === 42}); true threw exception SyntaxError: Cannot use the reserved word 'yield' as a variable name in strict mode..
-PASS "use strict";function g(yield){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'yield' as a variable name in strict mode..
-PASS (function(){"use strict";function g(yield){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'yield' as a variable name in strict mode..
-PASS "use strict";/yield/.test(function g(yield){ "use strict"; }) threw exception SyntaxError: Cannot use the reserved word 'yield' as a variable name in strict mode..
-PASS (function(){"use strict";/yield/.test(function g(yield){ "use strict"; })}); true threw exception SyntaxError: Cannot use the reserved word 'yield' as a variable name in strict mode..
-PASS "use strict";try{}catch(yield){}; true threw exception SyntaxError: Cannot use the reserved word 'yield' as a catch variable name in strict mode..
-PASS (function(){"use strict";try{}catch(yield){}; true}); true threw exception SyntaxError: Cannot use the reserved word 'yield' as a catch variable name in strict mode..
-PASS "use strict";function yield(){ "use strict"; }; true threw exception SyntaxError: Cannot use the reserved word 'yield' as a function name in strict mode..
-PASS (function(){"use strict";function yield(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the reserved word 'yield' as a function name in strict mode..
+PASS "use strict";var yield; true threw exception SyntaxError: Cannot use the keyword 'yield' as a variable name..
+PASS (function(){"use strict";var yield; true}); true threw exception SyntaxError: Cannot use the keyword 'yield' as a variable name..
+PASS "use strict";var yield = 42; yield === 42 threw exception SyntaxError: Cannot use the keyword 'yield' as a variable name..
+PASS (function(){"use strict";var yield = 42; yield === 42}); true threw exception SyntaxError: Cannot use the keyword 'yield' as a variable name..
+PASS "use strict";function g(yield){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'yield' as a variable name..
+PASS (function(){"use strict";function g(yield){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'yield' as a variable name..
+PASS "use strict";/yield/.test(function g(yield){ "use strict"; }) threw exception SyntaxError: Cannot use the keyword 'yield' as a variable name..
+PASS (function(){"use strict";/yield/.test(function g(yield){ "use strict"; })}); true threw exception SyntaxError: Cannot use the keyword 'yield' as a variable name..
+PASS "use strict";try{}catch(yield){}; true threw exception SyntaxError: Cannot use the keyword 'yield' as a catch variable name..
+PASS (function(){"use strict";try{}catch(yield){}; true}); true threw exception SyntaxError: Cannot use the keyword 'yield' as a catch variable name..
+PASS "use strict";function yield(){ "use strict"; }; true threw exception SyntaxError: Cannot use the keyword 'yield' as a function name..
+PASS (function(){"use strict";function yield(){ "use strict"; }; true}); true threw exception SyntaxError: Cannot use the keyword 'yield' as a function name..
PASS "use strict";({ "yield": 42 }.yield === 42) is true
PASS (function(){"use strict";({ "yield": 42 }.yield === 42)}); true is true
PASS "use strict";({ yield: 42 }.yield === 42) is true
PASS classifyIdentifier("protected") is "strict"
PASS classifyIdentifier("public") is "strict"
PASS classifyIdentifier("static") is "strict"
-PASS classifyIdentifier("yield") is "strict"
PASS isKeyword("let") is false
PASS isStrictKeyword("let") is true
+PASS isKeyword("yield") is false
+PASS isStrictKeyword("yield") is true
PASS successfullyParsed is true
TEST COMPLETE
PASS Does not have syntax error: ''use strict'; ;({ get let() { return 50; }, set let(x) { return 50;} });'
PASS Does not have syntax error: 'function foo() { { let x; } var x; }'
PASS Does not have syntax error: ''use strict'; function foo() { { let x; } var x; }'
-SyntaxError: Unexpected keyword 'let'
-SyntaxError: Unexpected keyword 'let'
+SyntaxError: Unexpected keyword 'let'. Can't use 'let' as an identifier name for a LexicalDeclaration.
+SyntaxError: Unexpected keyword 'let'. Can't use 'let' as an identifier name for a LexicalDeclaration.
PASS Has syntax error: 'let let;'
SyntaxError: Cannot use the keyword 'let' as a variable name.
SyntaxError: Cannot use the keyword 'let' as a variable name.
PASS isReserved('protected') is true
PASS isReserved('public') is true
PASS isReserved('static') is true
-PASS isReserved('yield') is true
SHOULD NOT BE RESERVED:
PASS isReserved('abstract') is false
shouldBe('classifyIdentifier("protected")', '"strict"');
shouldBe('classifyIdentifier("public")', '"strict"');
shouldBe('classifyIdentifier("static")', '"strict"');
-shouldBe('classifyIdentifier("yield")', '"strict"');
// This is in a class of its own because it's treated as a keyword
// in strict-mode and not a keyword in sloppy mode
// (non-keyword in sloppy mode is temporary).
shouldBeFalse('isKeyword("let")'); // "var let" is allowed but "let let" is not.
shouldBeTrue('isStrictKeyword("let")');
+
+
+shouldBeFalse('isKeyword("yield")');
+shouldBeTrue('isStrictKeyword("yield")');
"implements",
"private",
"public",
- "yield",
"interface",
"package",
"protected",
+2015-11-01 Yusuke Suzuki <utatane.tea@gmail.com>
+
+ [ES6] Support Generator Syntax
+ https://bugs.webkit.org/show_bug.cgi?id=150769
+
+ Reviewed by Geoffrey Garen.
+
+ This patch implements syntax part of ES6 Generators.
+
+ 1. Add ENABLE_ES6_GENERATORS compile time flag. It is disabled by default, and will be enabled once ES6 generator functionality is implemented.
+ 2. Add lexer support for YIELD. It changes "yield" from reserved-if-strict word to keyword. And it is correct under the ES6 spec.
+ 3. Implement parsing functionality and YieldExprNode stub. YieldExprNode does not emit meaningful bytecodes yet. This should be implemented in the future patch.
+ 4. Accept "yield" Identifier as an label etc. under sloppy mode && non-generator code. http://ecma-international.org/ecma-262/6.0/#sec-generator-function-definitions-static-semantics-early-errors
+
+ * Configurations/FeatureDefines.xcconfig:
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::YieldExprNode::emitBytecode):
+ * parser/ASTBuilder.h:
+ (JSC::ASTBuilder::createYield):
+ * parser/Keywords.table:
+ * parser/NodeConstructors.h:
+ (JSC::YieldExprNode::YieldExprNode):
+ * parser/Nodes.h:
+ * parser/Parser.cpp:
+ (JSC::Parser<LexerType>::Parser):
+ (JSC::Parser<LexerType>::parseInner):
+ (JSC::Parser<LexerType>::parseStatementListItem):
+ (JSC::Parser<LexerType>::parseVariableDeclarationList):
+ (JSC::Parser<LexerType>::parseDestructuringPattern):
+ (JSC::Parser<LexerType>::parseBreakStatement):
+ (JSC::Parser<LexerType>::parseContinueStatement):
+ (JSC::Parser<LexerType>::parseTryStatement):
+ (JSC::Parser<LexerType>::parseStatement):
+ (JSC::stringForFunctionMode):
+ (JSC::Parser<LexerType>::parseFunctionParameters):
+ (JSC::Parser<LexerType>::parseFunctionInfo):
+ (JSC::Parser<LexerType>::parseFunctionDeclaration):
+ (JSC::Parser<LexerType>::parseClass):
+ (JSC::Parser<LexerType>::parseExpressionOrLabelStatement):
+ (JSC::Parser<LexerType>::parseExportDeclaration):
+ (JSC::Parser<LexerType>::parseAssignmentExpression):
+ (JSC::Parser<LexerType>::parseYieldExpression):
+ (JSC::Parser<LexerType>::parseProperty):
+ (JSC::Parser<LexerType>::parsePropertyMethod):
+ (JSC::Parser<LexerType>::parseGetterSetter):
+ (JSC::Parser<LexerType>::parseFunctionExpression):
+ (JSC::Parser<LexerType>::parsePrimaryExpression):
+ (JSC::Parser<LexerType>::parseArrowFunctionExpression):
+ * parser/Parser.h:
+ (JSC::Scope::Scope):
+ (JSC::Scope::setSourceParseMode):
+ (JSC::Scope::isGenerator):
+ (JSC::Scope::setIsFunction):
+ (JSC::Scope::setIsGenerator):
+ (JSC::Scope::setIsModule):
+ (JSC::Parser::pushScope):
+ (JSC::Parser::isYIELDMaskedAsIDENT):
+ (JSC::Parser::matchSpecIdentifier):
+ (JSC::Parser::saveState):
+ (JSC::Parser::restoreState):
+ * parser/ParserModes.h:
+ (JSC::isFunctionParseMode):
+ (JSC::isModuleParseMode):
+ (JSC::isProgramParseMode):
+ * parser/ParserTokens.h:
+ * parser/SyntaxChecker.h:
+ (JSC::SyntaxChecker::createYield):
+ * tests/stress/generator-methods.js: Added.
+ (Hello.prototype.gen):
+ (Hello.gen):
+ (Hello):
+ (Hello.prototype.set get string_appeared_here):
+ (Hello.string_appeared_here):
+ (Hello.prototype.20):
+ (Hello.20):
+ (Hello.prototype.42):
+ (Hello.42):
+ (let.object.gen):
+ (let.object.set get string_appeared_here):
+ (let.object.20):
+ (let.object.42):
+ * tests/stress/generator-syntax.js: Added.
+ (testSyntax):
+ (testSyntaxError):
+ (testSyntaxError.Hello.prototype.get gen):
+ (testSyntaxError.Hello):
+ (SyntaxError.Unexpected.token.string_appeared_here.Expected.an.opening.string_appeared_here.before.a.method.testSyntaxError.Hello.prototype.set gen):
+ (SyntaxError.Unexpected.token.string_appeared_here.Expected.an.opening.string_appeared_here.before.a.method.testSyntaxError.Hello):
+ (SyntaxError.Unexpected.token.string_appeared_here.Expected.an.opening.string_appeared_here.before.a.method.testSyntaxError.gen):
+ (testSyntaxError.value):
+ (testSyntaxError.gen.ng):
+ (testSyntaxError.gen):
+ (testSyntax.gen):
+ * tests/stress/yield-and-line-terminator.js: Added.
+ (testSyntax):
+ (testSyntaxError):
+ (testSyntax.gen):
+ (testSyntaxError.gen):
+ * tests/stress/yield-label-generator.js: Added.
+ (testSyntax):
+ (testSyntaxError):
+ (testSyntaxError.test):
+ (SyntaxError.Unexpected.keyword.string_appeared_here.Expected.an.identifier.as.the.target.a.continue.statement.testSyntax.test):
+ * tests/stress/yield-label.js: Added.
+ (yield):
+ (testSyntaxError):
+ (testSyntaxError.test):
+ * tests/stress/yield-named-accessors-generator.js: Added.
+ (t1.let.object.get yield):
+ (t1.let.object.set yield):
+ (t1):
+ (t2.let.object.get yield):
+ (t2.let.object.set yield):
+ (t2):
+ * tests/stress/yield-named-accessors.js: Added.
+ (t1.let.object.get yield):
+ (t1.let.object.set yield):
+ (t1):
+ (t2.let.object.get yield):
+ (t2.let.object.set yield):
+ (t2):
+ * tests/stress/yield-named-variable-generator.js: Added.
+ (testSyntax):
+ (testSyntaxError):
+ (testSyntaxError.t1):
+ (testSyntaxError.t1.yield):
+ (testSyntax.t1.yield):
+ (testSyntax.t1):
+ * tests/stress/yield-named-variable.js: Added.
+ (testSyntax):
+ (testSyntaxError):
+ (testSyntax.t1):
+ (testSyntaxError.t1):
+ (testSyntax.t1.yield):
+ (testSyntaxError.t1.yield):
+ * tests/stress/yield-out-of-generator.js: Added.
+ (testSyntax):
+ (testSyntaxError):
+ (testSyntaxError.hello):
+ (testSyntaxError.gen.hello):
+ (testSyntaxError.gen):
+ (testSyntax.gen):
+ (testSyntax.gen.ok):
+ (testSyntaxError.gen.ok):
+
2015-11-01 Filip Pizlo <fpizlo@apple.com>
Dominators should be factored out of the DFG
ENABLE_CHANNEL_MESSAGING = ENABLE_CHANNEL_MESSAGING;
ENABLE_ES6_ARROWFUNCTION_SYNTAX = ENABLE_ES6_ARROWFUNCTION_SYNTAX;
ENABLE_ES6_CLASS_SYNTAX = ENABLE_ES6_CLASS_SYNTAX;
+ENABLE_ES6_GENERATORS = ;
ENABLE_ES6_MODULES = ;
ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX = ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX;
ENABLE_CONTENT_FILTERING = ENABLE_CONTENT_FILTERING;
ENABLE_SHADOW_DOM = ENABLE_SHADOW_DOM;
-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_ES6_ARROWFUNCTION_SYNTAX) $(ENABLE_ES6_CLASS_SYNTAX) $(ENABLE_ES6_MODULES) $(ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GAMEPAD_DEPRECATED) $(ENABLE_GEOLOCATION) $(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING) $(ENABLE_ICONDATABASE) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_HWCONCURRENCY) $(ENABLE_NOTIFICATIONS) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_CURRENTSRC) $(ENABLE_POINTER_LOCK) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REQUEST_AUTOCOMPLETE) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RUBBER_BANDING) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_OTF_CONVERTER) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_DATACUE_VALUE) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_JIT) $(ENABLE_SATURATED_LAYOUT_ARITHMETIC) $(ENABLE_SHADOW_DOM) $(ENABLE_VIDEO_PRESENTATION_MODE);
+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_ES6_ARROWFUNCTION_SYNTAX) $(ENABLE_ES6_CLASS_SYNTAX) $(ENABLE_ES6_GENERATORS) $(ENABLE_ES6_MODULES) $(ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GAMEPAD_DEPRECATED) $(ENABLE_GEOLOCATION) $(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING) $(ENABLE_ICONDATABASE) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_HWCONCURRENCY) $(ENABLE_NOTIFICATIONS) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_CURRENTSRC) $(ENABLE_POINTER_LOCK) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REQUEST_AUTOCOMPLETE) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RUBBER_BANDING) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_OTF_CONVERTER) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_DATACUE_VALUE) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_JIT) $(ENABLE_SATURATED_LAYOUT_ARITHMETIC) $(ENABLE_SHADOW_DOM) $(ENABLE_VIDEO_PRESENTATION_MODE);
{
return generator.emitNewArrowFunctionExpression(generator.finalDestination(dst), this);
}
-
+
+// ------------------------------ YieldExprNode --------------------------------
+
+RegisterID* YieldExprNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)
+{
+ // FIXME: This is just a stub. When completing ES6 Generators, we need to implement it.
+ generator.emitThrowTypeError(ASCIILiteral("Not implemented yet."));
+ if (dst == generator.ignoredResult())
+ return 0;
+ return generator.emitLoad(dst, jsUndefined());
+}
+
#if ENABLE(ES6_CLASS_SYNTAX)
// ------------------------------ ClassDeclNode ---------------------------------
return node;
}
+ YieldExprNode* createYield(const JSTokenLocation& location)
+ {
+ return new (m_parserArena) YieldExprNode(location, nullptr, /* delegate */ false);
+ }
+
+ YieldExprNode* createYield(const JSTokenLocation& location, ExpressionNode* argument, bool delegate)
+ {
+ return new (m_parserArena) YieldExprNode(location, argument, delegate);
+ }
+
#if ENABLE(ES6_CLASS_SYNTAX)
ClassExprNode* createClassExpr(const JSTokenLocation& location, const Identifier& name, VariableEnvironment& classEnvironment, ExpressionNode* constructor,
ExpressionNode* parentClass, PropertyListNode* instanceMethods, PropertyListNode* staticMethods)
typeof TYPEOF
with WITH
debugger DEBUGGER
+yield YIELD
# Reserved for future use.
enum RESERVED
protected RESERVED_IF_STRICT
public RESERVED_IF_STRICT
static RESERVED_IF_STRICT
-yield RESERVED_IF_STRICT
@end
{
}
+ inline YieldExprNode::YieldExprNode(const JSTokenLocation& location, ExpressionNode* argument, bool delegate)
+ : ExpressionNode(location)
+ , m_argument(argument)
+ , m_delegate(delegate)
+ {
+ }
+
#if ENABLE(ES6_CLASS_SYNTAX)
inline ClassDeclNode::ClassDeclNode(const JSTokenLocation& location, ExpressionNode* classDeclaration)
: StatementNode(location)
virtual bool isArrowFuncExprNode() const override { return true; }
};
+ class YieldExprNode final : public ExpressionNode {
+ public:
+ YieldExprNode(const JSTokenLocation&, ExpressionNode* argument, bool delegate);
+
+ ExpressionNode* argument() const { return m_argument; }
+ bool delegate() const { return m_delegate; }
+
+ private:
+ virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) override;
+
+ ExpressionNode* m_argument;
+ bool m_delegate;
+ };
+
#if ENABLE(ES6_CLASS_SYNTAX)
class ClassExprNode final : public ExpressionNode, public VariableEnvironmentNode {
public:
#include "JSCJSValueInlines.h"
#include "Lexer.h"
#include "JSCInlines.h"
+#include "SetForScope.h"
#include "SourceProvider.h"
#include "VM.h"
#include <utility>
, m_syntaxAlreadyValidated(source.provider()->isValid())
, m_statementDepth(0)
, m_nonTrivialExpressionCount(0)
+ , m_functionParsePhase(FunctionParsePhase::Body)
, m_lastIdentifier(0)
, m_lastFunctionName(nullptr)
, m_sourceElements(0)
m_token.m_location.endOffset = source.startOffset();
m_token.m_location.lineStartOffset = source.startOffset();
m_functionCache = vm->addSourceProviderCache(source.provider());
+
ScopeRef scope = pushScope();
- if (isFunctionParseMode(parseMode))
- scope->setIsFunction();
- if (isModuleParseMode(parseMode))
- scope->setIsModule();
+ scope->setSourceParseMode(parseMode);
+
if (strictMode == JSParserStrictMode::Strict)
scope->setStrictMode();
ASTBuilder context(const_cast<VM*>(m_vm), m_parserArena, const_cast<SourceCode*>(m_source));
ScopeRef scope = currentScope();
scope->setIsLexicalScope();
+ SetForScope<FunctionParsePhase> functionParsePhasePoisoner(m_functionParsePhase, FunctionParsePhase::Body);
bool isArrowFunctionBodyExpression = false;
if (m_lexer->isReparsingFunction()) {
if (!strictMode()) {
SavePoint savePoint = createSavePoint();
next();
- if (!match(IDENT) && !match(OPENBRACE) && !match(OPENBRACKET))
+ // Intentionally use `match(IDENT) || match(LET) || match(YIELD)` and don't use `matchSpecIdentifier()`.
+ // We would like to fall into parseVariableDeclaration path even if "yield" is not treated as an Identifier.
+ // For example, under a generator context, matchSpecIdentifier() for "yield" returns `false`.
+ // But we would like to enter parseVariableDeclaration and raise an error under the context of parseVariableDeclaration
+ // to raise consistent errors between "var", "const" and "let".
+ if (!(match(IDENT) || match(LET) || match(YIELD)) && !match(OPENBRACE) && !match(OPENBRACKET))
shouldParseVariableDeclaration = false;
restoreSavePoint(savePoint);
}
TreeExpression node = 0;
declarations++;
bool hasInitializer = false;
- if (match(IDENT) || isLETMaskedAsIDENT()) {
+ if (matchSpecIdentifier()) {
failIfTrue(match(LET) && (declarationType == DeclarationType::LetDeclaration || declarationType == DeclarationType::ConstDeclaration),
"Can't use 'let' as an identifier name for a LexicalDeclaration");
JSTextPosition varStart = tokenStartPosition();
const Identifier* propertyName = nullptr;
TreeDestructuringPattern innerPattern = 0;
JSTokenLocation location = m_token.m_location;
- if (match(IDENT) || isLETMaskedAsIDENT()) {
+ if (matchSpecIdentifier()) {
failIfTrue(match(LET) && (kind == DestructureToLet || kind == DestructureToConst), "Can't use 'let' as an identifier name for a LexicalDeclaration");
propertyName = m_token.m_data.ident;
JSToken identifierToken = m_token;
}
default: {
- if (!match(IDENT) && !isLETMaskedAsIDENT()) {
+ if (!matchSpecIdentifier()) {
if (kind == DestructureToExpressions)
return 0;
semanticFailureDueToKeyword("variable name");
semanticFailIfFalse(breakIsValid(), "'break' is only valid inside a switch or loop statement");
return context.createBreakStatement(location, &m_vm->propertyNames->nullIdentifier, start, end);
}
- failIfFalse(match(IDENT) || isLETMaskedAsIDENT(), "Expected an identifier as the target for a break statement");
+ failIfFalse(matchSpecIdentifier(), "Expected an identifier as the target for a break statement");
const Identifier* ident = m_token.m_data.ident;
semanticFailIfFalse(getLabel(ident), "Cannot use the undeclared label '", ident->impl(), "'");
end = tokenEndPosition();
semanticFailIfFalse(continueIsValid(), "'continue' is only valid inside a loop statement");
return context.createContinueStatement(location, &m_vm->propertyNames->nullIdentifier, start, end);
}
- failIfFalse(match(IDENT) || isLETMaskedAsIDENT(), "Expected an identifier as the target for a continue statement");
+ failIfFalse(matchSpecIdentifier(), "Expected an identifier as the target for a continue statement");
const Identifier* ident = m_token.m_data.ident;
ScopeLabelInfo* label = getLabel(ident);
semanticFailIfFalse(label, "Cannot use the undeclared label '", ident->impl(), "'");
next();
handleProductionOrFail(OPENPAREN, "(", "start", "'catch' target");
- if (!(match(IDENT) || isLETMaskedAsIDENT())) {
+ if (!matchSpecIdentifier()) {
semanticFailureDueToKeyword("catch variable name");
failWithMessage("Expected identifier name as catch target");
}
// These tokens imply the end of a set of source elements
return 0;
case IDENT:
+ case YIELD:
result = parseExpressionOrLabelStatement(context);
break;
case STRING:
return "function";
case SourceParseMode::MethodMode:
return "method";
+ case SourceParseMode::GeneratorMode:
+ return "generator";
case SourceParseMode::ArrowFunctionMode:
return "arrow function";
case SourceParseMode::ProgramMode:
TreeFormalParameterList parameterList = context.createFormalParameterList();
functionInfo.parameters = parameterList;
functionInfo.startOffset = parametersStart;
+ SetForScope<FunctionParsePhase> functionParsePhasePoisoner(m_functionParsePhase, FunctionParsePhase::Parameters);
if (mode == SourceParseMode::ArrowFunctionMode) {
if (!match(IDENT) && !match(OPENPAREN)) {
}
template <typename LexerType>
-template <class TreeBuilder> bool Parser<LexerType>::parseFunctionInfo(TreeBuilder& context, FunctionRequirements requirements, SourceParseMode mode, bool nameIsInContainingScope, ConstructorKind constructorKind, SuperBinding expectedSuperBinding, int functionKeywordStart, ParserFunctionInfo<TreeBuilder>& functionInfo, FunctionParseType parseType)
+template <class TreeBuilder> bool Parser<LexerType>::parseFunctionInfo(TreeBuilder& context, FunctionRequirements requirements, SourceParseMode mode, bool nameIsInContainingScope, ConstructorKind constructorKind, SuperBinding expectedSuperBinding, int functionKeywordStart, ParserFunctionInfo<TreeBuilder>& functionInfo, FunctionDefinitionType functionDefinitionType)
{
RELEASE_ASSERT(isFunctionParseMode(mode));
+ bool upperScopeIsGenerator = currentScope()->isGenerator();
AutoPopScopeRef functionScope(this, pushScope());
- functionScope->setIsFunction();
+ functionScope->setSourceParseMode(mode);
+ SetForScope<FunctionParsePhase> functionParsePhasePoisoner(m_functionParsePhase, FunctionParsePhase::Body);
int functionNameStart = m_token.m_location.startOffset;
const Identifier* lastFunctionName = m_lastFunctionName;
m_lastFunctionName = nullptr;
JSTokenLocation startLocation;
int startColumn;
FunctionBodyType functionBodyType;
-
- switch (parseType) {
- case StandardFunctionParseType: {
- RELEASE_ASSERT(mode != SourceParseMode::ArrowFunctionMode);
- if (match(IDENT) || isLETMaskedAsIDENT()) {
+
+ if (mode == SourceParseMode::ArrowFunctionMode) {
+ startLocation = tokenLocation();
+ functionInfo.startLine = tokenLine();
+ startColumn = tokenColumn();
+
+ parametersStart = parseFunctionParameters(context, mode, functionInfo);
+ propagateError();
+
+ matchOrFail(ARROWFUNCTION, "Expected a '=>' after arrow function parameter declaration");
+
+ if (m_lexer->prevTerminator())
+ failDueToUnexpectedToken();
+
+ ASSERT(constructorKind == ConstructorKind::None);
+
+ // Check if arrow body start with {. If it true it mean that arrow function is Fat arrow function
+ // and we need use common approach to parse function body
+ next();
+ functionBodyType = match(OPENBRACE) ? ArrowFunctionBodyBlock : ArrowFunctionBodyExpression;
+ } else {
+ // http://ecma-international.org/ecma-262/6.0/#sec-function-definitions
+ // FunctionExpression :
+ // function BindingIdentifieropt ( FormalParameters ) { FunctionBody }
+ //
+ // FunctionDeclaration[Yield, Default] :
+ // function BindingIdentifier[?Yield] ( FormalParameters ) { FunctionBody }
+ // [+Default] function ( FormalParameters ) { FunctionBody }
+ //
+ // GeneratorDeclaration[Yield, Default] :
+ // function * BindingIdentifier[?Yield] ( FormalParameters[Yield] ) { GeneratorBody }
+ // [+Default] function * ( FormalParameters[Yield] ) { GeneratorBody }
+ //
+ // GeneratorExpression :
+ // function * BindingIdentifier[Yield]opt ( FormalParameters[Yield] ) { GeneratorBody }
+ //
+ // The name of FunctionExpression can accept "yield" even in the context of generator.
+ if (functionDefinitionType == FunctionDefinitionType::Expression && mode == SourceParseMode::NormalFunctionMode)
+ upperScopeIsGenerator = false;
+
+ if (matchSpecIdentifier(upperScopeIsGenerator)) {
functionInfo.name = m_token.m_data.ident;
m_lastFunctionName = functionInfo.name;
next();
}
functionBodyType = StandardFunctionBodyBlock;
-
- break;
}
-#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
- case ArrowFunctionParseType: {
- RELEASE_ASSERT(mode == SourceParseMode::ArrowFunctionMode);
- startLocation = tokenLocation();
- functionInfo.startLine = tokenLine();
- startColumn = tokenColumn();
-
- parametersStart = parseFunctionParameters(context, mode, functionInfo);
- propagateError();
-
- matchOrFail(ARROWFUNCTION, "Expected a '=>' after arrow function parameter declaration");
-
- if (m_lexer->prevTerminator())
- failDueToUnexpectedToken();
-
- ASSERT(constructorKind == ConstructorKind::None);
-
- // Check if arrow body start with {. If it true it mean that arrow function is Fat arrow function
- // and we need use common approach to parse function body
- next();
- functionBodyType = match(OPENBRACE) ? ArrowFunctionBodyBlock : ArrowFunctionBodyExpression;
-
- break;
- }
-#else
- default:
- RELEASE_ASSERT_NOT_REACHED();
-#endif
- }
-
bool isClassConstructor = constructorKind != ConstructorKind::None;
functionInfo.bodyStartColumn = startColumn;
endLocation.startOffset - endLocation.lineStartOffset;
unsigned currentLineStartOffset = m_token.m_location.lineStartOffset;
- bool isArrowFunction = parseType == ArrowFunctionParseType;
+ bool isArrowFunction = mode == SourceParseMode::ArrowFunctionMode;
functionInfo.body = context.createFunctionMetadata(
startLocation, endLocation, functionInfo.bodyStartColumn, bodyEndColumn,
failIfFalse(functionInfo.body, "Cannot parse the body of this ", stringForFunctionMode(mode));
context.setEndOffset(functionInfo.body, m_lexer->currentOffset());
if (functionScope->strictMode() && functionInfo.name) {
- RELEASE_ASSERT(mode == SourceParseMode::NormalFunctionMode || mode == SourceParseMode::MethodMode || mode == SourceParseMode::ArrowFunctionMode);
+ RELEASE_ASSERT(mode == SourceParseMode::NormalFunctionMode || mode == SourceParseMode::MethodMode || mode == SourceParseMode::ArrowFunctionMode || mode == SourceParseMode::GeneratorMode);
semanticFailIfTrue(m_vm->propertyNames->arguments == *functionInfo.name, "'", functionInfo.name->impl(), "' is not a valid function name in strict mode");
semanticFailIfTrue(m_vm->propertyNames->eval == *functionInfo.name, "'", functionInfo.name->impl(), "' is not a valid function name in strict mode");
}
unsigned functionKeywordStart = tokenStart();
next();
ParserFunctionInfo<TreeBuilder> functionInfo;
- failIfFalse((parseFunctionInfo(context, FunctionNeedsName, SourceParseMode::NormalFunctionMode, true, ConstructorKind::None, SuperBinding::NotNeeded,
- functionKeywordStart, functionInfo, StandardFunctionParseType)), "Cannot parse this function");
+ SourceParseMode parseMode = SourceParseMode::NormalFunctionMode;
+#if ENABLE(ES6_GENERATORS)
+ if (consume(TIMES))
+ parseMode = SourceParseMode::GeneratorMode;
+#endif
+ failIfFalse((parseFunctionInfo(context, FunctionNeedsName, parseMode, true, ConstructorKind::None, SuperBinding::NotNeeded, functionKeywordStart, functionInfo, FunctionDefinitionType::Declaration)), "Cannot parse this function");
failIfFalse(functionInfo.name, "Function statements must have a name");
+
DeclarationResultMask declarationResult = declareVariable(functionInfo.name);
failIfTrueIfStrict(declarationResult & DeclarationResult::InvalidStrictMode, "Cannot declare a function named '", functionInfo.name->impl(), "' in strict mode");
if (declarationResult & DeclarationResult::InvalidDuplicateDeclaration)
TreeExpression computedPropertyName = 0;
bool isGetter = false;
bool isSetter = false;
+ bool isGenerator = false;
+#if ENABLE(ES6_GENERATORS)
+ if (consume(TIMES))
+ isGenerator = true;
+#endif
switch (m_token.m_type) {
case STRING:
ident = m_token.m_data.ident;
ident = m_token.m_data.ident;
ASSERT(ident);
next();
- if (match(IDENT) || match(STRING) || match(DOUBLE) || match(INTEGER) || match(OPENBRACKET)) {
+ if (!isGenerator && (match(IDENT) || match(STRING) || match(DOUBLE) || match(INTEGER) || match(OPENBRACKET))) {
isGetter = *ident == propertyNames.get;
isSetter = *ident == propertyNames.set;
}
} else {
ParserFunctionInfo<TreeBuilder> methodInfo;
bool isConstructor = !isStaticMethod && *ident == propertyNames.constructor;
- failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, SourceParseMode::MethodMode, false, isConstructor ? constructorKind : ConstructorKind::None, SuperBinding::Needed, methodStart, methodInfo, StandardFunctionParseType)), "Cannot parse this method");
+ SourceParseMode parseMode = SourceParseMode::MethodMode;
+ if (isGenerator) {
+ isConstructor = false;
+ parseMode = SourceParseMode::GeneratorMode;
+ semanticFailIfTrue(*ident == m_vm->propertyNames->prototype, "Cannot declare a generator named 'prototype'");
+ semanticFailIfTrue(*ident == m_vm->propertyNames->constructor, "Cannot declare a generator named 'constructor'");
+ }
+ failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, parseMode, false, isConstructor ? constructorKind : ConstructorKind::None, SuperBinding::Needed, methodStart, methodInfo, FunctionDefinitionType::Method)), "Cannot parse this method");
methodInfo.name = isConstructor ? className : ident;
TreeExpression method = context.createFunctionExpr(methodLocation, methodInfo);
failIfTrue(getLabel(ident), "Cannot find scope for the label '", ident->impl(), "'");
labels.append(LabelInfo(ident, start, end));
}
- } while (match(IDENT) || isLETMaskedAsIDENT());
+ } while (matchSpecIdentifier());
bool isLoop = false;
switch (m_token.m_type) {
case FOR:
bool isFunctionOrClassDeclaration = false;
const Identifier* localName = nullptr;
SavePoint savePoint = createSavePoint();
- if (match(FUNCTION)
+
+ bool startsWithFunction = match(FUNCTION);
+ if (startsWithFunction
#if ENABLE(ES6_CLASS_SYNTAX)
|| match(CLASSTOKEN)
#endif
) {
isFunctionOrClassDeclaration = true;
next();
- // FIXME: When landing ES6 generators, we need to take care of that '*' comes.
+
+#if ENABLE(ES6_GENERATORS)
+ // ES6 Generators
+ if (startsWithFunction && match(TIMES))
+ next();
+#endif
if (match(IDENT))
localName = m_token.m_data.ident;
restoreSavePoint(savePoint);
}
restoreSavePoint(savePoint);
}
-
+
+#if ENABLE(ES6_GENERATORS)
+ if (match(YIELD))
+ return parseYieldExpression(context);
+#endif
+
#if ENABLE(ES6_ARROWFUNCTION_SYNTAX)
if (isArrowFunctionParamters())
return parseArrowFunctionExpression(context);
return lhs;
}
+template <typename LexerType>
+template <class TreeBuilder> TreeExpression Parser<LexerType>::parseYieldExpression(TreeBuilder& context)
+{
+ // YieldExpression[In] :
+ // yield
+ // yield [no LineTerminator here] AssignmentExpression[?In, Yield]
+ // yield [no LineTerminator here] * AssignmentExpression[?In, Yield]
+
+ // http://ecma-international.org/ecma-262/6.0/#sec-generator-function-definitions
+ failIfFalse(currentScope()->isGenerator(), "Cannot use yield expression out of generator");
+
+ // http://ecma-international.org/ecma-262/6.0/#sec-generator-function-definitions-static-semantics-early-errors
+ failIfTrue(m_functionParsePhase == FunctionParsePhase::Parameters, "Cannot use yield expression within parameters");
+
+ JSTokenLocation location(tokenLocation());
+ ASSERT(match(YIELD));
+ SavePoint savePoint = createSavePoint();
+ next();
+ if (m_lexer->prevTerminator())
+ return context.createYield(location);
+
+ bool delegate = consume(TIMES);
+ TreeExpression argument = parseAssignmentExpression(context);
+ if (!argument) {
+ restoreSavePoint(savePoint);
+ next();
+ return context.createYield(location);
+ }
+ return context.createYield(location, argument, delegate);
+}
+
template <typename LexerType>
template <class TreeBuilder> TreeExpression Parser<LexerType>::parseConditionalExpression(TreeBuilder& context)
{
template <class TreeBuilder> TreeProperty Parser<LexerType>::parseProperty(TreeBuilder& context, bool complete)
{
bool wasIdent = false;
+ bool isGenerator = false;
+#if ENABLE(ES6_GENERATORS)
+ if (consume(TIMES))
+ isGenerator = true;
+#endif
switch (m_token.m_type) {
namedProperty:
case IDENT:
case STRING: {
const Identifier* ident = m_token.m_data.ident;
unsigned getterOrSetterStartOffset = tokenStart();
- if (complete || (wasIdent && (*ident == m_vm->propertyNames->get || *ident == m_vm->propertyNames->set)))
+ if (complete || (wasIdent && !isGenerator && (*ident == m_vm->propertyNames->get || *ident == m_vm->propertyNames->set)))
nextExpectIdentifier(LexerFlagsIgnoreReservedWords);
else
nextExpectIdentifier(LexerFlagsIgnoreReservedWords | TreeBuilder::DontBuildKeywords);
- if (match(COLON)) {
+ if (!isGenerator && match(COLON)) {
next();
TreeExpression node = parseAssignmentExpression(context);
failIfFalse(node, "Cannot parse expression for property declaration");
}
if (match(OPENPAREN)) {
- auto method = parsePropertyMethod(context, ident);
+ auto method = parsePropertyMethod(context, ident, isGenerator);
propagateError();
return context.createProperty(ident, method, PropertyNode::Constant, PropertyNode::KnownDirect, complete);
}
+ failIfTrue(isGenerator, "Expected a parenthesis for argument list");
failIfFalse(wasIdent, "Expected an identifier as property name");
if (match(OPENPAREN)) {
const Identifier& ident = m_parserArena.identifierArena().makeNumericIdentifier(const_cast<VM*>(m_vm), propertyName);
- auto method = parsePropertyMethod(context, &ident);
+ auto method = parsePropertyMethod(context, &ident, isGenerator);
propagateError();
return context.createProperty(&ident, method, PropertyNode::Constant, PropertyNode::Unknown, complete);
}
+ failIfTrue(isGenerator, "Expected a parenthesis for argument list");
consumeOrFail(COLON, "Expected ':' after property name");
TreeExpression node = parseAssignmentExpression(context);
handleProductionOrFail(CLOSEBRACKET, "]", "end", "computed property name");
if (match(OPENPAREN)) {
- auto method = parsePropertyMethod(context, &m_vm->propertyNames->nullIdentifier);
+ auto method = parsePropertyMethod(context, &m_vm->propertyNames->nullIdentifier, isGenerator);
propagateError();
return context.createProperty(propertyName, method, static_cast<PropertyNode::Type>(PropertyNode::Constant | PropertyNode::Computed), PropertyNode::KnownDirect, complete);
}
+ failIfTrue(isGenerator, "Expected a parenthesis for argument list");
consumeOrFail(COLON, "Expected ':' after property name");
TreeExpression node = parseAssignmentExpression(context);
}
template <typename LexerType>
-template <class TreeBuilder> TreeExpression Parser<LexerType>::parsePropertyMethod(TreeBuilder& context, const Identifier* methodName)
+template <class TreeBuilder> TreeExpression Parser<LexerType>::parsePropertyMethod(TreeBuilder& context, const Identifier* methodName, bool isGenerator)
{
JSTokenLocation methodLocation(tokenLocation());
unsigned methodStart = tokenStart();
ParserFunctionInfo<TreeBuilder> methodInfo;
- failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, SourceParseMode::MethodMode, false, ConstructorKind::None, SuperBinding::NotNeeded, methodStart, methodInfo, StandardFunctionParseType)), "Cannot parse this method");
+ SourceParseMode parseMode = isGenerator ? SourceParseMode::GeneratorMode : SourceParseMode::MethodMode;
+ failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, parseMode, false, ConstructorKind::None, SuperBinding::NotNeeded, methodStart, methodInfo, FunctionDefinitionType::Method)), "Cannot parse this method");
methodInfo.name = methodName;
return context.createFunctionExpr(methodLocation, methodInfo);
}
JSTokenLocation location(tokenLocation());
- if (match(IDENT) || match(STRING) || isLETMaskedAsIDENT()) {
+ if (matchSpecIdentifier() || match(STRING)) {
stringPropertyName = m_token.m_data.ident;
semanticFailIfTrue(superBinding == SuperBinding::Needed && *stringPropertyName == m_vm->propertyNames->prototype,
"Cannot declare a static method named 'prototype'");
ParserFunctionInfo<TreeBuilder> info;
if (type & PropertyNode::Getter) {
failIfFalse(match(OPENPAREN), "Expected a parameter list for getter definition");
- failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, SourceParseMode::GetterMode, false, constructorKind, superBinding,
- getterOrSetterStartOffset, info, StandardFunctionParseType)), "Cannot parse getter definition");
+ failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, SourceParseMode::GetterMode, false, constructorKind, superBinding, getterOrSetterStartOffset, info, FunctionDefinitionType::Method)), "Cannot parse getter definition");
} else {
failIfFalse(match(OPENPAREN), "Expected a parameter list for setter definition");
- failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, SourceParseMode::SetterMode, false, constructorKind, superBinding,
- getterOrSetterStartOffset, info, StandardFunctionParseType)), "Cannot parse setter definition");
+ failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, SourceParseMode::SetterMode, false, constructorKind, superBinding, getterOrSetterStartOffset, info, FunctionDefinitionType::Method)), "Cannot parse setter definition");
}
if (stringPropertyName)
return context.createArray(location, elementList);
}
+template <typename LexerType>
+template <class TreeBuilder> TreeExpression Parser<LexerType>::parseFunctionExpression(TreeBuilder& context)
+{
+ ASSERT(match(FUNCTION));
+ JSTokenLocation location(tokenLocation());
+ unsigned functionKeywordStart = tokenStart();
+ next();
+ ParserFunctionInfo<TreeBuilder> functionInfo;
+ functionInfo.name = &m_vm->propertyNames->nullIdentifier;
+ SourceParseMode parseMode = SourceParseMode::NormalFunctionMode;
+#if ENABLE(ES6_GENERATORS)
+ if (consume(TIMES))
+ parseMode = SourceParseMode::GeneratorMode;
+#endif
+ failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, parseMode, false, ConstructorKind::None, SuperBinding::NotNeeded, functionKeywordStart, functionInfo, FunctionDefinitionType::Expression)), "Cannot parse function expression");
+ return context.createFunctionExpr(location, functionInfo);
+}
+
#if ENABLE(ES6_TEMPLATE_LITERAL_SYNTAX)
template <typename LexerType>
template <class TreeBuilder> typename TreeBuilder::TemplateString Parser<LexerType>::parseTemplateString(TreeBuilder& context, bool isTemplateHead, typename LexerType::RawStringsBuildMode rawStringsBuildMode, bool& elementIsTail)
{
failIfStackOverflow();
switch (m_token.m_type) {
- case FUNCTION: {
- JSTokenLocation location(tokenLocation());
- unsigned functionKeywordStart = tokenStart();
- next();
- ParserFunctionInfo<TreeBuilder> info;
- info.name = &m_vm->propertyNames->nullIdentifier;
- failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, SourceParseMode::NormalFunctionMode, false, ConstructorKind::None, SuperBinding::NotNeeded, functionKeywordStart, info, StandardFunctionParseType)), "Cannot parse function expression");
- return context.createFunctionExpr(location, info);
- }
+ case FUNCTION:
+ return parseFunctionExpression(context);
#if ENABLE(ES6_CLASS_SYNTAX)
case CLASSTOKEN: {
ParserClassInfo<TreeBuilder> info;
case TEMPLATE:
return parseTemplateLiteral(context, LexerType::RawStringsBuildMode::DontBuildRawStrings);
#endif
+ case YIELD:
+ if (!strictMode() && !currentScope()->isGenerator())
+ goto identifierExpression;
+ failDueToUnexpectedToken();
case LET:
if (!strictMode())
goto identifierExpression;
location = tokenLocation();
ParserFunctionInfo<TreeBuilder> info;
info.name = &m_vm->propertyNames->nullIdentifier;
- failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, SourceParseMode::ArrowFunctionMode, true, ConstructorKind::None, SuperBinding::NotNeeded, functionKeywordStart, info, ArrowFunctionParseType)), "Cannot parse arrow function expression");
+ failIfFalse((parseFunctionInfo(context, FunctionNoRequirements, SourceParseMode::ArrowFunctionMode, true, ConstructorKind::None, SuperBinding::NotNeeded, functionKeywordStart, info, FunctionDefinitionType::Expression)), "Cannot parse arrow function expression");
return context.createArrowFunctionExpr(location, info);
}
COMPILE_ASSERT(LastUntaggedToken < 64, LessThan64UntaggedTokens);
enum SourceElementsMode { CheckForStrictMode, DontCheckForStrictMode };
-enum FunctionParseType { StandardFunctionParseType, ArrowFunctionParseType };
enum FunctionBodyType { ArrowFunctionBodyExpression, ArrowFunctionBodyBlock, StandardFunctionBodyBlock };
enum FunctionRequirements { FunctionNoRequirements, FunctionNeedsName };
};
struct Scope {
- Scope(const VM* vm, bool isFunction, bool strictMode)
+ Scope(const VM* vm, bool isFunction, bool isGenerator, bool strictMode)
: m_vm(vm)
, m_shadowsArguments(false)
, m_usesEval(false)
, m_allowsLexicalDeclarations(true)
, m_strictMode(strictMode)
, m_isFunction(isFunction)
+ , m_isGenerator(isGenerator)
, m_isLexicalScope(false)
, m_isFunctionBoundary(false)
, m_isValidStrictMode(true)
, m_allowsLexicalDeclarations(rhs.m_allowsLexicalDeclarations)
, m_strictMode(rhs.m_strictMode)
, m_isFunction(rhs.m_isFunction)
+ , m_isGenerator(rhs.m_isGenerator)
, m_isLexicalScope(rhs.m_isLexicalScope)
, m_isFunctionBoundary(rhs.m_isFunctionBoundary)
, m_isValidStrictMode(rhs.m_isValidStrictMode)
return 0;
}
- void setIsFunction()
+ void setSourceParseMode(SourceParseMode mode)
{
- m_isFunction = true;
- m_isFunctionBoundary = true;
- setIsLexicalScope();
- }
+ switch (mode) {
+ case SourceParseMode::GeneratorMode:
+ setIsGenerator();
+ break;
- void setIsModule()
- {
- m_moduleScopeData = ModuleScopeData::create();
+ case SourceParseMode::NormalFunctionMode:
+ case SourceParseMode::GetterMode:
+ case SourceParseMode::SetterMode:
+ case SourceParseMode::MethodMode:
+ case SourceParseMode::ArrowFunctionMode:
+ setIsFunction();
+ break;
+
+ case SourceParseMode::ProgramMode:
+ break;
+
+ case SourceParseMode::ModuleAnalyzeMode:
+ case SourceParseMode::ModuleEvaluateMode:
+ setIsModule();
+ break;
+ }
}
bool isFunction() const { return m_isFunction; }
bool isFunctionBoundary() const { return m_isFunctionBoundary; }
+ bool isGenerator() const { return m_isGenerator; }
void setIsLexicalScope()
{
}
private:
+ void setIsFunction()
+ {
+ m_isFunction = true;
+ m_isFunctionBoundary = true;
+ setIsLexicalScope();
+ m_isGenerator = false;
+ }
+
+ void setIsGenerator()
+ {
+ setIsFunction();
+ m_isGenerator = true;
+ }
+
+ void setIsModule()
+ {
+ m_moduleScopeData = ModuleScopeData::create();
+ }
+
const VM* m_vm;
bool m_shadowsArguments : 1;
bool m_usesEval : 1;
bool m_allowsLexicalDeclarations : 1;
bool m_strictMode : 1;
bool m_isFunction : 1;
+ bool m_isGenerator : 1;
bool m_isLexicalScope : 1;
bool m_isFunctionBoundary : 1;
bool m_isValidStrictMode : 1;
{
bool isFunction = false;
bool isStrict = false;
+ bool isGenerator = false;
if (!m_scopeStack.isEmpty()) {
isStrict = m_scopeStack.last().strictMode();
isFunction = m_scopeStack.last().isFunction();
+ isGenerator = m_scopeStack.last().isGenerator();
}
- m_scopeStack.append(Scope(m_vm, isFunction, isStrict));
+ m_scopeStack.append(Scope(m_vm, isFunction, isGenerator, isStrict));
return currentScope();
}
return result;
}
+ // http://ecma-international.org/ecma-262/6.0/#sec-identifiers-static-semantics-early-errors
ALWAYS_INLINE bool isLETMaskedAsIDENT()
{
return match(LET) && !strictMode();
}
+ // http://ecma-international.org/ecma-262/6.0/#sec-identifiers-static-semantics-early-errors
+ ALWAYS_INLINE bool isYIELDMaskedAsIDENT(bool inGenerator)
+ {
+ return match(YIELD) && !strictMode() && !inGenerator;
+ }
+
+ // http://ecma-international.org/ecma-262/6.0/#sec-generator-function-definitions-static-semantics-early-errors
+ ALWAYS_INLINE bool matchSpecIdentifier(bool inGenerator)
+ {
+ return match(IDENT) || isLETMaskedAsIDENT() || isYIELDMaskedAsIDENT(inGenerator);
+ }
+
+ ALWAYS_INLINE bool matchSpecIdentifier()
+ {
+ return matchSpecIdentifier(currentScope()->isGenerator());
+ }
+
template <class TreeBuilder> TreeSourceElements parseSourceElements(TreeBuilder&, SourceElementsMode);
template <class TreeBuilder> TreeStatement parseStatementListItem(TreeBuilder&, const Identifier*& directive, unsigned* directiveLiteralLength);
template <class TreeBuilder> TreeStatement parseStatement(TreeBuilder&, const Identifier*& directive, unsigned* directiveLiteralLength = 0);
template <class TreeBuilder> TreeStatement parseBlockStatement(TreeBuilder&);
template <class TreeBuilder> TreeExpression parseExpression(TreeBuilder&);
template <class TreeBuilder> TreeExpression parseAssignmentExpression(TreeBuilder&);
+ template <class TreeBuilder> TreeExpression parseYieldExpression(TreeBuilder&);
template <class TreeBuilder> ALWAYS_INLINE TreeExpression parseConditionalExpression(TreeBuilder&);
template <class TreeBuilder> ALWAYS_INLINE TreeExpression parseBinaryExpression(TreeBuilder&);
template <class TreeBuilder> ALWAYS_INLINE TreeExpression parseUnaryExpression(TreeBuilder&);
template <class TreeBuilder> ALWAYS_INLINE TreeExpression parseArrayLiteral(TreeBuilder&);
template <class TreeBuilder> ALWAYS_INLINE TreeExpression parseObjectLiteral(TreeBuilder&);
template <class TreeBuilder> NEVER_INLINE TreeExpression parseStrictObjectLiteral(TreeBuilder&);
+ template <class TreeBuilder> ALWAYS_INLINE TreeExpression parseFunctionExpression(TreeBuilder&);
enum SpreadMode { AllowSpread, DontAllowSpread };
template <class TreeBuilder> ALWAYS_INLINE TreeArguments parseArguments(TreeBuilder&, SpreadMode);
template <class TreeBuilder> TreeProperty parseProperty(TreeBuilder&, bool strict);
- template <class TreeBuilder> TreeExpression parsePropertyMethod(TreeBuilder& context, const Identifier* methodName);
+ template <class TreeBuilder> TreeExpression parsePropertyMethod(TreeBuilder& context, const Identifier* methodName, bool isGenerator);
template <class TreeBuilder> TreeProperty parseGetterSetter(TreeBuilder&, bool strict, PropertyNode::Type, unsigned getterOrSetterStartOffset, ConstructorKind = ConstructorKind::None, SuperBinding = SuperBinding::NotNeeded);
template <class TreeBuilder> ALWAYS_INLINE TreeFunctionBody parseFunctionBody(TreeBuilder&, const JSTokenLocation&, int, int functionKeywordStart, int functionNameStart, int parametersStart, ConstructorKind, FunctionBodyType, unsigned, SourceParseMode);
template <class TreeBuilder> ALWAYS_INLINE bool parseFormalParameters(TreeBuilder&, TreeFormalParameterList, unsigned&);
template <class TreeBuilder> typename TreeBuilder::ExportSpecifier parseExportSpecifier(TreeBuilder& context, Vector<const Identifier*>& maybeLocalNames, bool& hasKeywordForLocalBindings);
template <class TreeBuilder> TreeStatement parseExportDeclaration(TreeBuilder&);
- template <class TreeBuilder> NEVER_INLINE bool parseFunctionInfo(TreeBuilder&, FunctionRequirements, SourceParseMode, bool nameIsInContainingScope, ConstructorKind, SuperBinding, int functionKeywordStart, ParserFunctionInfo<TreeBuilder>&, FunctionParseType);
+ enum class FunctionDefinitionType { Expression, Declaration, Method };
+ template <class TreeBuilder> NEVER_INLINE bool parseFunctionInfo(TreeBuilder&, FunctionRequirements, SourceParseMode, bool nameIsInContainingScope, ConstructorKind, SuperBinding, int functionKeywordStart, ParserFunctionInfo<TreeBuilder>&, FunctionDefinitionType);
template <class TreeBuilder> NEVER_INLINE int parseFunctionParameters(TreeBuilder&, SourceParseMode, ParserFunctionInfo<TreeBuilder>&);
m_lexer->setLineNumber(savePoint.oldLineNumber);
}
+ enum class FunctionParsePhase { Parameters, Body };
struct ParserState {
int assignmentCount;
int nonLHSCount;
int nonTrivialExpressionCount;
+ FunctionParsePhase functionParsePhase;
};
ALWAYS_INLINE ParserState saveState()
result.assignmentCount = m_assignmentCount;
result.nonLHSCount = m_nonLHSCount;
result.nonTrivialExpressionCount = m_nonTrivialExpressionCount;
+ result.functionParsePhase = m_functionParsePhase;
return result;
}
-
+
ALWAYS_INLINE void restoreState(const ParserState& state)
{
m_assignmentCount = state.assignmentCount;
m_nonLHSCount = state.nonLHSCount;
m_nonTrivialExpressionCount = state.nonTrivialExpressionCount;
-
+ m_functionParsePhase = state.functionParsePhase;
}
-
VM* m_vm;
const SourceCode* m_source;
bool m_syntaxAlreadyValidated;
int m_statementDepth;
int m_nonTrivialExpressionCount;
+ FunctionParsePhase m_functionParsePhase;
const Identifier* m_lastIdentifier;
const Identifier* m_lastFunctionName;
RefPtr<SourceProviderCache> m_functionCache;
enum class SourceParseMode {
NormalFunctionMode,
+ GeneratorMode,
GetterMode,
SetterMode,
MethodMode,
{
switch (parseMode) {
case SourceParseMode::NormalFunctionMode:
+ case SourceParseMode::GeneratorMode:
case SourceParseMode::GetterMode:
case SourceParseMode::SetterMode:
case SourceParseMode::MethodMode:
return true;
case SourceParseMode::NormalFunctionMode:
+ case SourceParseMode::GeneratorMode:
case SourceParseMode::GetterMode:
case SourceParseMode::SetterMode:
case SourceParseMode::MethodMode:
return true;
case SourceParseMode::NormalFunctionMode:
+ case SourceParseMode::GeneratorMode:
case SourceParseMode::GetterMode:
case SourceParseMode::SetterMode:
case SourceParseMode::MethodMode:
ELSE,
IMPORT,
EXPORT,
+ YIELD,
#if ENABLE(ES6_CLASS_SYNTAX)
CLASSTOKEN,
EXTENDS,
ClauseListResult, CommaExpr, DestructuringAssignment,
TemplateStringResult, TemplateStringListResult,
TemplateExpressionListResult, TemplateExpr,
- TaggedTemplateExpr,
+ TaggedTemplateExpr, YieldExpr,
ModuleNameResult,
ImportSpecifierResult, ImportSpecifierListResult,
ExportSpecifierResult, ExportSpecifierListResult
ExpressionType createAssignResolve(const JSTokenLocation&, const Identifier&, ExpressionType, int, int, int, AssignmentContext) { return AssignmentExpr; }
ExpressionType createEmptyVarExpression(const JSTokenLocation&, const Identifier&) { return AssignmentExpr; }
ExpressionType createEmptyLetExpression(const JSTokenLocation&, const Identifier&) { return AssignmentExpr; }
+ ExpressionType createYield(const JSTokenLocation&) { return YieldExpr; }
+ ExpressionType createYield(const JSTokenLocation&, ExpressionType, bool) { return YieldExpr; }
#if ENABLE(ES6_CLASS_SYNTAX)
ClassExpression createClassExpr(const JSTokenLocation&, const Identifier&, VariableEnvironment&, ExpressionType, ExpressionType, PropertyList, PropertyList) { return ClassExpr; }
#endif
--- /dev/null
+//@ skip
+class Hello {
+ *gen() {
+ yield;
+ }
+
+ static *gen() {
+ yield;
+ }
+
+ *get() {
+ }
+
+ static *get() {
+ }
+
+ *set() {
+ }
+
+ static *set() {
+ }
+
+ *"Hello"() {
+ }
+
+ static *"Hello"() {
+ }
+
+ *20() {
+ }
+
+ static *20() {
+ }
+
+ *[42]() {
+ }
+
+ static *[42]() {
+ }
+}
+
+let object = {
+ *gen() {
+ yield;
+ },
+
+ *get() {
+ },
+
+ *set() {
+ },
+
+ *"Hello"() {
+ },
+
+ *20() {
+ },
+
+ *[42]() {
+ }
+}
--- /dev/null
+//@ skip
+function testSyntax(script) {
+ try {
+ eval(script);
+ } catch (error) {
+ if (error instanceof SyntaxError)
+ throw new Error("Bad error: " + String(error));
+ }
+}
+
+function testSyntaxError(script, message) {
+ var error = null;
+ try {
+ eval(script);
+ } catch (e) {
+ error = e;
+ }
+ if (!error)
+ throw new Error("Expected syntax error not thrown");
+
+ if (String(error) !== message)
+ throw new Error("Bad error: " + String(error));
+}
+
+testSyntaxError(`
+class Hello {
+ get *gen() {
+ }
+}
+`, `SyntaxError: Unexpected token '*'. Expected an opening '(' before a method's parameter list.`);
+
+
+testSyntaxError(`
+class Hello {
+ set *gen(value) {
+ }
+}
+`, `SyntaxError: Unexpected token '*'. Expected an opening '(' before a method's parameter list.`);
+
+testSyntaxError(`
+function ** gen() { }
+`, `SyntaxError: Unexpected token '*'`);
+
+// http://ecma-international.org/ecma-262/6.0/#sec-arrow-function-definitions-static-semantics-early-errors
+testSyntaxError(`
+var value = () => {
+ yield
+}
+`, `SyntaxError: Unexpected keyword 'yield'. Cannot use yield expression out of generator.`);
+
+testSyntaxError(`
+var value = (val = yield) => {
+}
+`, `SyntaxError: Unexpected keyword 'yield'. Cannot use yield expression out of generator.`);
+
+testSyntaxError(`
+function *gen() {
+ function ng(val = yield) {
+ }
+}
+`, `SyntaxError: Unexpected keyword 'yield'. Cannot use yield expression out of generator.`);
+
+testSyntaxError(`
+function *gen() {
+ var ng = (val = yield) => {
+ }
+}
+`, `SyntaxError: Unexpected token '=>'. Expected ';' after variable declaration.`);
+
+// http://ecma-international.org/ecma-262/6.0/#sec-generator-function-definitions-static-semantics-early-errors
+testSyntaxError(`
+function gen(val = yield) {
+}
+`, `SyntaxError: Unexpected keyword 'yield'. Cannot use yield expression out of generator.`);
+
+testSyntaxError(`
+function *gen(val = yield) {
+}
+`, `SyntaxError: Unexpected keyword 'yield'. Cannot use yield expression within parameters.`);
+
+testSyntaxError(`
+function *gen(val = yield 20) {
+}
+`, `SyntaxError: Unexpected keyword 'yield'. Cannot use yield expression within parameters.`);
+
+testSyntaxError(`
+function *gen(val = yield * g) {
+}
+`, `SyntaxError: Unexpected keyword 'yield'. Cannot use yield expression within parameters.`);
+
+
+testSyntax(`
+function *gen(g = function *() { yield }) {
+}
+`);
--- /dev/null
+//@ skip
+function testSyntax(script) {
+ try {
+ eval(script);
+ } catch (error) {
+ if (error instanceof SyntaxError)
+ throw new Error("Bad error: " + String(error));
+ }
+}
+
+function testSyntaxError(script, message) {
+ var error = null;
+ try {
+ eval(script);
+ } catch (e) {
+ error = e;
+ }
+ if (!error)
+ throw new Error("Expected syntax error not thrown");
+
+ if (String(error) !== message)
+ throw new Error("Bad error: " + String(error));
+}
+
+testSyntax(`
+function * gen() {
+ yield
+ 20;
+}
+`);
+
+testSyntaxError(`
+function * gen() {
+ yield
+ *20;
+}
+`, "SyntaxError: Unexpected token '*'");
--- /dev/null
+//@ skip
+
+function testSyntax(script) {
+ try {
+ eval(script);
+ } catch (error) {
+ if (error instanceof SyntaxError)
+ throw new Error("Bad error: " + String(error));
+ }
+}
+
+function testSyntaxError(script, message) {
+ var error = null;
+ try {
+ eval(script);
+ } catch (e) {
+ error = e;
+ }
+ if (!error)
+ throw new Error("Expected syntax error not thrown");
+
+ if (String(error) !== message)
+ throw new Error("Bad error: " + String(error));
+}
+
+testSyntaxError(`
+function *test() {
+ {
+ yield: for (var i = 0; i < 1000; ++i) {
+ break yield;
+ }
+ }
+}
+`, `SyntaxError: Unexpected keyword 'yield'. Expected an identifier as the target for a break statement.`);
+
+testSyntaxError(`
+function *test() {
+ {
+ yield: for (var i = 0; i < 1000; ++i) {
+ continue yield;
+ }
+ }
+}
+`, `SyntaxError: Unexpected keyword 'yield'. Expected an identifier as the target for a continue statement.`)
+
+testSyntax(`
+function *test() {
+ "OK" ? yield : "NG"; // This is not a label.
+}
+`);
--- /dev/null
+// http://ecma-international.org/ecma-262/6.0/#sec-identifiers-static-semantics-early-errors
+// If the "yield" label is used under the sloppy mode and the context is not
+// a generator context, we can use "yield" as a label.
+
+(function () {
+ {
+ yield: for (var i = 0; i < 1000; ++i) {
+ break yield;
+ }
+ }
+ {
+ yield: for (var i = 0; i < 1000; ++i) {
+ continue yield;
+ }
+ }
+}());
+
+
+function testSyntaxError(script, message) {
+ var error = null;
+ try {
+ eval(script);
+ } catch (e) {
+ error = e;
+ }
+ if (!error)
+ throw new Error("Expected syntax error not thrown");
+
+ if (String(error) !== message)
+ throw new Error("Bad error: " + String(error));
+}
+
+testSyntaxError(`
+function test() {
+ "use strict";
+ {
+ yield: for (var i = 0; i < 1000; ++i) {
+ break yield;
+ }
+ }
+}
+`, `SyntaxError: Unexpected keyword 'yield'. Expected an identifier as the target for a break statement.`);
+
+testSyntaxError(`
+function test() {
+ "use strict";
+ {
+ yield: for (var i = 0; i < 1000; ++i) {
+ continue yield;
+ }
+ }
+}
+`, `SyntaxError: Unexpected keyword 'yield'. Expected an identifier as the target for a continue statement.`)
--- /dev/null
+//@ skip
+function *t1() {
+ let object = {
+ get yield() {
+ },
+ set yield(value) {
+ }
+ }
+}
+function *t2() {
+ "use strict";
+ let object = {
+ get yield() {
+ },
+ set yield(value) {
+ }
+ }
+}
--- /dev/null
+function t1() {
+ let object = {
+ get yield() {
+ },
+ set yield(value) {
+ }
+ }
+}
+function t2() {
+ "use strict";
+ let object = {
+ get yield() {
+ },
+ set yield(value) {
+ }
+ }
+}
--- /dev/null
+//@ skip
+function testSyntax(script) {
+ try {
+ eval(script);
+ } catch (error) {
+ if (error instanceof SyntaxError)
+ throw new Error("Bad error: " + String(error));
+ }
+}
+
+function testSyntaxError(script, message) {
+ var error = null;
+ try {
+ eval(script);
+ } catch (e) {
+ error = e;
+ }
+ if (!error)
+ throw new Error("Expected syntax error not thrown");
+
+ if (String(error) !== message)
+ throw new Error("Bad error: " + String(error));
+}
+
+testSyntaxError(`
+function *t1() {
+ var yield = 20;
+}
+`, `SyntaxError: Cannot use the keyword 'yield' as a variable name.`);
+testSyntaxError(`
+function *t1() {
+ let yield = 20;
+}
+`, `SyntaxError: Cannot use the keyword 'yield' as a variable name.`);
+testSyntaxError(`
+function *t1() {
+ const yield = 20;
+}
+`, `SyntaxError: Cannot use the keyword 'yield' as a variable name.`);
+
+testSyntaxError(`
+function *t1() {
+ var { yield } = 20;
+}
+`, `SyntaxError: Cannot use abbreviated destructuring syntax for keyword 'yield'.`);
+testSyntaxError(`
+function *t1() {
+ let { yield } = 20;
+}
+`, `SyntaxError: Cannot use abbreviated destructuring syntax for keyword 'yield'.`);
+testSyntaxError(`
+function *t1() {
+ const { yield } = 20;
+}
+`, `SyntaxError: Cannot use abbreviated destructuring syntax for keyword 'yield'.`);
+
+testSyntaxError(`
+function *t1() {
+ var { i: yield } = 20;
+}
+`, `SyntaxError: Cannot use the keyword 'yield' as a variable name.`);
+testSyntaxError(`
+function *t1() {
+ let { i: yield } = 20;
+}
+`, `SyntaxError: Cannot use the keyword 'yield' as a variable name.`);
+testSyntaxError(`
+function *t1() {
+ const { i: yield } = 20;
+}
+`, `SyntaxError: Cannot use the keyword 'yield' as a variable name.`);
+
+testSyntaxError(`
+function *t1() {
+ var [ yield ] = 20;
+}
+`, `SyntaxError: Cannot use the keyword 'yield' as a variable name.`);
+testSyntaxError(`
+function *t1() {
+ let [ yield ] = 20;
+}
+`, `SyntaxError: Cannot use the keyword 'yield' as a variable name.`);
+testSyntaxError(`
+function *t1() {
+ const [ yield ] = 20;
+}
+`, `SyntaxError: Cannot use the keyword 'yield' as a variable name.`);
+
+testSyntaxError(`
+function *t1() {
+ function yield() { }
+}
+`, `SyntaxError: Cannot use the keyword 'yield' as a function name.`);
+testSyntax(`
+function t1() {
+ function *yield() {
+ }
+}
+`);
+
+testSyntaxError(`
+function *t1() {
+ try {
+ } catch (yield) {
+ }
+}
+`, `SyntaxError: Cannot use the keyword 'yield' as a catch variable name.`);
+
+testSyntax(`
+function *t1() {
+ (function yield() {})
+}
+`);
--- /dev/null
+function testSyntax(script) {
+ try {
+ eval(script);
+ } catch (error) {
+ if (error instanceof SyntaxError)
+ throw new Error("Bad error: " + String(error));
+ }
+}
+
+function testSyntaxError(script, message) {
+ var error = null;
+ try {
+ eval(script);
+ } catch (e) {
+ error = e;
+ }
+ if (!error)
+ throw new Error("Expected syntax error not thrown");
+
+ if (String(error) !== message)
+ throw new Error("Bad error: " + String(error));
+}
+
+testSyntax(`
+function t1() {
+ var yield = 20;
+}
+`);
+testSyntax(`
+function t1() {
+ let yield = 20;
+}
+`);
+testSyntax(`
+function t1() {
+ const yield = 20;
+}
+`);
+
+testSyntaxError(`
+function t1() {
+ "use strict";
+ var yield = 20;
+}
+`, `SyntaxError: Cannot use the keyword 'yield' as a variable name.`);
+testSyntaxError(`
+function t1() {
+ "use strict";
+ let yield = 20;
+}
+`, `SyntaxError: Cannot use the keyword 'yield' as a variable name.`);
+testSyntaxError(`
+function t1() {
+ "use strict";
+ const yield = 20;
+}
+`, `SyntaxError: Cannot use the keyword 'yield' as a variable name.`);
+
+testSyntax(`
+function t1() {
+ var { yield } = 20;
+}
+`);
+testSyntax(`
+function t1() {
+ let { yield } = 20;
+}
+`);
+testSyntax(`
+function t1() {
+ const { yield } = 20;
+}
+`);
+
+testSyntaxError(`
+function t1() {
+ "use strict";
+ var { yield } = 20;
+}
+`, `SyntaxError: Cannot use abbreviated destructuring syntax for keyword 'yield'.`);
+testSyntaxError(`
+function t1() {
+ "use strict";
+ let { yield } = 20;
+}
+`, `SyntaxError: Cannot use abbreviated destructuring syntax for keyword 'yield'.`);
+testSyntaxError(`
+function t1() {
+ "use strict";
+ const { yield } = 20;
+}
+`, `SyntaxError: Cannot use abbreviated destructuring syntax for keyword 'yield'.`);
+
+testSyntax(`
+function t1() {
+ var { i: yield } = 20;
+}
+`);
+testSyntax(`
+function t1() {
+ let { i: yield } = 20;
+}
+`);
+testSyntax(`
+function t1() {
+ const { i: yield } = 20;
+}
+`);
+
+testSyntaxError(`
+function t1() {
+ "use strict";
+ var { i: yield } = 20;
+}
+`, `SyntaxError: Cannot use the keyword 'yield' as a variable name.`);
+testSyntaxError(`
+function t1() {
+ "use strict";
+ let { i: yield } = 20;
+}
+`, `SyntaxError: Cannot use the keyword 'yield' as a variable name.`);
+testSyntaxError(`
+function t1() {
+ "use strict";
+ const { i: yield } = 20;
+}
+`, `SyntaxError: Cannot use the keyword 'yield' as a variable name.`);
+
+testSyntax(`
+function t1() {
+ var [ yield ] = 20;
+}
+`);
+testSyntax(`
+function t1() {
+ let [ yield ] = 20;
+}
+`);
+testSyntax(`
+function t1() {
+ const [ yield ] = 20;
+}
+`);
+
+testSyntaxError(`
+function t1() {
+ "use strict";
+ var [ yield ] = 20;
+}
+`, `SyntaxError: Cannot use the keyword 'yield' as a variable name.`);
+testSyntaxError(`
+function t1() {
+ "use strict";
+ let [ yield ] = 20;
+}
+`, `SyntaxError: Cannot use the keyword 'yield' as a variable name.`);
+testSyntaxError(`
+function t1() {
+ "use strict";
+ const [ yield ] = 20;
+}
+`, `SyntaxError: Cannot use the keyword 'yield' as a variable name.`);
+
+testSyntax(`
+function t1() {
+ function yield() { }
+}
+`);
+testSyntaxError(`
+function t1() {
+ "use strict";
+ function yield() { }
+}
+`, `SyntaxError: Cannot use the keyword 'yield' as a function name.`);
+
+testSyntax(`
+function t1() {
+ try {
+ } catch (yield) {
+ }
+}
+`);
+testSyntaxError(`
+function t1() {
+ "use strict";
+ try {
+ } catch (yield) {
+ }
+}
+`, `SyntaxError: Cannot use the keyword 'yield' as a catch variable name.`);
+
+testSyntax(`
+function t1() {
+ function yield() {
+ "use strict";
+ }
+}
+`);
--- /dev/null
+//@ skip
+function testSyntax(script) {
+ try {
+ eval(script);
+ } catch (error) {
+ if (error instanceof SyntaxError)
+ throw new Error("Bad error: " + String(error));
+ }
+}
+
+function testSyntaxError(script, message) {
+ var error = null;
+ try {
+ eval(script);
+ } catch (e) {
+ error = e;
+ }
+ if (!error)
+ throw new Error("Expected syntax error not thrown");
+
+ if (String(error) !== message)
+ throw new Error("Bad error: " + String(error));
+}
+
+testSyntaxError(`
+yield;
+`, "SyntaxError: Unexpected keyword 'yield'. Cannot use yield expression out of generator.");
+
+testSyntaxError(`
+yield*;
+`, "SyntaxError: Unexpected keyword 'yield'. Cannot use yield expression out of generator.");
+
+testSyntaxError(`
+yield 0;
+`, "SyntaxError: Unexpected keyword 'yield'. Cannot use yield expression out of generator.");
+
+testSyntaxError(`
+yield* 0;
+`, "SyntaxError: Unexpected keyword 'yield'. Cannot use yield expression out of generator.");
+
+testSyntaxError(`
+function hello() {
+ yield;
+}
+`, "SyntaxError: Unexpected keyword 'yield'. Cannot use yield expression out of generator.");
+
+testSyntaxError(`
+function hello() {
+ yield*;
+}
+`, "SyntaxError: Unexpected keyword 'yield'. Cannot use yield expression out of generator.");
+
+testSyntaxError(`
+function hello() {
+ yield 0;
+}
+`, "SyntaxError: Unexpected keyword 'yield'. Cannot use yield expression out of generator.");
+
+testSyntaxError(`
+function hello() {
+ yield* 0;
+}
+`, "SyntaxError: Unexpected keyword 'yield'. Cannot use yield expression out of generator.");
+
+testSyntaxError(`
+function *gen() {
+ function hello() {
+ yield;
+ }
+}
+`, "SyntaxError: Unexpected keyword 'yield'. Cannot use yield expression out of generator.");
+
+testSyntaxError(`
+function *gen() {
+ function hello() {
+ yield*;
+ }
+}
+`, "SyntaxError: Unexpected keyword 'yield'. Cannot use yield expression out of generator.");
+
+testSyntaxError(`
+function *gen() {
+ function hello() {
+ yield 0;
+ }
+}
+`, "SyntaxError: Unexpected keyword 'yield'. Cannot use yield expression out of generator.");
+
+testSyntaxError(`
+function *gen() {
+ function hello() {
+ yield* 0;
+ }
+}
+`, "SyntaxError: Unexpected keyword 'yield'. Cannot use yield expression out of generator.");
+
+testSyntax(`
+function *gen() {
+ yield;
+}
+`);
+
+testSyntaxError(`
+function *gen() {
+ yield*;
+}
+`, "SyntaxError: Unexpected token '*'");
+
+testSyntax(`
+function *gen() {
+ yield 0;
+}
+`);
+
+testSyntax(`
+function *gen() {
+ yield* 0;
+}
+`);
+
+testSyntax(`
+function *gen() {
+ {
+ let i = 30;
+ function ok() {
+ return i;
+ }
+ yield;
+ }
+}
+`);
+
+testSyntaxError(`
+function *gen() {
+ {
+ let i = 30;
+ function ok() {
+ return i;
+ }
+ yield*;
+ }
+}
+`, "SyntaxError: Unexpected token '*'");
+
+testSyntax(`
+function *gen() {
+ {
+ let i = 30;
+ function ok() {
+ return i;
+ }
+ yield 0;
+ }
+}
+`);
+
+testSyntax(`
+function *gen() {
+ {
+ let i = 30;
+ function ok() {
+ return i;
+ }
+ yield* 0;
+ }
+}
+`);
+2015-11-01 Yusuke Suzuki <utatane.tea@gmail.com>
+
+ [ES6] Support Generator Syntax
+ https://bugs.webkit.org/show_bug.cgi?id=150769
+
+ Reviewed by Geoffrey Garen.
+
+ Added ENABLE_ES6_GENERATORS flag.
+
+ * wtf/FeatureDefines.h:
+
2015-11-01 Darin Adler <darin@apple.com>
ASCIICType refinements
#define ENABLE_ES6_CLASS_SYNTAX 1
#endif
+#if !defined(ENABLE_ES6_CLASS_SYNTAX)
+#define ENABLE_ES6_GENERATORS 0
+#endif
+
#if !defined(ENABLE_ES6_MODULES)
#define ENABLE_ES6_MODULES 0
#endif
+2015-11-01 Yusuke Suzuki <utatane.tea@gmail.com>
+
+ [ES6] Support Generator Syntax
+ https://bugs.webkit.org/show_bug.cgi?id=150769
+
+ Reviewed by Geoffrey Garen.
+
+ Added ENABLE_ES6_GENERATORS flag.
+
+ * Configurations/FeatureDefines.xcconfig:
+
2015-11-01 Myles C. Maxfield <mmaxfield@apple.com>
Clean up some CSS & Font code
ENABLE_CHANNEL_MESSAGING = ENABLE_CHANNEL_MESSAGING;
ENABLE_ES6_ARROWFUNCTION_SYNTAX = ENABLE_ES6_ARROWFUNCTION_SYNTAX;
ENABLE_ES6_CLASS_SYNTAX = ENABLE_ES6_CLASS_SYNTAX;
+ENABLE_ES6_GENERATORS = ;
ENABLE_ES6_MODULES = ;
ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX = ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX;
ENABLE_CONTENT_FILTERING = ENABLE_CONTENT_FILTERING;
ENABLE_SHADOW_DOM = ENABLE_SHADOW_DOM;
-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_ES6_ARROWFUNCTION_SYNTAX) $(ENABLE_ES6_CLASS_SYNTAX) $(ENABLE_ES6_MODULES) $(ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GAMEPAD_DEPRECATED) $(ENABLE_GEOLOCATION) $(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING) $(ENABLE_ICONDATABASE) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_HWCONCURRENCY) $(ENABLE_NOTIFICATIONS) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_CURRENTSRC) $(ENABLE_POINTER_LOCK) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REQUEST_AUTOCOMPLETE) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RUBBER_BANDING) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_OTF_CONVERTER) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_DATACUE_VALUE) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_JIT) $(ENABLE_SATURATED_LAYOUT_ARITHMETIC) $(ENABLE_SHADOW_DOM) $(ENABLE_VIDEO_PRESENTATION_MODE);
+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_ES6_ARROWFUNCTION_SYNTAX) $(ENABLE_ES6_CLASS_SYNTAX) $(ENABLE_ES6_GENERATORS) $(ENABLE_ES6_MODULES) $(ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GAMEPAD_DEPRECATED) $(ENABLE_GEOLOCATION) $(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING) $(ENABLE_ICONDATABASE) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_HWCONCURRENCY) $(ENABLE_NOTIFICATIONS) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_CURRENTSRC) $(ENABLE_POINTER_LOCK) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REQUEST_AUTOCOMPLETE) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RUBBER_BANDING) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_OTF_CONVERTER) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_DATACUE_VALUE) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_JIT) $(ENABLE_SATURATED_LAYOUT_ARITHMETIC) $(ENABLE_SHADOW_DOM) $(ENABLE_VIDEO_PRESENTATION_MODE);
+2015-11-01 Yusuke Suzuki <utatane.tea@gmail.com>
+
+ [ES6] Support Generator Syntax
+ https://bugs.webkit.org/show_bug.cgi?id=150769
+
+ Reviewed by Geoffrey Garen.
+
+ Added ENABLE_ES6_GENERATORS flag.
+
+ * Configurations/FeatureDefines.xcconfig:
+
2015-10-30 Dan Bernstein <mitz@apple.com>
Fixed the build.
ENABLE_CHANNEL_MESSAGING = ENABLE_CHANNEL_MESSAGING;
ENABLE_ES6_ARROWFUNCTION_SYNTAX = ENABLE_ES6_ARROWFUNCTION_SYNTAX;
ENABLE_ES6_CLASS_SYNTAX = ENABLE_ES6_CLASS_SYNTAX;
+ENABLE_ES6_GENERATORS = ;
ENABLE_ES6_MODULES = ;
ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX = ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX;
ENABLE_CONTENT_FILTERING = ENABLE_CONTENT_FILTERING;
ENABLE_SHADOW_DOM = ENABLE_SHADOW_DOM;
-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_ES6_ARROWFUNCTION_SYNTAX) $(ENABLE_ES6_CLASS_SYNTAX) $(ENABLE_ES6_MODULES) $(ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GAMEPAD_DEPRECATED) $(ENABLE_GEOLOCATION) $(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING) $(ENABLE_ICONDATABASE) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_HWCONCURRENCY) $(ENABLE_NOTIFICATIONS) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_CURRENTSRC) $(ENABLE_POINTER_LOCK) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REQUEST_AUTOCOMPLETE) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RUBBER_BANDING) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_OTF_CONVERTER) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_DATACUE_VALUE) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_JIT) $(ENABLE_SATURATED_LAYOUT_ARITHMETIC) $(ENABLE_SHADOW_DOM) $(ENABLE_VIDEO_PRESENTATION_MODE);
+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_ES6_ARROWFUNCTION_SYNTAX) $(ENABLE_ES6_CLASS_SYNTAX) $(ENABLE_ES6_GENERATORS) $(ENABLE_ES6_MODULES) $(ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GAMEPAD_DEPRECATED) $(ENABLE_GEOLOCATION) $(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING) $(ENABLE_ICONDATABASE) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_HWCONCURRENCY) $(ENABLE_NOTIFICATIONS) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_CURRENTSRC) $(ENABLE_POINTER_LOCK) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REQUEST_AUTOCOMPLETE) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RUBBER_BANDING) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_OTF_CONVERTER) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_DATACUE_VALUE) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_JIT) $(ENABLE_SATURATED_LAYOUT_ARITHMETIC) $(ENABLE_SHADOW_DOM) $(ENABLE_VIDEO_PRESENTATION_MODE);
+2015-11-01 Yusuke Suzuki <utatane.tea@gmail.com>
+
+ [ES6] Support Generator Syntax
+ https://bugs.webkit.org/show_bug.cgi?id=150769
+
+ Reviewed by Geoffrey Garen.
+
+ Added ENABLE_ES6_GENERATORS flag.
+
+ * Configurations/FeatureDefines.xcconfig:
+
2015-11-01 Brent Fulgham <bfulgham@apple.com>
Use convenience function in sandbox profile
ENABLE_CHANNEL_MESSAGING = ENABLE_CHANNEL_MESSAGING;
ENABLE_ES6_ARROWFUNCTION_SYNTAX = ENABLE_ES6_ARROWFUNCTION_SYNTAX;
ENABLE_ES6_CLASS_SYNTAX = ENABLE_ES6_CLASS_SYNTAX;
+ENABLE_ES6_GENERATORS = ;
ENABLE_ES6_MODULES = ;
ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX = ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX;
ENABLE_CONTENT_FILTERING = ENABLE_CONTENT_FILTERING;
ENABLE_SHADOW_DOM = ENABLE_SHADOW_DOM;
-FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_ES6_ARROWFUNCTION_SYNTAX) $(ENABLE_ES6_CLASS_SYNTAX) $(ENABLE_ES6_MODULES) $(ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GAMEPAD_DEPRECATED) $(ENABLE_GEOLOCATION) $(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING) $(ENABLE_ICONDATABASE) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_HWCONCURRENCY) $(ENABLE_NOTIFICATIONS) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_CURRENTSRC) $(ENABLE_POINTER_LOCK) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REQUEST_AUTOCOMPLETE) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RUBBER_BANDING) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_OTF_CONVERTER) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_DATACUE_VALUE) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_JIT) $(ENABLE_SATURATED_LAYOUT_ARITHMETIC) $(ENABLE_SHADOW_DOM) $(ENABLE_VIDEO_PRESENTATION_MODE);
+FEATURE_DEFINES = $(ENABLE_3D_TRANSFORMS) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ACCELERATED_OVERFLOW_SCROLLING) $(ENABLE_AVF_CAPTIONS) $(ENABLE_ATTACHMENT_ELEMENT) $(ENABLE_CACHE_PARTITIONING) $(ENABLE_CANVAS_PATH) $(ENABLE_CANVAS_PROXY) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_ES6_ARROWFUNCTION_SYNTAX) $(ENABLE_ES6_CLASS_SYNTAX) $(ENABLE_ES6_GENERATORS) $(ENABLE_ES6_MODULES) $(ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX) $(ENABLE_CONTENT_FILTERING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_ANIMATIONS_LEVEL_2) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_GRID_LAYOUT) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SELECTORS_LEVEL4) $(ENABLE_CSS_SHAPES) $(ENABLE_CSS3_TEXT) $(ENABLE_CSS3_TEXT_LINE_BREAK) $(ENABLE_CURSOR_VISIBILITY) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DOM4_EVENTS_CONSTRUCTOR) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_ENCRYPTED_MEDIA_V2) $(ENABLE_FILTERS_LEVEL_2) $(ENABLE_FONT_LOAD_EVENTS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GAMEPAD_DEPRECATED) $(ENABLE_GEOLOCATION) $(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING) $(ENABLE_ICONDATABASE) $(ENABLE_SERVICE_CONTROLS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INDEXED_DATABASE_IN_WORKERS) $(ENABLE_INDIE_UI) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_COLOR_POPOVER) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_WIRELESS_PLAYBACK_TARGET) $(ENABLE_INTL) $(ENABLE_IOS_GESTURE_EVENTS) $(ENABLE_IOS_TEXT_AUTOSIZING) $(ENABLE_IOS_TOUCH_EVENTS) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LETTERPRESS) $(ENABLE_LINK_PREFETCH) $(ENABLE_MAC_GESTURE_EVENTS) $(ENABLE_MATHML) $(ENABLE_MEDIA_CONTROLS_SCRIPT) $(ENABLE_MEDIA_SESSION) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_MEDIA_STREAM) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NAVIGATOR_HWCONCURRENCY) $(ENABLE_NOTIFICATIONS) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_CURRENTSRC) $(ENABLE_POINTER_LOCK) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_PUBLIC_SUFFIX_LIST) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_REQUEST_AUTOCOMPLETE) $(ENABLE_REMOTE_INSPECTOR) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_RUBBER_BANDING) $(ENABLE_CSS_SCROLL_SNAP) $(ENABLE_SPEECH_SYNTHESIS) $(ENABLE_STREAMS_API) $(ENABLE_SUBTLE_CRYPTO) $(ENABLE_SVG_FONTS) $(ENABLE_SVG_OTF_CONVERTER) $(ENABLE_TELEPHONE_NUMBER_DETECTION) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TOUCH_EVENTS) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_CSS_TRAILING_WORD) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_DATACUE_VALUE) $(ENABLE_VIEW_MODE_CSS_MEDIA) $(ENABLE_WEBASSEMBLY) $(ENABLE_WEBGL) $(ENABLE_WEBGL2) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_REPLAY) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_XSLT) $(ENABLE_FTL_JIT) $(ENABLE_JIT) $(ENABLE_SATURATED_LAYOUT_ARITHMETIC) $(ENABLE_SHADOW_DOM) $(ENABLE_VIDEO_PRESENTATION_MODE);
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DIRECTORY_UPLOAD PUBLIC OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DOM4_EVENTS_CONSTRUCTOR PUBLIC ON)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_DRAG_SUPPORT PUBLIC ON)
+WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ES6_GENERATORS PUBLIC OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ES6_MODULES PUBLIC OFF)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX PUBLIC ON)
WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_FILE_SYSTEM PUBLIC OFF)
WEBKIT_OPTION_DEFINE(ENABLE_ENCRYPTED_MEDIA_V2 "Support EME v2" PRIVATE OFF)
WEBKIT_OPTION_DEFINE(ENABLE_ES6_ARROWFUNCTION_SYNTAX "Toggle ES6 arrow function syntax support" PRIVATE ON)
WEBKIT_OPTION_DEFINE(ENABLE_ES6_CLASS_SYNTAX "Toggle ES6 class syntax support" PRIVATE ON)
+ WEBKIT_OPTION_DEFINE(ENABLE_ES6_GENERATORS "Toggle ES6 generators support" PRIVATE OFF)
WEBKIT_OPTION_DEFINE(ENABLE_ES6_MODULES "Toggle ES6 modules support" PRIVATE OFF)
WEBKIT_OPTION_DEFINE(ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX "Toggle ES6 template literal syntax support" PRIVATE ON)
WEBKIT_OPTION_DEFINE(ENABLE_FILTERS_LEVEL_2 "Toggle Filters Module Level 2" PRIVATE OFF)
+2015-11-01 Yusuke Suzuki <utatane.tea@gmail.com>
+
+ [ES6] Support Generator Syntax
+ https://bugs.webkit.org/show_bug.cgi?id=150769
+
+ Reviewed by Geoffrey Garen.
+
+ Added ENABLE_ES6_GENERATORS flag.
+
+ * Scripts/webkitperl/FeatureList.pm:
+
2015-11-01 Alexey Proskuryakov <ap@apple.com>
Sort EWS bots in popovers
$ftpDirSupport,
$fullscreenAPISupport,
$gamepadSupport,
+ $generatorsSupport,
$geolocationSupport,
$hardwareConcurrencySupport,
$highDPICanvasSupport,
{ option => "class-syntax", desc => "Toggle ES6 class syntax support",
define => "ENABLE_ES6_CLASS_SYNTAX", default => 1, value => \$classSyntax },
+ { option => "generators", desc => "Toggle ES6 generators support",
+ define => "ENABLE_ES6_GENERATORS", default => 0, value => \$generatorsSupport },
+
{ option => "modules", desc => "Toggle ES6 modules support",
define => "ENABLE_ES6_MODULES", default => 0, value => \$modulesSupport },
+2015-11-01 Yusuke Suzuki <utatane.tea@gmail.com>
+
+ [ES6] Support Generator Syntax
+ https://bugs.webkit.org/show_bug.cgi?id=150769
+
+ Reviewed by Geoffrey Garen.
+
+ Added ENABLE_ES6_GENERATORS flag.
+
+ * win/tools/vsprops/FeatureDefines.props:
+ * win/tools/vsprops/FeatureDefinesCairo.props:
+
2015-10-26 Dana Burkart <dburkart@apple.com>
`make analyze` should build using the debug configuration
<ENABLE_DIRECTORY_UPLOAD />
<ENABLE_DOM4_EVENTS_CONSTRUCTOR>ENABLE_DOM4_EVENTS_CONSTRUCTOR</ENABLE_DOM4_EVENTS_CONSTRUCTOR>
<ENABLE_ENCRYPTED_MEDIA_V2>ENABLE_ENCRYPTED_MEDIA_V2</ENABLE_ENCRYPTED_MEDIA_V2>
+ <ENABLE_ES6_GENERATORS />
<ENABLE_ES6_MODULES />
<ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX>ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX</ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX>
<ENABLE_FILE_SYSTEM />
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
- <PreprocessorDefinitions>$(ENABLE_CSP_NEXT);$(ENABLE_PROMISES);$(ENABLE_REQUEST_ANIMATION_FRAME);$(ENABLE_3D_TRANSFORMS);$(ENABLE_ACCELERATED_2D_CANVAS);$(ENABLE_ACCELERATED_OVERFLOW_SCROLLING);$(ENABLE_ATTACHMENT_ELEMENT);$(ENABLE_CANVAS_PATH);$(ENABLE_CANVAS_PROXY);$(ENABLE_CHANNEL_MESSAGING);$(ENABLE_CSS3_CONDITIONAL_RULES);$(ENABLE_CSS_IMAGE_SET);$(ENABLE_CSS3_TEXT);$(ENABLE_CSS_BOX_DECORATION_BREAK);$(ENABLE_CSS_GRID_LAYOUT);$(ENABLE_CSS_SHADERS);$(ENABLE_CSS_COMPOSITING);$(ENABLE_CSS_REGIONS);$(ENABLE_CSS_SELECTORS_LEVEL4);$(ENABLE_CSS_SHAPES);$(ENABLE_CSS_SHAPE_INSIDE);$(ENABLE_CSS_TRANSFORMS_ANIMATIONS_TRANSITIONS_UNPREFIXED);$(ENABLE_CURSOR_VISIBILITY);$(ENABLE_CUSTOM_SCHEME_HANDLER);$(ENABLE_DATAGRID);$(ENABLE_DATALIST_ELEMENT);$(ENABLE_DATA_TRANSFER_ITEMS);$(ENABLE_DETAILS_ELEMENT);$(ENABLE_DEVICE_ORIENTATION);$(ENABLE_DIRECTORY_UPLOAD);$(ENABLE_DOM4_EVENTS_CONSTRUCTOR);$(ENABLE_ENCRYPTED_MEDIA_V2);$(ENABLE_ES6_MODULES);$(ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX);$(ENABLE_FILE_SYSTEM);$(ENABLE_FULLSCREEN_API);$(ENABLE_GAMEPAD);$(ENABLE_GEOLOCATION);$(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING);$(ENABLE_HIGH_DPI_CANVAS);$(ENABLE_ICONDATABASE);$(ENABLE_INDEXED_DATABASE);$(ENABLE_INPUT_TYPE_COLOR);$(ENABLE_INPUT_SPEECH);$(ENABLE_INPUT_TYPE_DATE);$(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE);$(ENABLE_INPUT_TYPE_DATETIMELOCAL);$(ENABLE_INPUT_TYPE_MONTH);$(ENABLE_INPUT_TYPE_TIME);$(ENABLE_INPUT_TYPE_WEEK);$(ENABLE_INTL);$(ENABLE_LEGACY_CSS_VENDOR_PREFIXES);$(ENABLE_LEGACY_NOTIFICATIONS);$(ENABLE_LINK_PREFETCH);$(ENABLE_LINK_PRERENDER);$(ENABLE_MATHML);$(ENABLE_METER_ELEMENT);$(ENABLE_MICRODATA);$(ENABLE_MOUSE_CURSOR_SCALE);$(ENABLE_NOTIFICATIONS);$(ENABLE_CURRENTSRC);$(ENABLE_PROXIMITY_EVENTS);$(ENABLE_QUOTA);$(ENABLE_NAVIGATOR_CONTENT_UTILS);$(ENABLE_SCRIPTED_SPEECH);$(ENABLE_SHADOW_DOM);$(ENABLE_SHARED_WORKERS);$(ENABLE_MEDIA_CONTROLS_SCRIPT);$(ENABLE_MEDIA_SOURCE);$(ENABLE_MEDIA_STATISTICS);$(ENABLE_SQL_DATABASE);$(ENABLE_STREAMS_API);$(ENABLE_STYLE_SCOPED);$(ENABLE_SUBPIXEL_LAYOUT);$(ENABLE_SVG_DOM_OBJC_BINDINGS);$(ENABLE_SVG_FONTS);$(ENABLE_SVG_OTF_CONVERTER);$(ENABLE_TEMPLATE_ELEMENT);$(ENABLE_TEXT_AUTOSIZING);$(ENABLE_VIDEO);$(ENABLE_VIDEO_TRACK);$(ENABLE_VIEW_MODE_CSS_MEDIA);$(ENABLE_WEB_AUDIO);$(ENABLE_WEB_SOCKETS);$(ENABLE_WEB_TIMING);$(ENABLE_WEBGL);$(ENABLE_WEBVTT_REGIONS);$(ENABLE_XHR_TIMEOUT);$(ENABLE_XSLT);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>$(ENABLE_CSP_NEXT);$(ENABLE_PROMISES);$(ENABLE_REQUEST_ANIMATION_FRAME);$(ENABLE_3D_TRANSFORMS);$(ENABLE_ACCELERATED_2D_CANVAS);$(ENABLE_ACCELERATED_OVERFLOW_SCROLLING);$(ENABLE_ATTACHMENT_ELEMENT);$(ENABLE_CANVAS_PATH);$(ENABLE_CANVAS_PROXY);$(ENABLE_CHANNEL_MESSAGING);$(ENABLE_CSS3_CONDITIONAL_RULES);$(ENABLE_CSS_IMAGE_SET);$(ENABLE_CSS3_TEXT);$(ENABLE_CSS_BOX_DECORATION_BREAK);$(ENABLE_CSS_GRID_LAYOUT);$(ENABLE_CSS_SHADERS);$(ENABLE_CSS_COMPOSITING);$(ENABLE_CSS_REGIONS);$(ENABLE_CSS_SELECTORS_LEVEL4);$(ENABLE_CSS_SHAPES);$(ENABLE_CSS_SHAPE_INSIDE);$(ENABLE_CSS_TRANSFORMS_ANIMATIONS_TRANSITIONS_UNPREFIXED);$(ENABLE_CURSOR_VISIBILITY);$(ENABLE_CUSTOM_SCHEME_HANDLER);$(ENABLE_DATAGRID);$(ENABLE_DATALIST_ELEMENT);$(ENABLE_DATA_TRANSFER_ITEMS);$(ENABLE_DETAILS_ELEMENT);$(ENABLE_DEVICE_ORIENTATION);$(ENABLE_DIRECTORY_UPLOAD);$(ENABLE_DOM4_EVENTS_CONSTRUCTOR);$(ENABLE_ENCRYPTED_MEDIA_V2);$(ENABLE_ES6_GENERATORS);$(ENABLE_ES6_MODULES);$(ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX);$(ENABLE_FILE_SYSTEM);$(ENABLE_FULLSCREEN_API);$(ENABLE_GAMEPAD);$(ENABLE_GEOLOCATION);$(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING);$(ENABLE_HIGH_DPI_CANVAS);$(ENABLE_ICONDATABASE);$(ENABLE_INDEXED_DATABASE);$(ENABLE_INPUT_TYPE_COLOR);$(ENABLE_INPUT_SPEECH);$(ENABLE_INPUT_TYPE_DATE);$(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE);$(ENABLE_INPUT_TYPE_DATETIMELOCAL);$(ENABLE_INPUT_TYPE_MONTH);$(ENABLE_INPUT_TYPE_TIME);$(ENABLE_INPUT_TYPE_WEEK);$(ENABLE_INTL);$(ENABLE_LEGACY_CSS_VENDOR_PREFIXES);$(ENABLE_LEGACY_NOTIFICATIONS);$(ENABLE_LINK_PREFETCH);$(ENABLE_LINK_PRERENDER);$(ENABLE_MATHML);$(ENABLE_METER_ELEMENT);$(ENABLE_MICRODATA);$(ENABLE_MOUSE_CURSOR_SCALE);$(ENABLE_NOTIFICATIONS);$(ENABLE_CURRENTSRC);$(ENABLE_PROXIMITY_EVENTS);$(ENABLE_QUOTA);$(ENABLE_NAVIGATOR_CONTENT_UTILS);$(ENABLE_SCRIPTED_SPEECH);$(ENABLE_SHADOW_DOM);$(ENABLE_SHARED_WORKERS);$(ENABLE_MEDIA_CONTROLS_SCRIPT);$(ENABLE_MEDIA_SOURCE);$(ENABLE_MEDIA_STATISTICS);$(ENABLE_SQL_DATABASE);$(ENABLE_STREAMS_API);$(ENABLE_STYLE_SCOPED);$(ENABLE_SUBPIXEL_LAYOUT);$(ENABLE_SVG_DOM_OBJC_BINDINGS);$(ENABLE_SVG_FONTS);$(ENABLE_SVG_OTF_CONVERTER);$(ENABLE_TEMPLATE_ELEMENT);$(ENABLE_TEXT_AUTOSIZING);$(ENABLE_VIDEO);$(ENABLE_VIDEO_TRACK);$(ENABLE_VIEW_MODE_CSS_MEDIA);$(ENABLE_WEB_AUDIO);$(ENABLE_WEB_SOCKETS);$(ENABLE_WEB_TIMING);$(ENABLE_WEBGL);$(ENABLE_WEBVTT_REGIONS);$(ENABLE_XHR_TIMEOUT);$(ENABLE_XSLT);%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
<Value>$(ENABLE_ENCRYPTED_MEDIA_V2)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
+ <BuildMacro Include="ENABLE_ES6_GENERATORS">
+ <Value>$(ENABLE_ES6_GENERATORS)</Value>
+ <EnvironmentVariable>true</EnvironmentVariable>
+ </BuildMacro>
<BuildMacro Include="ENABLE_ES6_MODULES">
<Value>$(ENABLE_ES6_MODULES)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
<ENABLE_DIRECTORY_UPLOAD />
<ENABLE_DOM4_EVENTS_CONSTRUCTOR>ENABLE_DOM4_EVENTS_CONSTRUCTOR</ENABLE_DOM4_EVENTS_CONSTRUCTOR>
<ENABLE_ENCRYPTED_MEDIA_V2 />
+ <ENABLE_ES6_GENERATORS />
<ENABLE_ES6_MODULES />
<ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX>ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX</ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX>
<ENABLE_FILE_SYSTEM />
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
- <PreprocessorDefinitions>$(ENABLE_CSP_NEXT);$(ENABLE_PROMISES);$(ENABLE_REQUEST_ANIMATION_FRAME);$(ENABLE_3D_TRANSFORMS);$(ENABLE_ACCELERATED_2D_CANVAS);$(ENABLE_ACCELERATED_OVERFLOW_SCROLLING);$(ENABLE_ATTACHMENT_ELEMENT);$(ENABLE_CANVAS_PATH);$(ENABLE_CANVAS_PROXY);$(ENABLE_CHANNEL_MESSAGING);$(ENABLE_CSS3_CONDITIONAL_RULES);$(ENABLE_CSS_IMAGE_SET);$(ENABLE_CSS3_TEXT);$(ENABLE_CSS_BOX_DECORATION_BREAK);$(ENABLE_CSS_GRID_LAYOUT);$(ENABLE_CSS_SHADERS);$(ENABLE_CSS_COMPOSITING);$(ENABLE_CSS_REGIONS);$(ENABLE_CSS_SELECTORS_LEVEL4);$(ENABLE_CSS_SHAPES);$(ENABLE_CSS_SHAPE_INSIDE);$(ENABLE_CSS_TRANSFORMS_ANIMATIONS_TRANSITIONS_UNPREFIXED);$(ENABLE_CURSOR_VISIBILITY);$(ENABLE_CUSTOM_SCHEME_HANDLER);$(ENABLE_DATAGRID);$(ENABLE_DATALIST_ELEMENT);$(ENABLE_DATA_TRANSFER_ITEMS);$(ENABLE_DETAILS_ELEMENT);$(ENABLE_DEVICE_ORIENTATION);$(ENABLE_DIRECTORY_UPLOAD);$(ENABLE_DOM4_EVENTS_CONSTRUCTOR);$(ENABLE_ENCRYPTED_MEDIA_V2);$(ENABLE_ES6_MODULES);$(ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX);$(ENABLE_FILE_SYSTEM);$(ENABLE_FULLSCREEN_API);$(ENABLE_GAMEPAD);$(ENABLE_GEOLOCATION);$(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING);$(ENABLE_HIGH_DPI_CANVAS);$(ENABLE_ICONDATABASE);$(ENABLE_INDEXED_DATABASE);$(ENABLE_INPUT_TYPE_COLOR);$(ENABLE_INPUT_SPEECH);$(ENABLE_INPUT_TYPE_DATE);$(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE);$(ENABLE_INPUT_TYPE_DATETIMELOCAL);$(ENABLE_INPUT_TYPE_MONTH);$(ENABLE_INPUT_TYPE_TIME);$(ENABLE_INPUT_TYPE_WEEK);$(ENABLE_INTL);$(ENABLE_LEGACY_CSS_VENDOR_PREFIXES);$(ENABLE_LEGACY_NOTIFICATIONS);$(ENABLE_LINK_PREFETCH);$(ENABLE_LINK_PRERENDER);$(ENABLE_MATHML);$(ENABLE_METER_ELEMENT);$(ENABLE_MICRODATA);$(ENABLE_MOUSE_CURSOR_SCALE);$(ENABLE_NOTIFICATIONS);$(ENABLE_CURRENTSRC);$(ENABLE_PROXIMITY_EVENTS);$(ENABLE_QUOTA);$(ENABLE_NAVIGATOR_CONTENT_UTILS);$(ENABLE_SCRIPTED_SPEECH);$(ENABLE_SHADOW_DOM);$(ENABLE_SHARED_WORKERS);$(ENABLE_MEDIA_CONTROLS_SCRIPT);$(ENABLE_MEDIA_SOURCE);$(ENABLE_MEDIA_STATISTICS);$(ENABLE_SQL_DATABASE);$(ENABLE_STYLE_SCOPED);$(ENABLE_SUBPIXEL_LAYOUT);$(ENABLE_SVG_DOM_OBJC_BINDINGS);$(ENABLE_SVG_FONTS);$(ENABLE_SVG_OTF_CONVERTER);$(ENABLE_TEMPLATE_ELEMENT);$(ENABLE_TEXT_AUTOSIZING);$(ENABLE_VIDEO);$(ENABLE_VIDEO_TRACK);$(ENABLE_VIEW_MODE_CSS_MEDIA);$(ENABLE_WEB_AUDIO);$(ENABLE_WEB_SOCKETS);$(ENABLE_WEB_TIMING);$(ENABLE_WEBGL);$(ENABLE_WEBVTT_REGIONS);$(ENABLE_XHR_TIMEOUT);$(ENABLE_XSLT);%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>$(ENABLE_CSP_NEXT);$(ENABLE_PROMISES);$(ENABLE_REQUEST_ANIMATION_FRAME);$(ENABLE_3D_TRANSFORMS);$(ENABLE_ACCELERATED_2D_CANVAS);$(ENABLE_ACCELERATED_OVERFLOW_SCROLLING);$(ENABLE_ATTACHMENT_ELEMENT);$(ENABLE_CANVAS_PATH);$(ENABLE_CANVAS_PROXY);$(ENABLE_CHANNEL_MESSAGING);$(ENABLE_CSS3_CONDITIONAL_RULES);$(ENABLE_CSS_IMAGE_SET);$(ENABLE_CSS3_TEXT);$(ENABLE_CSS_BOX_DECORATION_BREAK);$(ENABLE_CSS_GRID_LAYOUT);$(ENABLE_CSS_SHADERS);$(ENABLE_CSS_COMPOSITING);$(ENABLE_CSS_REGIONS);$(ENABLE_CSS_SELECTORS_LEVEL4);$(ENABLE_CSS_SHAPES);$(ENABLE_CSS_SHAPE_INSIDE);$(ENABLE_CSS_TRANSFORMS_ANIMATIONS_TRANSITIONS_UNPREFIXED);$(ENABLE_CURSOR_VISIBILITY);$(ENABLE_CUSTOM_SCHEME_HANDLER);$(ENABLE_DATAGRID);$(ENABLE_DATALIST_ELEMENT);$(ENABLE_DATA_TRANSFER_ITEMS);$(ENABLE_DETAILS_ELEMENT);$(ENABLE_DEVICE_ORIENTATION);$(ENABLE_DIRECTORY_UPLOAD);$(ENABLE_DOM4_EVENTS_CONSTRUCTOR);$(ENABLE_ENCRYPTED_MEDIA_V2);$(ENABLE_ES6_GENERATORS);$(ENABLE_ES6_MODULES);$(ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX);$(ENABLE_FILE_SYSTEM);$(ENABLE_FULLSCREEN_API);$(ENABLE_GAMEPAD);$(ENABLE_GEOLOCATION);$(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING);$(ENABLE_HIGH_DPI_CANVAS);$(ENABLE_ICONDATABASE);$(ENABLE_INDEXED_DATABASE);$(ENABLE_INPUT_TYPE_COLOR);$(ENABLE_INPUT_SPEECH);$(ENABLE_INPUT_TYPE_DATE);$(ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE);$(ENABLE_INPUT_TYPE_DATETIMELOCAL);$(ENABLE_INPUT_TYPE_MONTH);$(ENABLE_INPUT_TYPE_TIME);$(ENABLE_INPUT_TYPE_WEEK);$(ENABLE_INTL);$(ENABLE_LEGACY_CSS_VENDOR_PREFIXES);$(ENABLE_LEGACY_NOTIFICATIONS);$(ENABLE_LINK_PREFETCH);$(ENABLE_LINK_PRERENDER);$(ENABLE_MATHML);$(ENABLE_METER_ELEMENT);$(ENABLE_MICRODATA);$(ENABLE_MOUSE_CURSOR_SCALE);$(ENABLE_NOTIFICATIONS);$(ENABLE_CURRENTSRC);$(ENABLE_PROXIMITY_EVENTS);$(ENABLE_QUOTA);$(ENABLE_NAVIGATOR_CONTENT_UTILS);$(ENABLE_SCRIPTED_SPEECH);$(ENABLE_SHADOW_DOM);$(ENABLE_SHARED_WORKERS);$(ENABLE_MEDIA_CONTROLS_SCRIPT);$(ENABLE_MEDIA_SOURCE);$(ENABLE_MEDIA_STATISTICS);$(ENABLE_SQL_DATABASE);$(ENABLE_STYLE_SCOPED);$(ENABLE_SUBPIXEL_LAYOUT);$(ENABLE_SVG_DOM_OBJC_BINDINGS);$(ENABLE_SVG_FONTS);$(ENABLE_SVG_OTF_CONVERTER);$(ENABLE_TEMPLATE_ELEMENT);$(ENABLE_TEXT_AUTOSIZING);$(ENABLE_VIDEO);$(ENABLE_VIDEO_TRACK);$(ENABLE_VIEW_MODE_CSS_MEDIA);$(ENABLE_WEB_AUDIO);$(ENABLE_WEB_SOCKETS);$(ENABLE_WEB_TIMING);$(ENABLE_WEBGL);$(ENABLE_WEBVTT_REGIONS);$(ENABLE_XHR_TIMEOUT);$(ENABLE_XSLT);%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
<Value>$(ENABLE_ENCRYPTED_MEDIA_V2)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
+ <BuildMacro Include="ENABLE_ES6_GENERATORS">
+ <Value>$(ENABLE_ES6_GENERATORS)</Value>
+ <EnvironmentVariable>true</EnvironmentVariable>
+ </BuildMacro>
<BuildMacro Include="ENABLE_ES6_MODULES">
<Value>$(ENABLE_ES6_MODULES)</Value>
<EnvironmentVariable>true</EnvironmentVariable>