28 #ifndef V8_PREPARSER_H
29 #define V8_PREPARSER_H
81 template <
typename Traits>
91 typename Traits::Type::Zone*
zone,
92 typename Traits::Type::Parser this_object)
93 : Traits(this_object),
102 stack_limit_(stack_limit),
103 stack_overflow_(
false),
105 allow_natives_syntax_(
false),
106 allow_generators_(
false),
107 allow_for_of_(
false),
155 typename Traits::Type::Scope* scope)
156 : scope_stack_(scope_stack),
157 outer_scope_(*scope_stack),
164 typename Traits::Type::Scope** scope_stack_;
165 typename Traits::Type::Scope* outer_scope_;
166 typename Traits::Type::Scope*
scope_;
172 FunctionState** function_state_stack,
173 typename Traits::Type::Scope** scope_stack,
174 typename Traits::Type::Scope* scope,
175 typename Traits::Type::Zone*
zone =
NULL);
179 return next_materialized_literal_index_++;
195 typename Traits::Type::GeneratorVariable* variable) {
198 generator_object_variable_ = variable;
199 is_generator_ =
true;
203 return generator_object_variable_;
206 typename Traits::Type::Factory*
factory() {
return &factory_; }
212 int next_materialized_literal_index_;
215 int next_handler_index_;
218 int expected_property_count_;
225 Variable* generator_object_variable_;
227 FunctionState** function_state_stack_;
228 FunctionState* outer_function_state_;
229 typename Traits::Type::Scope** scope_stack_;
230 typename Traits::Type::Scope* outer_scope_;
232 int saved_ast_node_id_;
233 typename Traits::Type::Factory factory_;
242 old_mode_(parser->mode()) {
243 parser_->mode_ =
mode;
246 parser_->mode_ = old_mode_;
260 typename Traits::Type::Zone*
zone()
const {
return zone_; }
263 if (stack_overflow_)
return Token::ILLEGAL;
268 if (stack_overflow_)
return Token::ILLEGAL;
271 if (reinterpret_cast<uintptr_t>(&marker) < stack_limit_) {
275 stack_overflow_ =
true;
309 if (tok == Token::SEMICOLON) {
313 if (
scanner()->HasAnyLineTerminatorBeforeNext() ||
314 tok == Token::RBRACE ||
318 Expect(Token::SEMICOLON, ok);
323 return next == Token::IDENTIFIER ||
324 next == Token::FUTURE_RESERVED_WORD ||
325 next == Token::FUTURE_STRICT_RESERVED_WORD ||
330 if (peek() == Token::IDENTIFIER &&
331 scanner()->is_next_contextual_keyword(keyword)) {
339 Expect(Token::IDENTIFIER, ok);
341 if (!
scanner()->is_literal_contextual_keyword(keyword)) {
375 bool is_reference_error =
false) {
377 Traits::ReportMessageAt(source_location, message, args, is_reference_error);
381 bool is_reference_error =
false) {
401 bool* is_strict_reserved,
454 finder_(scanner()->unicode_cache()),
455 strict_mode_(strict_mode) { }
460 ParserBase* parser()
const {
return parser_; }
465 return (type1 & type2) != 0;
478 DuplicateFinder finder_;
497 uintptr_t stack_limit_;
498 bool stack_overflow_;
501 bool allow_natives_syntax_;
502 bool allow_generators_;
505 typename Traits::Type::Zone* zone_;
530 bool IsEval() {
return type_ == kEvalIdentifier; }
533 bool IsYield() {
return type_ == kYieldIdentifier; }
536 return type_ == kFutureStrictReservedIdentifier;
543 kFutureReservedIdentifier,
544 kFutureStrictReservedIdentifier,
569 (
id.type_ << kIdentifierShift));
597 static_cast<PreParserIdentifier::Type>(code_ >> kIdentifierShift));
603 return (code_ & kStringLiteralMask) == kUseStrictString;
606 bool IsThis() {
return code_ == kThisExpression; }
611 return code_ == kPropertyExpression || code_ == kThisPropertyExpression;
640 kUnknownExpression = 0,
643 kIdentifierShift = 3,
645 kStringLiteralFlag = 2,
646 kUnknownStringLiteral = kStringLiteralFlag,
647 kUseStrictString = kStringLiteralFlag | 8,
648 kStringLiteralMask = kUseStrictString,
652 kThisExpression = 1 << 2,
653 kThisPropertyExpression = 2 << 2,
654 kPropertyExpression = 3 << 2
657 explicit PreParserExpression(
int expression_code) : code_(expression_code) {}
680 : scope_type_(scope_type) {
727 int boilerplate_properties,
766 Yield::Kind yield_kind,
829 template<
typename FunctionState>
831 template<
typename FunctionState>
908 bool is_reference_error =
false);
911 const char* name_opt,
912 bool is_reference_error =
false);
916 const char* name_opt,
917 bool is_reference_error =
false);
980 bool name_is_strict_reserved,
982 int function_token_position,
983 FunctionLiteral::FunctionType type,
1026 ParseSourceElements(Token::EOS, &ok);
1056 enum VariableDeclarationContext {
1063 enum VariableDeclarationProperties {
1070 static Statement Default() {
1071 return Statement(kUnknownStatement);
1074 static Statement FunctionDeclaration() {
1075 return Statement(kFunctionDeclaration);
1081 static Statement ExpressionStatement(
Expression expression) {
1082 if (expression.IsUseStrictLiteral()) {
1083 return Statement(kUseStrictExpressionStatement);
1085 if (expression.IsStringLiteral()) {
1086 return Statement(kStringLiteralExpressionStatement);
1091 bool IsStringLiteral() {
1092 return code_ == kStringLiteralExpressionStatement;
1095 bool IsUseStrictLiteral() {
1096 return code_ == kUseStrictExpressionStatement;
1099 bool IsFunctionDeclaration() {
1100 return code_ == kFunctionDeclaration;
1106 kStringLiteralExpressionStatement,
1107 kUseStrictExpressionStatement,
1108 kFunctionDeclaration
1111 explicit Statement(
Type code) : code_(code) {}
1115 enum SourceElements {
1116 kUnknownSourceElements
1123 Statement ParseSourceElement(
bool* ok);
1124 SourceElements ParseSourceElements(
int end_token,
bool* ok);
1125 Statement ParseStatement(
bool* ok);
1126 Statement ParseFunctionDeclaration(
bool* ok);
1127 Statement ParseBlock(
bool* ok);
1128 Statement ParseVariableStatement(VariableDeclarationContext var_context,
1130 Statement ParseVariableDeclarations(VariableDeclarationContext var_context,
1131 VariableDeclarationProperties* decl_props,
1134 Statement ParseExpressionOrLabelledStatement(
bool* ok);
1135 Statement ParseIfStatement(
bool* ok);
1136 Statement ParseContinueStatement(
bool* ok);
1137 Statement ParseBreakStatement(
bool* ok);
1138 Statement ParseReturnStatement(
bool* ok);
1139 Statement ParseWithStatement(
bool* ok);
1140 Statement ParseSwitchStatement(
bool* ok);
1141 Statement ParseDoWhileStatement(
bool* ok);
1142 Statement ParseWhileStatement(
bool* ok);
1143 Statement ParseForStatement(
bool* ok);
1144 Statement ParseThrowStatement(
bool* ok);
1145 Statement ParseTryStatement(
bool* ok);
1146 Statement ParseDebuggerStatement(
bool* ok);
1147 Expression ParseConditionalExpression(
bool accept_IN,
bool* ok);
1153 Scanner::Location function_name_location,
1154 bool name_is_strict_reserved,
1156 int function_token_pos,
1157 FunctionLiteral::FunctionType function_type,
1159 void ParseLazyFunctionLiteralBody(
bool* ok);
1166 bool CheckInOrOf(
bool accept_OF);
1169 template<
class Traits>
1170 ParserBase<Traits>::FunctionState::FunctionState(
1171 FunctionState** function_state_stack,
1172 typename Traits::Type::Scope** scope_stack,
1173 typename Traits::Type::Scope* scope,
1174 typename Traits::Type::Zone* extra_param)
1175 : next_materialized_literal_index_(JSFunction::kLiteralsPrefixSize),
1176 next_handler_index_(0),
1177 expected_property_count_(0),
1178 is_generator_(
false),
1179 generator_object_variable_(
NULL),
1180 function_state_stack_(function_state_stack),
1181 outer_function_state_(*function_state_stack),
1182 scope_stack_(scope_stack),
1183 outer_scope_(*scope_stack),
1185 saved_ast_node_id_(0),
1186 factory_(extra_param) {
1187 *scope_stack_ = scope;
1188 *function_state_stack =
this;
1189 Traits::SetUpFunctionState(
this, extra_param);
1193 template<
class Traits>
1194 ParserBase<Traits>::FunctionState::~FunctionState() {
1195 *scope_stack_ = outer_scope_;
1196 *function_state_stack_ = outer_function_state_;
1197 Traits::TearDownFunctionState(
this);
1201 template<
class Traits>
1208 return ReportMessageAt(source_location,
"unexpected_eos");
1210 return ReportMessageAt(source_location,
"unexpected_token_number");
1212 return ReportMessageAt(source_location,
"unexpected_token_string");
1213 case Token::IDENTIFIER:
1214 return ReportMessageAt(source_location,
"unexpected_token_identifier");
1215 case Token::FUTURE_RESERVED_WORD:
1216 return ReportMessageAt(source_location,
"unexpected_reserved");
1218 case Token::FUTURE_STRICT_RESERVED_WORD:
1219 return ReportMessageAt(source_location, strict_mode() ==
SLOPPY
1220 ?
"unexpected_token_identifier" :
"unexpected_strict_reserved");
1224 Traits::ReportMessageAt(
1230 template<
class Traits>
1235 if (next == Token::IDENTIFIER) {
1237 if (allow_eval_or_arguments == kDontAllowEvalOrArguments &&
1238 strict_mode() ==
STRICT && this->IsEvalOrArguments(name)) {
1239 ReportMessageAt(scanner()->location(),
"strict_eval_arguments");
1243 }
else if (strict_mode() ==
SLOPPY &&
1244 (next == Token::FUTURE_STRICT_RESERVED_WORD ||
1246 return this->GetSymbol(scanner());
1248 this->ReportUnexpectedToken(next);
1250 return Traits::EmptyIdentifier();
1255 template <
class Traits>
1257 Traits>::ParseIdentifierOrStrictReservedWord(
bool* is_strict_reserved,
1260 if (next == Token::IDENTIFIER) {
1261 *is_strict_reserved =
false;
1262 }
else if (next == Token::FUTURE_STRICT_RESERVED_WORD ||
1264 *is_strict_reserved =
true;
1266 ReportUnexpectedToken(next);
1268 return Traits::EmptyIdentifier();
1270 return this->GetSymbol(scanner());
1274 template <
class Traits>
1278 if (next != Token::IDENTIFIER && next != Token::FUTURE_RESERVED_WORD &&
1280 this->ReportUnexpectedToken(next);
1282 return Traits::EmptyIdentifier();
1284 return this->GetSymbol(scanner());
1288 template <
class Traits>
1294 if (!*ok)
return Traits::EmptyIdentifier();
1295 scanner()->IsGetOrSet(is_get, is_set);
1300 template <
class Traits>
1302 bool seen_equal,
bool* ok) {
1303 int pos = peek_position();
1304 if (!scanner()->ScanRegExpPattern(seen_equal)) {
1308 return Traits::EmptyExpression();
1311 int literal_index = function_state_->NextMaterializedLiteralIndex();
1314 if (!scanner()->ScanRegExpFlags()) {
1316 ReportMessageAt(scanner()->location(),
"invalid_regexp_flags");
1318 return Traits::EmptyExpression();
1322 return factory()->NewRegExpLiteral(js_pattern, js_flags, literal_index, pos);
1326 #define CHECK_OK ok); \
1327 if (!*ok) return this->EmptyExpression(); \
1329 #define DUMMY ) // to make indentation work
1333 #define CHECK_OK_CUSTOM(x) ok); \
1334 if (!*ok) return this->x(); \
1336 #define DUMMY ) // to make indentation work
1339 template <
class Traits>
1340 typename ParserBase<Traits>::ExpressionT
1355 int pos = peek_position();
1360 Consume(Token::THIS);
1361 result = this->ThisExpression(scope_, factory());
1365 case Token::NULL_LITERAL:
1366 case Token::TRUE_LITERAL:
1367 case Token::FALSE_LITERAL:
1370 result = this->ExpressionFromLiteral(token, pos, scanner(), factory());
1373 case Token::IDENTIFIER:
1375 case Token::FUTURE_STRICT_RESERVED_WORD: {
1378 result = this->ExpressionFromIdentifier(name, pos, scope_, factory());
1384 result = this->ExpressionFromString(pos, scanner(), factory());
1388 case Token::ASSIGN_DIV:
1389 result = this->ParseRegExpLiteral(
true,
CHECK_OK);
1393 result = this->ParseRegExpLiteral(
false,
CHECK_OK);
1397 result = this->ParseArrayLiteral(
CHECK_OK);
1401 result = this->ParseObjectLiteral(
CHECK_OK);
1405 Consume(Token::LPAREN);
1408 parenthesized_function_ = (peek() == Token::FUNCTION);
1409 result = this->ParseExpression(
true,
CHECK_OK);
1414 if (allow_natives_syntax() || extension_ !=
NULL) {
1415 result = this->ParseV8Intrinsic(
CHECK_OK);
1423 ReportUnexpectedToken(token);
1432 template <
class Traits>
1434 bool accept_IN,
bool* ok) {
1442 int pos = position();
1444 result = factory()->NewBinaryOperation(
Token::COMMA, result, right, pos);
1450 template <
class Traits>
1456 int pos = peek_position();
1457 typename Traits::Type::ExpressionList values =
1458 this->NewExpressionList(4, zone_);
1460 while (peek() != Token::RBRACK) {
1463 elem = this->GetLiteralTheHole(peek_position(), factory());
1465 elem = this->ParseAssignmentExpression(
true,
CHECK_OK);
1467 values->Add(elem, zone_);
1468 if (peek() != Token::RBRACK) {
1475 int literal_index = function_state_->NextMaterializedLiteralIndex();
1477 return factory()->NewArrayLiteral(values, literal_index, pos);
1481 template <
class Traits>
1491 int pos = peek_position();
1492 typename Traits::Type::PropertyList properties =
1493 this->NewPropertyList(4, zone_);
1494 int number_of_boilerplate_properties = 0;
1495 bool has_function =
false;
1501 while (peek() != Token::RBRACE) {
1502 if (fni_ !=
NULL) fni_->Enter();
1504 typename Traits::Type::Literal key = this->EmptyLiteral();
1506 int next_pos = peek_position();
1509 case Token::FUTURE_RESERVED_WORD:
1510 case Token::FUTURE_STRICT_RESERVED_WORD:
1511 case Token::IDENTIFIER: {
1512 bool is_getter =
false;
1513 bool is_setter =
false;
1515 ParseIdentifierNameOrGetOrSet(&is_getter, &is_setter,
CHECK_OK);
1516 if (fni_ !=
NULL) this->PushLiteralName(fni_,
id);
1518 if ((is_getter || is_setter) && peek() != Token::COLON) {
1523 if (next != i::Token::IDENTIFIER &&
1524 next != i::Token::FUTURE_RESERVED_WORD &&
1525 next != i::Token::FUTURE_STRICT_RESERVED_WORD &&
1526 next != i::Token::NUMBER &&
1529 ReportUnexpectedToken(next);
1531 return this->EmptyLiteral();
1534 PropertyKind type = is_getter ? kGetterProperty : kSetterProperty;
1537 typename Traits::Type::FunctionLiteral value =
1538 this->ParseFunctionLiteral(
1539 name, scanner()->location(),
1542 RelocInfo::kNoPosition, FunctionLiteral::ANONYMOUS_EXPRESSION,
1546 typename Traits::Type::ObjectLiteralProperty
property =
1547 factory()->NewObjectLiteralProperty(is_getter, value, next_pos);
1548 if (this->IsBoilerplateProperty(property)) {
1549 number_of_boilerplate_properties++;
1551 properties->Add(property, zone());
1552 if (peek() != Token::RBRACE) {
1565 key = factory()->NewLiteral(
id, next_pos);
1571 if (fni_ !=
NULL) this->PushLiteralName(fni_,
string);
1573 if (this->IsArrayIndex(
string, &index)) {
1574 key = factory()->NewNumberLiteral(index, next_pos);
1577 key = factory()->NewLiteral(
string, next_pos);
1580 case Token::NUMBER: {
1581 Consume(Token::NUMBER);
1582 key = this->ExpressionFromLiteral(Token::NUMBER, next_pos, scanner_,
1590 key = factory()->NewLiteral(
string, next_pos);
1593 ReportUnexpectedToken(next);
1595 return this->EmptyLiteral();
1605 typename Traits::Type::ObjectLiteralProperty
property =
1606 factory()->NewObjectLiteralProperty(key, value);
1611 this->CheckFunctionLiteralInsideTopLevelObjectLiteral(scope_, value,
1615 if (this->IsBoilerplateProperty(property)) {
1616 number_of_boilerplate_properties++;
1618 properties->Add(property, zone());
1621 if (peek() != Token::RBRACE) {
1634 int literal_index = function_state_->NextMaterializedLiteralIndex();
1636 return factory()->NewObjectLiteral(properties,
1638 number_of_boilerplate_properties,
1644 template <
class Traits>
1650 typename Traits::Type::ExpressionList result =
1651 this->NewExpressionList(4, zone_);
1653 bool done = (peek() == Token::RPAREN);
1655 ExpressionT argument = this->ParseAssignmentExpression(
1657 result->Add(argument, zone_);
1659 ReportMessageAt(scanner()->location(),
"too_many_arguments");
1661 return this->NullExpressionList();
1663 done = (peek() == Token::RPAREN);
1674 template <
class Traits>
1685 return this->ParseYieldExpression(ok);
1688 if (fni_ !=
NULL) fni_->Enter();
1690 this->ParseConditionalExpression(accept_IN,
CHECK_OK);
1693 if (fni_ !=
NULL) fni_->Leave();
1698 if (!expression->IsValidLeftHandSide()) {
1699 this->ReportMessageAt(lhs_location,
"invalid_lhs_in_assignment",
true);
1701 return this->EmptyExpression();
1704 if (strict_mode() ==
STRICT) {
1706 this->CheckStrictModeLValue(expression,
CHECK_OK);
1708 expression = this->MarkExpressionAsLValue(expression);
1711 int pos = position();
1719 if (op == Token::ASSIGN && this->IsThisProperty(expression)) {
1720 function_state_->AddProperty();
1723 this->CheckAssigningFunctionLiteralToProperty(expression, right);
1729 if ((op == Token::INIT_VAR
1730 || op == Token::INIT_CONST_LEGACY
1731 || op == Token::ASSIGN)
1732 && (!right->IsCall() && !right->IsCallNew())) {
1735 fni_->RemoveLastFunction();
1740 return factory()->NewAssignment(op, expression, right, pos);
1743 template <
class Traits>
1748 int pos = peek_position();
1751 Check(
Token::MUL) ? Yield::DELEGATING : Yield::SUSPEND;
1753 factory()->NewVariableProxy(function_state_->generator_object_variable());
1755 ParseAssignmentExpression(
false,
CHECK_OK);
1756 typename Traits::Type::YieldExpression yield =
1757 factory()->NewYield(generator_object, expression, kind, pos);
1758 if (kind == Yield::DELEGATING) {
1759 yield->set_index(function_state_->NextHandlerIndex());
1766 template <
class Traits>
1773 int pos = peek_position();
1776 if (peek() != Token::CONDITIONAL)
return expression;
1777 Consume(Token::CONDITIONAL);
1784 return factory()->NewConditional(expression, left, right, pos);
1789 template <
class Traits>
1794 for (
int prec1 = Precedence(peek(), accept_IN); prec1 >= prec; prec1--) {
1796 while (Precedence(peek(), accept_IN) == prec1) {
1798 int pos = position();
1801 if (this->ShortcutNumericLiteralBinaryExpression(&x, y, op, pos,
1814 case Token::NE_STRICT: cmp = Token::EQ_STRICT;
break;
1817 x = factory()->NewCompareOperation(cmp, x, y, pos);
1820 x = factory()->NewUnaryOperation(
Token::NOT, x, pos);
1825 x = factory()->NewBinaryOperation(op, x, y, pos);
1833 template <
class Traits>
1851 int pos = position();
1855 if (op == Token::DELETE && strict_mode() ==
STRICT &&
1856 this->IsIdentifier(expression)) {
1859 return this->EmptyExpression();
1863 return this->BuildUnaryExpression(expression, op, pos, factory());
1868 if (!expression->IsValidLeftHandSide()) {
1869 ReportMessageAt(lhs_location,
"invalid_lhs_in_prefix_op",
true);
1871 return this->EmptyExpression();
1874 if (strict_mode() ==
STRICT) {
1876 this->CheckStrictModeLValue(expression,
CHECK_OK);
1878 this->MarkExpressionAsLValue(expression);
1880 return factory()->NewCountOperation(op,
1886 return this->ParsePostfixExpression(ok);
1891 template <
class Traits>
1899 if (!scanner()->HasAnyLineTerminatorBeforeNext() &&
1901 if (!expression->IsValidLeftHandSide()) {
1902 ReportMessageAt(lhs_location,
"invalid_lhs_in_postfix_op",
true);
1904 return this->EmptyExpression();
1907 if (strict_mode() ==
STRICT) {
1909 this->CheckStrictModeLValue(expression,
CHECK_OK);
1911 expression = this->MarkExpressionAsLValue(expression);
1915 factory()->NewCountOperation(next,
1924 template <
class Traits>
1934 case Token::LBRACK: {
1935 Consume(Token::LBRACK);
1936 int pos = position();
1938 result = factory()->NewProperty(result, index, pos);
1943 case Token::LPAREN: {
1945 if (scanner()->current_token() == Token::IDENTIFIER) {
1955 pos = peek_position();
1959 if (result->IsFunctionLiteral() &&
mode() == PARSE_EAGERLY) {
1960 result->AsFunctionLiteral()->set_parenthesized();
1963 typename Traits::Type::ExpressionList args = ParseArguments(
CHECK_OK);
1972 this->CheckPossibleEvalCall(result, scope_);
1973 result = factory()->NewCall(result, args, pos);
1974 if (fni_ !=
NULL) fni_->RemoveLastFunction();
1978 case Token::PERIOD: {
1979 Consume(Token::PERIOD);
1980 int pos = position();
1982 result = factory()->NewProperty(
1983 result, factory()->NewLiteral(name, pos), pos);
1984 if (fni_ !=
NULL) this->PushLiteralName(fni_, name);
1995 template <
class Traits>
2015 if (peek() == Token::NEW) {
2016 Consume(Token::NEW);
2017 int new_pos = position();
2019 if (peek() == Token::LPAREN) {
2021 typename Traits::Type::ExpressionList args =
2023 result = factory()->NewCallNew(result, args, new_pos);
2025 result = this->ParseMemberExpressionContinuation(result,
CHECK_OK);
2029 return factory()->NewCallNew(result, this->NewExpressionList(0, zone_),
2033 return this->ParseMemberExpression(ok);
2037 template <
class Traits>
2050 if (peek() == Token::FUNCTION) {
2051 Consume(Token::FUNCTION);
2052 int function_token_position = position();
2053 bool is_generator = allow_generators() && Check(
Token::MUL);
2055 bool is_strict_reserved_name =
false;
2057 FunctionLiteral::FunctionType function_type =
2058 FunctionLiteral::ANONYMOUS_EXPRESSION;
2059 if (peek_any_identifier()) {
2060 name = ParseIdentifierOrStrictReservedWord(&is_strict_reserved_name,
2062 function_name_location = scanner()->location();
2063 function_type = FunctionLiteral::NAMED_EXPRESSION;
2065 result = this->ParseFunctionLiteral(name,
2066 function_name_location,
2067 is_strict_reserved_name,
2069 function_token_position,
2073 result = ParsePrimaryExpression(
CHECK_OK);
2076 result = ParseMemberExpressionContinuation(result,
CHECK_OK);
2081 template <
class Traits>
2089 case Token::LBRACK: {
2090 Consume(Token::LBRACK);
2091 int pos = position();
2093 expression = factory()->NewProperty(expression, index, pos);
2095 this->PushPropertyName(fni_, index);
2100 case Token::PERIOD: {
2101 Consume(Token::PERIOD);
2102 int pos = position();
2104 expression = factory()->NewProperty(
2105 expression, factory()->NewLiteral(name, pos), pos);
2107 this->PushLiteralName(fni_, name);
2116 return this->EmptyExpression();
2121 #undef CHECK_OK_CUSTOM
2124 template <
typename Traits>
2130 if (property == Token::NUMBER) {
2136 if (HasConflict(old_type, type)) {
2137 if (IsDataDataConflict(old_type, type)) {
2139 if (strict_mode_ ==
SLOPPY)
return;
2141 "strict_duplicate_property");
2142 }
else if (IsDataAccessorConflict(old_type, type)) {
2145 "accessor_data_property");
2147 ASSERT(IsAccessorAccessorConflict(old_type, type));
2150 "accessor_get_set");
2159 #endif // V8_PREPARSER_H
PreParserExpressionList ExpressionList
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter NULL
bool HarmonyModules() const
static PreParserExpression Default()
ExpressionT ParseRegExpLiteral(bool seen_equal, bool *ok)
v8::Extension * extension_
bool is_generator() const
PreParseResult PreParseProgram()
PreParserExpression ParseV8Intrinsic(bool *ok)
static PreParserIdentifier Arguments()
ExpressionT ParseExpression(bool accept_IN, bool *ok)
static PreParserExpression ExpressionFromIdentifier(PreParserIdentifier name, int pos, PreParserScope *scope, PreParserFactory *factory)
static bool IsIdentifier(PreParserExpression expression)
static PreParserIdentifier Yield()
bool allow_generators() const
Traits::Type::Expression ExpressionT
bool IsUseStrictLiteral()
bool peek_any_identifier()
PreParserScope(PreParserScope *outer_scope, ScopeType scope_type)
static int Precedence(Value tok)
static PreParserExpressionList NewPropertyList(int size, void *zone)
PreParserIdentifier AsIdentifier()
ExpressionT ParseArrayLiteral(bool *ok)
static int Precedence(Token::Value token, bool accept_IN)
bool IsValidStrictVariable()
PreParserTraits(PreParser *pre_parser)
PreParserExpression NewConditional(PreParserExpression condition, PreParserExpression then_expression, PreParserExpression else_expression, int pos)
void CheckOctalLiteral(int beg_pos, int end_pos, bool *ok)
Traits::Type::Zone * zone() const
static bool IsCompareOp(Value op)
int FindSymbol(DuplicateFinder *finder, int value)
PreParserExpression ExpressionFromString(int pos, Scanner *scanner, PreParserFactory *factory=NULL)
static PreParserIdentifier Eval()
void SetHarmonyScoping(bool scoping)
static bool IsUnaryOp(Value op)
ExpressionT ParseMemberExpression(bool *ok)
void set_allow_modules(bool allow)
static PreParserExpression MarkExpressionAsLValue(PreParserExpression expression)
ObjectLiteralChecker(ParserBase *parser, StrictMode strict_mode)
PreParserIdentifier GetSymbol(Scanner *scanner)
void set_allow_harmony_numeric_literals(bool allow)
bool parenthesized_function_
TypeImpl< ZoneTypeConfig > Type
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function not JSFunction itself flushes the cache of optimized code for closures on every GC functions with arguments object maximum number of escape analysis fix point iterations allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms concurrent on stack replacement do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes number of stack frames inspected by the profiler percentage of ICs that must have type info to allow optimization extra verbose compilation tracing generate extra emit comments in code disassembly enable use of SSE3 instructions if available enable use of CMOV instruction if available enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of d16 d31 registers on ARM this requires VFP3 force all emitted branches to be in long expose natives in global object expose freeBuffer extension expose gc extension under the specified name expose externalize string extension number of stack frames to capture disable builtin natives files print name of functions for which code is generated use random jit cookie to mask large constants trace lazy optimization use adaptive optimizations always try to OSR functions trace optimize function deoptimization minimum length for automatic enable preparsing maximum number of optimization attempts before giving up cache prototype transitions trace debugging JSON request response trace out of bounds accesses to external arrays trace_js_array_abuse automatically set the debug break flag when debugger commands are in the queue abort by crashing maximum length of function source code printed in a stack trace max size of the new max size of the old max size of executable always perform global GCs print one trace line following each garbage collection do not print trace line after scavenger collection print statistics of the maximum memory committed for the heap in only print modified registers Don t break for ASM_UNIMPLEMENTED_BREAK macros print stack trace when an illegal exception is thrown randomize hashes to avoid predictable hash Fixed seed to use to hash property Print the time it takes to deserialize the snapshot testing_bool_flag testing_int_flag string flag tmp file in which to serialize heap Print the time it takes to lazily compile hydrogen code stubs concurrent_recompilation concurrent_sweeping Print usage message
void CheckStrictModeLValue(PreParserExpression expression, bool *ok)
static void SetUpFunctionState(FunctionState *function_state, void *)
bool IsFunctionLiteral() const
PreParser(Scanner *scanner, ParserRecorder *log, uintptr_t stack_limit)
ExpressionT ParseConditionalExpression(bool accept_IN, bool *ok)
PreParserIdentifier Identifier
PreParserFactory(void *extra_param)
bool Check(Token::Value token)
void ReportUnexpectedToken(Token::Value token)
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function not JSFunction itself flushes the cache of optimized code for closures on every GC functions with arguments object maximum number of escape analysis fix point iterations allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms concurrent on stack replacement do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes number of stack frames inspected by the profiler percentage of ICs that must have type info to allow optimization extra verbose compilation tracing generate extra emit comments in code disassembly enable use of SSE3 instructions if available enable use of CMOV instruction if available enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of d16 d31 registers on ARM this requires VFP3 force all emitted branches to be in long expose natives in global object expose freeBuffer extension expose gc extension under the specified name expose externalize string extension number of stack frames to capture disable builtin natives files print name of functions for which code is generated use random jit cookie to mask large constants trace lazy optimization use adaptive optimizations always try to OSR functions trace optimize function deoptimization minimum length for automatic enable preparsing maximum number of optimization attempts before giving up cache prototype transitions trace debugging JSON request response trace out of bounds accesses to external arrays trace_js_array_abuse automatically set the debug break flag when debugger commands are in the queue abort by crashing maximum length of function source code printed in a stack trace max size of the new max size of the old max size of executable always perform global GCs print one trace line following each garbage collection do not print trace line after scavenger collection print statistics of the maximum memory committed for the heap in only print modified registers Don t break for ASM_UNIMPLEMENTED_BREAK macros print stack trace when an illegal exception is thrown randomize hashes to avoid predictable hash Fixed seed to use to hash property Print the time it takes to deserialize the snapshot testing_bool_flag testing_int_flag string flag tmp file in which to serialize heap Print the time it takes to lazily compile hydrogen code stubs concurrent_recompilation concurrent_sweeping Print usage including on console Map counters to a file Enable debugger compile events enable GDBJIT enable GDBJIT interface for all code objects dump only objects containing this substring stress the GC compactor to flush out pretty print source code print source AST function name where to insert a breakpoint print scopes for builtins trace contexts operations print stuff during garbage collection report code statistics after GC report handles after GC trace cache state transitions print interface inference details prints when objects are turned into dictionaries report heap spill statistics along with trace isolate state changes trace regexp bytecode execution Minimal Log all events to the log file Log API events to the log file Log heap samples on garbage collection for the hp2ps tool log positions Log suspect operations Used with turns on browser compatible mode for profiling v8 log
void set_index(int index)
static PreParserExpression ExpressionFromLiteral(Token::Value token, int pos, Scanner *scanner, PreParserFactory *factory)
Scanner * scanner() const
PreParserExpression * operator->()
PreParserExpressionList PropertyList
#define ASSERT(condition)
void Add(PreParserExpression, void *)
PreParserExpression NewCallNew(PreParserExpression expression, PreParserExpressionList arguments, int pos)
static bool IsThisProperty(PreParserExpression expression)
ExpressionT ParseAssignmentExpression(bool accept_IN, bool *ok)
void set_allow_natives_syntax(bool allow)
void Consume(Token::Value token)
void set_allow_harmony_scoping(bool allow)
void SetHarmonyModules(bool modules)
int materialized_literal_count()
Traits::Type::Scope * scope_
bool allow_for_of() const
bool HarmonyScoping() const
PreParserExpression NewNumberLiteral(double number, int pos)
IdentifierT ParseIdentifierOrStrictReservedWord(bool *is_strict_reserved, bool *ok)
PreParserExpression NewProperty(PreParserExpression obj, PreParserExpression key, int pos)
bool is_generator() const
void CheckProperty(Token::Value property, PropertyKind type, bool *ok)
static PreParserExpression FromIdentifier(PreParserIdentifier id)
Traits::Type::Identifier IdentifierT
static PreParserExpression UseStrictStringLiteral()
bool stack_overflow() const
static PreParserExpression EmptyExpression()
PreParserExpression NewAssignment(Token::Value op, PreParserExpression left, PreParserExpression right, int pos)
void ReportMessageAt(Scanner::Location location, const char *message, bool is_reference_error=false)
ExpressionT ParseYieldExpression(bool *ok)
ExpressionT ParseMemberExpressionContinuation(ExpressionT expression, bool *ok)
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function not JSFunction itself flushes the cache of optimized code for closures on every GC functions with arguments object maximum number of escape analysis fix point iterations allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms concurrent on stack replacement do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes number of stack frames inspected by the profiler percentage of ICs that must have type info to allow optimization extra verbose compilation tracing generate extra emit comments in code disassembly enable use of SSE3 instructions if available enable use of CMOV instruction if available enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of d16 d31 registers on ARM this requires VFP3 force all emitted branches to be in long mode(MIPS only)") DEFINE_string(expose_natives_as
PreParserExpression NewBinaryOperation(Token::Value op, PreParserExpression left, PreParserExpression right, int pos)
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object size
static PreParserExpression GetLiteralTheHole(int position, PreParserFactory *factory)
Traits::Type::GeneratorVariable * generator_object_variable() const
ExpressionT ParseMemberWithNewPrefixesExpression(bool *ok)
IdentifierT ParseIdentifierName(bool *ok)
PreParserExpression FunctionLiteral
void ExpectSemicolon(bool *ok)
INLINE(Token::Value peek())
bool allow_harmony_scoping() const
static PreParserExpression StringLiteral()
static const char * String(Value tok)
PreParserExpression AsFunctionLiteral()
static PreParserIdentifier NextLiteralString(Scanner *scanner, PretenureFlag tenured)
static PreParserExpression Property()
void ExpectContextualKeyword(Vector< const char > keyword, bool *ok)
static bool IsAssignmentOp(Value tok)
ParsingModeScope(ParserBase *parser, Mode mode)
static PreParserIdentifier FutureStrictReserved()
void ReportMessage(const char *message, Vector< const char * > args, bool is_reference_error=false)
static PreParserExpressionList NewExpressionList(int size, void *zone)
static PreParserExpressionList NullExpressionList()
ExpressionT ParseUnaryExpression(bool *ok)
bool allow_harmony_numeric_literals() const
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function not JSFunction itself flushes the cache of optimized code for closures on every GC functions with arguments object maximum number of escape analysis fix point iterations allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms concurrent on stack replacement do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes number of stack frames inspected by the profiler percentage of ICs that must have type info to allow optimization extra verbose compilation tracing generate extra code(assertions) for debugging") DEFINE_bool(code_comments
void set_allow_lazy(bool allow)
PreParserExpression NewUnaryOperation(Token::Value op, PreParserExpression expression, int pos)
PreParserExpressionList()
bool CheckContextualKeyword(Vector< const char > keyword)
PreParserExpression NewCompareOperation(Token::Value op, PreParserExpression left, PreParserExpression right, int pos)
INLINE(Token::Value Next())
PreParserExpression NewLiteral(PreParserIdentifier identifier, int pos)
PreParserExpression ParseFunctionLiteral(PreParserIdentifier name, Scanner::Location function_name_location, bool name_is_strict_reserved, bool is_generator, int function_token_position, FunctionLiteral::FunctionType type, bool *ok)
static void PushPropertyName(FuncNameInferrer *fni, PreParserExpression expression)
void set_is_generator(bool is_generator)
IdentifierT ParseIdentifierNameOrGetOrSet(bool *is_get, bool *is_set, bool *ok)
static bool IsKeyword(Value tok)
static PreParserExpression This()
FunctionState * function_state_
PreParserExpression Expression
static PreParserIdentifier Default()
int FindNumber(DuplicateFinder *finder, int value)
static Location invalid()
void set_stack_overflow()
PreParserExpression NewObjectLiteralProperty(PreParserExpression key, PreParserExpression value)
static bool IsEvalOrArguments(PreParserIdentifier identifier)
ExpressionT ParsePrimaryExpression(bool *ok)
bool allow_natives_syntax() const
static void TearDownFunctionState(FunctionState *function_state)
PreParserExpression Literal
static PreParserExpression ThisExpression(PreParserScope *scope, PreParserFactory *factory)
void SetStrictMode(StrictMode strict_mode)
Location location() const
static bool IsBoilerplateProperty(PreParserExpression property)
PreParseResult PreParseLazyFunction(StrictMode strict_mode, bool is_generator, ParserRecorder *log)
void set_allow_for_of(bool allow)
bool IsFutureStrictReserved()
PreParserExpression NewArrayLiteral(PreParserExpressionList values, int literal_index, int pos)
StrictMode strict_mode() const
void set_allow_generators(bool allow)
void clear_octal_position()
void ReportMessageAt(Scanner::Location location, const char *message, Vector< const char * > args, bool is_reference_error=false)
PreParserIdentifier Identifier
void set_generator_object_variable(typename Traits::Type::GeneratorVariable *variable)
static PreParserExpression EmptyLiteral()
static PreParserExpression ThisProperty()
static void PushLiteralName(FuncNameInferrer *fni, PreParserIdentifier id)
PreParserExpression YieldExpression
static void CheckPossibleEvalCall(PreParserExpression expression, PreParserScope *scope)
void SetHarmonyNumericLiterals(bool numeric_literals)
bool allow_modules() const
bool IsValidLeftHandSide()
int NextMaterializedLiteralIndex()
bool ShortcutNumericLiteralBinaryExpression(PreParserExpression *x, PreParserExpression y, Token::Value op, int pos, PreParserFactory *factory)
PreParserExpression NewVariableProxy(void *generator_variable)
ParserBase(Scanner *scanner, uintptr_t stack_limit, v8::Extension *extension, ParserRecorder *log, typename Traits::Type::Zone *zone, typename Traits::Type::Parser this_object)
static PreParserIdentifier EmptyIdentifier()
#define CHECK_OK_CUSTOM(x)
static void CheckAssigningFunctionLiteralToProperty(PreParserExpression left, PreParserExpression right)
Token::Value peek() const
AllowEvalOrArgumentsAsIdentifier
Location octal_position() const
static const int kMaxArguments
PreParserExpression NewObjectLiteral(PreParserExpressionList properties, int literal_index, int boilerplate_properties, bool has_function, int pos)
PreParserExpression Expression
Traits::Type::Factory * factory()
PreParserExpressionList * operator->()
static void CheckFunctionLiteralInsideTopLevelObjectLiteral(PreParserScope *scope, PreParserExpression value, bool *has_function)
PreParserExpression ObjectLiteralProperty
PreParserExpression NewRegExpLiteral(PreParserIdentifier js_pattern, PreParserIdentifier js_flags, int literal_index, int pos)
ExpressionT ParseObjectLiteral(bool *ok)
ExpressionT ParseBinaryExpression(int prec, bool accept_IN, bool *ok)
static bool IsArrayIndex(PreParserIdentifier string, uint32_t *index)
ExpressionT ParseLeftHandSideExpression(bool *ok)
static PreParserIdentifier FutureReserved()
PreParserExpression NewCountOperation(Token::Value op, bool is_prefix, PreParserExpression expression, int pos)
bool HarmonyNumericLiterals() const
ExpressionT ParsePostfixExpression(bool *ok)
Traits::Type::ExpressionList ParseArguments(bool *ok)
void Expect(Token::Value token, bool *ok)
int expected_property_count()
static bool IsCountOp(Value op)
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function not JSFunction itself flushes the cache of optimized code for closures on every GC functions with arguments object maximum number of escape analysis fix point iterations allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms concurrent on stack replacement do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes number of stack frames inspected by the profiler percentage of ICs that must have type info to allow optimization extra verbose compilation tracing generate extra emit comments in code disassembly enable use of SSE3 instructions if available enable use of CMOV instruction if available enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of d16 d31 registers on ARM this requires VFP3 force all emitted branches to be in long expose natives in global object expose freeBuffer extension expose gc extension under the specified name expose externalize string extension number of stack frames to capture disable builtin natives files print name of functions for which code is generated use random jit cookie to mask large constants trace lazy optimization use adaptive optimizations always try to OSR functions trace optimize function deoptimization minimum length for automatic enable preparsing maximum number of optimization attempts before giving up cache prototype transitions trace debugging JSON request response trace out of bounds accesses to external arrays trace_js_array_abuse automatically set the debug break flag when debugger commands are in the queue abort by crashing maximum length of function source code printed in a stack trace max size of the new max size of the old max size of executable always perform global GCs print one trace line following each garbage collection do not print trace line after scavenger collection print statistics of the maximum memory committed for the heap in name
PreParserExpression NewCall(PreParserExpression expression, PreParserExpressionList arguments, int pos)
IdentifierT ParseIdentifier(AllowEvalOrArgumentsAsIdentifier, bool *ok)
PreParserExpression NewYield(PreParserExpression generator_object, PreParserExpression expression, Yield::Kind yield_kind, int pos)
PreParserExpression NewObjectLiteralProperty(bool is_getter, PreParserExpression value, int pos)
PreParserExpression BuildUnaryExpression(PreParserExpression expression, Token::Value op, int pos, PreParserFactory *factory)
Traits::Type::Factory * factory()
Location peek_location() const
BlockState(typename Traits::Type::Scope **scope_stack, typename Traits::Type::Scope *scope)
static const int kLiteralsPrefixSize