diff options
Diffstat (limited to 'deps/v8/src/parser.cc')
-rw-r--r-- | deps/v8/src/parser.cc | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/deps/v8/src/parser.cc b/deps/v8/src/parser.cc index b4ab623829..b63911bc97 100644 --- a/deps/v8/src/parser.cc +++ b/deps/v8/src/parser.cc @@ -1872,9 +1872,10 @@ Statement* Parser::ParseNativeDeclaration(bool* ok) { const int literals = fun->NumberOfLiterals(); Handle<Code> code = Handle<Code>(fun->shared()->code()); Handle<Code> construct_stub = Handle<Code>(fun->shared()->construct_stub()); + bool is_generator = false; Handle<SharedFunctionInfo> shared = - isolate()->factory()->NewSharedFunctionInfo(name, literals, code, - Handle<ScopeInfo>(fun->shared()->scope_info())); + isolate()->factory()->NewSharedFunctionInfo(name, literals, is_generator, + code, Handle<ScopeInfo>(fun->shared()->scope_info())); shared->set_construct_stub(*construct_stub); // Copy the function data to the shared function info. @@ -3286,6 +3287,16 @@ Expression* Parser::ParseUnaryExpression(bool* ok) { } } + // Desugar '+foo' into 'foo*1', this enables the collection of type feedback + // without any special stub and the multiplication is removed later in + // Crankshaft's canonicalization pass. + if (op == Token::ADD) { + return factory()->NewBinaryOperation(Token::MUL, + expression, + factory()->NewNumberLiteral(1), + position); + } + return factory()->NewUnaryOperation(op, expression, position); } else if (Token::IsCountOp(op)) { |