v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
bytecode-generator.h
Go to the documentation of this file.
1// Copyright 2015 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef V8_INTERPRETER_BYTECODE_GENERATOR_H_
6#define V8_INTERPRETER_BYTECODE_GENERATOR_H_
7
8#include "src/ast/ast.h"
15
16namespace v8 {
17namespace internal {
18
19class AstNodeSourceRanges;
20class AstStringConstants;
21class BytecodeArray;
22class UnoptimizedCompilationInfo;
23enum class SourceRangeKind;
24
25namespace interpreter {
26
27class TopLevelDeclarationsBuilder;
28class LoopBuilder;
29class BlockCoverageBuilder;
30class BytecodeJumpTable;
31
32class BytecodeGenerator final : public AstVisitor<BytecodeGenerator> {
33 public:
34 enum TypeHint : uint8_t {
35 kBoolean = 1 << 0,
39 kUnknown = 0xFFu
40 };
41
42 explicit BytecodeGenerator(
43 LocalIsolate* local_isolate, Zone* zone, UnoptimizedCompilationInfo* info,
45 std::vector<FunctionLiteral*>* eager_inner_literals,
46 Handle<Script> script);
47
48 void GenerateBytecode(uintptr_t stack_limit);
49 template <typename IsolateT>
51 Handle<Script> script);
52 template <typename IsolateT>
54
55 // Check if hint2 is same or the subtype of hint1.
56 static bool IsSameOrSubTypeHint(TypeHint hint1, TypeHint hint2) {
57 return hint1 == (hint1 | hint2);
58 }
59
60 static bool IsStringTypeHint(TypeHint hint) {
61 return IsSameOrSubTypeHint(TypeHint::kString, hint);
62 }
63
64#ifdef DEBUG
65 int CheckBytecodeMatches(Tagged<BytecodeArray> bytecode);
66#endif
67
68#define DECLARE_VISIT(type) void Visit##type(type* node);
70#undef DECLARE_VISIT
71
72 // Visiting function for declarations list and statements are overridden.
75 void VisitDeclarations(Declaration::List* declarations);
76 void VisitStatements(const ZonePtrList<Statement>* statments, int start = 0);
77
78 private:
79 class AccumulatorPreservingScope;
80 class ContextScope;
81 class ControlScope;
82 class ControlScopeForBreakable;
83 class ControlScopeForDerivedConstructor;
84 class ControlScopeForIteration;
85 class ControlScopeForTopLevel;
86 class ControlScopeForTryCatch;
87 class ControlScopeForTryFinally;
88 class CurrentScope;
89 class EffectResultScope;
90 class ExpressionResultScope;
91 class FeedbackSlotCache;
92 class HoleCheckElisionScope;
93 class HoleCheckElisionMergeScope;
94 class IteratorRecord;
95 class MultipleEntryBlockContextScope;
96 class LoopScope;
97 class ForInScope;
98 class NaryCodeCoverageSlots;
99 class OptionalChainNullLabelScope;
100 class RegisterAllocationScope;
101 class TestResultScope;
102 class TopLevelDeclarationsBuilder;
103 class DisposablesStackScope;
104 class ValueResultScope;
105
107
110
111 // An assignment has to evaluate its LHS before its RHS, but has to assign to
112 // the LHS after both evaluations are done. This class stores the data
113 // computed in the LHS evaluation that has to live across the RHS evaluation,
114 // and is used in the actual LHS assignment.
116 public:
119 Register object,
120 const AstRawString* name);
123 Property* property,
124 Register object,
125 Register key);
127 Property* property,
128 Register object);
133
142 Expression* expr() const {
144 return expr_;
145 }
160 const AstRawString* name() const {
162 return name_;
163 }
169
170 private:
182
184
185 // Different assignment types use different fields:
186 //
187 // NON_PROPERTY: expr
188 // NAMED_PROPERTY: object_expr, object, name
189 // KEYED_PROPERTY, PRIVATE_METHOD: object, key
190 // NAMED_SUPER_PROPERTY: super_property_args
191 // KEYED_SUPER_PROPERT: super_property_args
198 };
199
201
206
208 void GenerateBodyStatements(int start = 0);
210
211 template <typename IsolateT>
212 void AllocateDeferredConstants(IsolateT* isolate, Handle<Script> script);
213
215
216 // Dispatched from VisitBinaryOperation.
222
223 // Dispatched from VisitNaryOperation.
229
230 // Dispatched from VisitUnaryOperation.
231 void VisitVoid(UnaryOperation* expr);
232 void VisitTypeOf(UnaryOperation* expr);
233 void VisitNot(UnaryOperation* expr);
234 void VisitDelete(UnaryOperation* expr);
235
236 // Visits a typeof expression for the value on which to perform the typeof.
238
239 // Used by flow control routines to evaluate loop condition.
241
242 // Visit the arguments expressions in |args| and store them in |args_regs|,
243 // growing |args_regs| for each argument visited.
245 RegisterList* arg_regs);
246
247 // Visit a keyed super property load. The optional
248 // |opt_receiver_out| register will have the receiver stored to it
249 // if it's a valid register. The loaded value is placed in the
250 // accumulator.
252 Register opt_receiver_out);
253
254 // Visit a named super property load. The optional
255 // |opt_receiver_out| register will have the receiver stored to it
256 // if it's a valid register. The loaded value is placed in the
257 // accumulator.
259 Register opt_receiver_out);
260
261 void VisitPropertyLoad(Register obj, Property* expr);
264
266 Expression* lhs, AccumulatorPreservingMode accumulator_preserving_mode =
269 LookupHoistingMode lookup_hoisting_mode);
270
272
274
278 LookupHoistingMode lookup_hoisting_mode);
281 LookupHoistingMode lookup_hoisting_mode);
282
283 void BuildLoadNamedProperty(const Expression* object_expr, Register object,
284 const AstRawString* name);
285 void BuildSetNamedProperty(const Expression* object_expr, Register object,
286 const AstRawString* name);
287 void BuildStoreGlobal(Variable* variable);
288
290
292
294
296
297 void BuildVariableLoad(Variable* variable, HoleCheckMode hole_check_mode,
298 TypeofMode typeof_mode = TypeofMode::kNotInside);
300 Variable* variable, HoleCheckMode hole_check_mode,
301 TypeofMode typeof_mode = TypeofMode::kNotInside);
303 Variable* variable, Token::Value op, HoleCheckMode hole_check_mode,
304 LookupHoistingMode lookup_hoisting_mode = LookupHoistingMode::kNormal);
305 void BuildLiteralCompareNil(Token::Value compare_op,
308 void BuildReturn(int source_position);
309 void BuildAsyncReturn(int source_position);
311 void BuildReThrow();
314 HoleCheckMode hole_check_mode);
316 Variable* variable, Token::Value op, HoleCheckMode hole_check_mode);
318 void BuildThrowIfHole(Variable* variable);
319
322 void BuildNewLocalBlockContext(Scope* scope);
323 void BuildNewLocalCatchContext(Scope* scope);
324 void BuildNewLocalWithContext(Scope* scope);
325
327 void BuildSuspendPoint(int position);
328
330 void BuildAwait(Expression* await_expr);
331
333 Register iteration_continuation_token);
334
336
337 // Create an IteratorRecord with pre-allocated registers holding the next
338 // method and iterator object.
340 Register iterator_object,
341 IteratorType hint);
342
343 // Create an IteratorRecord allocating new registers to hold the next method
344 // and iterator object.
346 void BuildIteratorNext(const IteratorRecord& iterator, Register next_result);
347 void BuildIteratorClose(const IteratorRecord& iterator,
348 Expression* expr = nullptr);
350 RegisterList receiver_and_args,
351 BytecodeLabel* if_called,
352 BytecodeLabels* if_notcalled);
353
355 Register index, Register value,
356 FeedbackSlot next_value_slot,
357 FeedbackSlot next_done_slot,
358 FeedbackSlot index_slot,
359 FeedbackSlot element_slot);
360 // Create Array literals. |expr| can be nullptr, but if provided,
361 // a boilerplate will be used to create an initial array for elements
362 // before the first spread.
364 ArrayLiteral* expr);
365 void BuildCreateObjectLiteral(Register literal, uint8_t flags, size_t entry);
367 void VisitArgumentsObject(Variable* variable);
369 void VisitCallSuper(Call* call);
371 Register instance);
373 void BuildPrivateBrandCheck(Property* property, Register object);
374 void BuildPrivateMethodIn(Variable* private_name,
375 Expression* object_expression);
376 void BuildPrivateGetterAccess(Register obj, Register access_pair);
377 void BuildPrivateSetterAccess(Register obj, Register access_pair,
378 Register value);
379 void BuildPrivateDebugDynamicGet(Property* property, Register obj);
381 Register value);
382 void BuildPrivateMethods(ClassLiteral* expr, bool is_static,
383 Register home_object);
385 void BuildClassLiteral(ClassLiteral* expr, Register name);
386 void VisitClassLiteral(ClassLiteral* expr, Register name);
387 void VisitNewTargetVariable(Variable* variable);
388 void VisitThisFunctionVariable(Variable* variable);
391 Register instance);
394 void VisitBlockMaybeDispose(Block* stmt);
395 void VisitLiteralAccessor(LiteralProperty* property, Register value_out);
398
399 // Visit a logical OR/AND within a test context, rewiring the jumps based
400 // on the expression values.
401 void VisitLogicalTest(Token::Value token, Expression* left, Expression* right,
402 int right_coverage_slot);
404 const NaryCodeCoverageSlots* coverage_slots);
405
406 // Visit a (non-RHS) test for a logical op, which falls through if the test
407 // fails or jumps to the appropriate labels if it succeeds.
409 BytecodeLabels* then_labels,
410 BytecodeLabels* else_labels,
411 int coverage_slot);
412
413 // Helpers for binary and nary logical op value expressions.
415 int coverage_slot);
417 BytecodeLabels* end_labels,
418 int coverage_slot);
419
420 // Helper for binary and nary nullish op value expressions.
422 int coverage_slot);
423
424 // Visit the body of a loop iteration.
425 void VisitIterationBody(IterationStatement* stmt, LoopBuilder* loop_builder);
426
427 // Visit a statement and switch scopes, the context is in the accumulator.
428 void VisitInScope(Statement* stmt, Scope* scope);
429
431
432 void BuildLoadPropertyKey(LiteralProperty* property, Register out_reg);
433
438 size_t index);
439
442 void BuildIncrementBlockCoverageCounterIfEnabled(int coverage_array_slot);
443
444 void BuildTest(ToBooleanMode mode, BytecodeLabels* then_labels,
445 BytecodeLabels* else_labels, TestFallthrough fallthrough);
446
447 template <typename TryBodyFunc, typename CatchBodyFunc>
448 void BuildTryCatch(TryBodyFunc try_body_func, CatchBodyFunc catch_body_func,
450 TryCatchStatement* stmt_for_coverage = nullptr);
451 template <typename TryBodyFunc, typename FinallyBodyFunc>
452 void BuildTryFinally(TryBodyFunc try_body_func,
453 FinallyBodyFunc finally_body_func,
455 TryFinallyStatement* stmt_for_coverage = nullptr);
456 template <typename WrappedFunc>
457 void BuildDisposeScope(WrappedFunc wrapped_func, bool has_await_using);
458
459 template <typename ExpressionFunc>
460 void BuildOptionalChain(ExpressionFunc expression_func);
461
464 Register constructor,
465 BytecodeLabel* super_ctor_call_done);
467 Register constructor_then_instance,
468 BytecodeLabel* super_ctor_call_done);
469
470 // Visitors for obtaining expression result in the accumulator, in a
471 // register, or just getting the effect. Some visitors return a TypeHint which
472 // specifies the type of the result of the visited expression.
478 void VisitForEffect(Expression* expr);
479 void VisitForTest(Expression* expr, BytecodeLabels* then_labels,
480 BytecodeLabels* else_labels, TestFallthrough fallthrough);
481 void VisitForNullishTest(Expression* expr, BytecodeLabels* then_labels,
482 BytecodeLabels* test_next_labels,
483 BytecodeLabels* else_labels);
484
485 // Convenience visitors that put a HoleCheckElisionScope on stack.
486 template <typename T>
487 void VisitInHoleCheckElisionScope(T* node);
489 LoopBuilder* loop_builder);
491
493
495
497
499
500 // Returns the runtime function id for a store to super for the function's
501 // language mode.
504
505 // Returns a cached slot, or create and cache a new slot if one doesn't
506 // already exists.
508 Variable* variable);
510 Variable* variable);
512 const AstRawString* name);
515 const AstRawString* name);
517
519
521
523 return type_hint == TypeHint::kBoolean ? ToBooleanMode::kAlreadyBoolean
524 : ToBooleanMode::kConvertToBoolean;
525 }
526
527 inline Register incoming_new_target() const;
528 inline Register generator_object() const;
529
530 inline BytecodeArrayBuilder* builder() { return &builder_; }
531 inline Zone* zone() const { return zone_; }
533 inline UnoptimizedCompilationInfo* info() const { return info_; }
536 }
537
538 inline Scope* current_scope() const { return current_scope_; }
539 inline void set_current_scope(Scope* scope) { current_scope_ = scope; }
540
543 execution_control_ = scope;
544 }
546 inline void set_execution_context(ContextScope* context) {
548 }
556
561 inline LanguageMode language_mode() const;
562 inline FunctionKind function_kind() const;
564 inline int feedback_index(FeedbackSlot slot) const;
565
569
576
579 current_loop_scope_ = loop_scope;
580 }
581
584 }
585 inline void set_current_for_in_scope(ForInScope* for_in_scope) {
586 current_for_in_scope_ = for_in_scope;
587 }
588
593 void set_current_disposables_stack(Register disposables_stack) {
594 current_disposables_stack_ = disposables_stack;
595 }
596
604
605 // External vector of literals to be eagerly compiled.
606 std::vector<FunctionLiteral*>* eager_inner_literals_;
608
610
624
628
631
633
634 // Dummy feedback slot for compare operations, where we don't care about
635 // feedback
637
640 // TODO(solanes): assess if we can move loop_depth_ into LoopScope.
642
643 // Variables for which hole checks have been emitted in the current basic
644 // block. Managed by HoleCheckElisionScope and HoleCheckElisionMergeScope.
645 Variable::HoleCheckBitmap hole_check_bitmap_;
646
649
651};
652
653} // namespace interpreter
654} // namespace internal
655} // namespace v8
656
657#endif // V8_INTERPRETER_BYTECODE_GENERATOR_H_
#define DECLARE_VISIT(type)
#define AST_NODE_LIST(V)
Definition ast.h:121
Builtins::Kind kind
Definition builtins.cc:40
#define SBXCHECK(condition)
Definition check.h:61
base::ThreadedList< Declaration > List
Definition ast.h:373
AssignmentLhsData(AssignType assign_type, Expression *expr, RegisterList super_property_args, Register object, Register key, Expression *object_expr, const AstRawString *name)
static AssignmentLhsData PrivateMethodOrAccessor(AssignType type, Property *property, Register object, Register key)
static AssignmentLhsData NamedProperty(Expression *object_expr, Register object, const AstRawString *name)
static AssignmentLhsData PrivateDebugEvaluate(AssignType type, Property *property, Register object)
static AssignmentLhsData KeyedSuperProperty(RegisterList super_property_args)
static AssignmentLhsData NamedSuperProperty(RegisterList super_property_args)
static AssignmentLhsData KeyedProperty(Register object, Register key)
void BuildVariableLoadForAccumulatorValue(Variable *variable, HoleCheckMode hole_check_mode, TypeofMode typeof_mode=TypeofMode::kNotInside)
void SetVariableInRegister(Variable *var, Register reg)
Runtime::FunctionId StoreKeyedToSuperRuntimeId()
void BuildHoleCheckForVariableAssignment(Variable *variable, Token::Value op)
void BuildFillArrayWithIterator(IteratorRecord iterator, Register array, Register index, Register value, FeedbackSlot next_value_slot, FeedbackSlot next_done_slot, FeedbackSlot index_slot, FeedbackSlot element_slot)
UnoptimizedCompilationInfo * info() const
void BuildDisposeScope(WrappedFunc wrapped_func, bool has_await_using)
void BuildCreateObjectLiteral(Register literal, uint8_t flags, size_t entry)
void BuildPrivateBrandInitialization(Register receiver, Variable *brand)
void VisitGlobalDeclarations(Declaration::List *declarations)
DirectHandle< TrustedByteArray > FinalizeSourcePositionTable(IsolateT *isolate)
void VisitIterationBody(IterationStatement *stmt, LoopBuilder *loop_builder)
FeedbackSlot GetCachedStoreICSlot(const Expression *expr, const AstRawString *name)
ZoneVector< std::pair< Call *, Scope * > > eval_calls_
TypeHint GetTypeHintForLocalVariable(Variable *variable)
ZoneVector< std::pair< ObjectLiteralBoilerplateBuilder *, size_t > > object_literals_
void VisitArguments(const ZonePtrList< Expression > *args, RegisterList *arg_regs)
void BuildClassProperty(ClassLiteral::Property *property)
ZoneVector< std::pair< ClassLiteral *, size_t > > class_literals_
void VisitLogicalTestSubExpression(Token::Value token, Expression *expr, BytecodeLabels *then_labels, BytecodeLabels *else_labels, int coverage_slot)
void set_current_for_in_scope(ForInScope *for_in_scope)
void BuildTryCatch(TryBodyFunc try_body_func, CatchBodyFunc catch_body_func, HandlerTable::CatchPrediction catch_prediction, TryCatchStatement *stmt_for_coverage=nullptr)
void BuildDestructuringArrayAssignment(ArrayLiteral *pattern, Token::Value op, LookupHoistingMode lookup_hoisting_mode)
void BuildCreateArrayLiteral(const ZonePtrList< Expression > *elements, ArrayLiteral *expr)
void BuildTest(ToBooleanMode mode, BytecodeLabels *then_labels, BytecodeLabels *else_labels, TestFallthrough fallthrough)
V8_WARN_UNUSED_RESULT Register VisitForRegisterValue(Expression *expr)
void set_catch_prediction(HandlerTable::CatchPrediction value)
void set_current_disposables_stack(Register disposables_stack)
IteratorRecord BuildGetIteratorRecord(Register iterator_next, Register iterator_object, IteratorType hint)
void BuildLoadNamedProperty(const Expression *object_expr, Register object, const AstRawString *name)
int AllocateConditionalChainBlockCoverageSlotIfEnabled(ConditionalChain *node, SourceRangeKind kind, size_t index)
Register GetRegisterForLocalVariable(Variable *variable)
static bool IsSameOrSubTypeHint(TypeHint hint1, TypeHint hint2)
const AstStringConstants * ast_string_constants() const
void BuildCallIteratorMethod(Register iterator, const AstRawString *method, RegisterList receiver_and_args, BytecodeLabel *if_called, BytecodeLabels *if_notcalled)
void BuildLiteralCompareNil(Token::Value compare_op, BytecodeArrayBuilder::NilValue nil)
void BuildAwait(Expression *await_expr)
void VisitPropertyLoad(Register obj, Property *expr)
void VisitLogicalTest(Token::Value token, Expression *left, Expression *right, int right_coverage_slot)
ZoneVector< std::pair< FunctionLiteral *, size_t > > function_literals_
void VisitForNullishTest(Expression *expr, BytecodeLabels *then_labels, BytecodeLabels *test_next_labels, BytecodeLabels *else_labels)
void BuildTryFinally(TryBodyFunc try_body_func, FinallyBodyFunc finally_body_func, HandlerTable::CatchPrediction catch_prediction, TryFinallyStatement *stmt_for_coverage=nullptr)
void VisitLiteralAccessor(LiteralProperty *property, Register value_out)
bool VisitLogicalOrSubExpression(Expression *expr, BytecodeLabels *end_labels, int coverage_slot)
void VisitLogicalOrExpression(BinaryOperation *binop)
void VisitKeyedSuperPropertyLoad(Property *property, Register opt_receiver_out)
void VisitIterationBodyInHoleCheckElisionScope(IterationStatement *stmt, LoopBuilder *loop_builder)
void BuildGetAndCheckSuperConstructor(Register this_function, Register new_target, Register constructor, BytecodeLabel *super_ctor_call_done)
void BuildLoadPropertyKey(LiteralProperty *property, Register out_reg)
FeedbackSlot GetCachedLoadICSlot(const Expression *expr, const AstRawString *name)
int AllocateBlockCoverageSlotIfEnabled(AstNode *node, SourceRangeKind kind)
void VisitArithmeticExpression(BinaryOperation *binop)
void VisitForTest(Expression *expr, BytecodeLabels *then_labels, BytecodeLabels *else_labels, TestFallthrough fallthrough)
void BuildAwait(int position=kNoSourcePosition)
FeedbackSlot GetCachedLoadSuperICSlot(const AstRawString *name)
void BuildVariableLoad(Variable *variable, HoleCheckMode hole_check_mode, TypeofMode typeof_mode=TypeofMode::kNotInside)
void BuildPrivateMethods(ClassLiteral *expr, bool is_static, Register home_object)
void BuildPrivateBrandCheck(Property *property, Register object)
int GetCachedCreateClosureSlot(FunctionLiteral *literal)
void BuildIteratorClose(const IteratorRecord &iterator, Expression *expr=nullptr)
void BuildAssignment(const AssignmentLhsData &data, Token::Value op, LookupHoistingMode lookup_hoisting_mode)
TopLevelDeclarationsBuilder * top_level_builder()
void VisitClassLiteral(ClassLiteral *expr, Register name)
void AddToEagerLiteralsIfEager(FunctionLiteral *literal)
void BuildSetNamedProperty(const Expression *object_expr, Register object, const AstRawString *name)
FeedbackSlot GetCachedLoadGlobalICSlot(TypeofMode typeof_mode, Variable *variable)
void BuildVariableAssignment(Variable *variable, Token::Value op, HoleCheckMode hole_check_mode, LookupHoistingMode lookup_hoisting_mode=LookupHoistingMode::kNormal)
void BuildPrivateDebugDynamicSet(Property *property, Register obj, Register value)
void BuildIncrementBlockCoverageCounterIfEnabled(AstNode *node, SourceRangeKind kind)
void BuildInstanceMemberInitialization(Register constructor, Register instance)
void VisitAndPushIntoRegisterList(Expression *expr, RegisterList *reg_list)
void BuildOptionalChain(ExpressionFunc expression_func)
void BuildInstanceInitializationAfterSuperCall(Register this_function, Register instance)
void set_execution_result(ExpressionResultScope *execution_result)
void BuildPushUndefinedIntoRegisterList(RegisterList *reg_list)
HandlerTable::CatchPrediction catch_prediction() const
BytecodeGenerator(LocalIsolate *local_isolate, Zone *zone, UnoptimizedCompilationInfo *info, const AstStringConstants *ast_string_constants, std::vector< FunctionLiteral * > *eager_inner_literals, Handle< Script > script)
bool IsVariableInRegister(Variable *var, Register reg)
ExpressionResultScope * execution_result() const
void BuildSuperCallOptimization(Register this_function, Register new_target, Register constructor_then_instance, BytecodeLabel *super_ctor_call_done)
bool VisitNullishSubExpression(Expression *expr, BytecodeLabels *end_labels, int coverage_slot)
Expression * GetDestructuringDefaultValue(Expression **target)
bool VariableNeedsHoleCheckInCurrentBlockForAssignment(Variable *variable, Token::Value op, HoleCheckMode hole_check_mode)
static constexpr ToBooleanMode ToBooleanModeFromTypeHint(TypeHint type_hint)
std::vector< FunctionLiteral * > * eager_inner_literals_
bool VariableNeedsHoleCheckInCurrentBlock(Variable *variable, HoleCheckMode hole_check_mode)
void BuildPrivateMethodIn(Variable *private_name, Expression *object_expression)
void BuildIteratorNext(const IteratorRecord &iterator, Register next_result)
int AllocateNaryBlockCoverageSlotIfEnabled(NaryOperation *node, size_t index)
void BuildDestructuringObjectAssignment(ObjectLiteral *pattern, Token::Value op, LookupHoistingMode lookup_hoisting_mode)
void VisitPropertyLoadForRegister(Register obj, Property *expr, Register destination)
void BuildPrivateGetterAccess(Register obj, Register access_pair)
void BuildClassLiteral(ClassLiteral *expr, Register name)
FeedbackSlot GetCachedStoreGlobalICSlot(LanguageMode language_mode, Variable *variable)
void BuildPrivateDebugDynamicGet(Property *property, Register obj)
void VisitModuleDeclarations(Declaration::List *declarations)
BytecodeRegisterAllocator * register_allocator()
void VisitNamedSuperPropertyLoad(Property *property, Register opt_receiver_out)
ZoneVector< std::pair< GetTemplateObject *, size_t > > template_objects_
HandlerTable::CatchPrediction catch_prediction_
ZoneVector< std::pair< NativeFunctionLiteral *, size_t > > native_function_literals_
void VisitLogicalAndExpression(BinaryOperation *binop)
void VisitDeclarations(Declaration::List *declarations)
AssignmentLhsData PrepareAssignmentLhs(Expression *lhs, AccumulatorPreservingMode accumulator_preserving_mode=AccumulatorPreservingMode::kNone)
void VisitInScope(Statement *stmt, Scope *scope)
void BuildFinalizeIteration(IteratorRecord iterator, Register done, Register iteration_continuation_token)
void VisitStatements(const ZonePtrList< Statement > *statments, int start=0)
void BuildLoadKeyedProperty(Register object, FeedbackSlot slot)
TypeHint VisitInHoleCheckElisionScopeForAccumulatorValue(Expression *expr)
ZoneVector< std::pair< ArrayLiteralBoilerplateBuilder *, size_t > > array_literals_
void BuildInvalidPropertyAccess(MessageTemplate tmpl, Property *property)
Handle< BytecodeArray > FinalizeBytecode(IsolateT *isolate, Handle< Script > script)
void AllocateDeferredConstants(IsolateT *isolate, Handle< Script > script)
TopLevelDeclarationsBuilder * top_level_builder_
void BuildPrivateSetterAccess(Register obj, Register access_pair, Register value)
bool VisitLogicalAndSubExpression(Expression *expr, BytecodeLabels *end_labels, int coverage_slot)
void VisitNaryLogicalTest(Token::Value token, NaryOperation *expr, const NaryCodeCoverageSlots *coverage_slots)
int start
base::Vector< const DirectHandle< Object > > args
Definition execution.cc:74
DirectHandle< Object > new_target
Definition execution.cc:75
TNode< Context > context
TNode< Object > receiver
std::string pattern
LiftoffRegister reg
FunctionLiteral * literal
Definition liveedit.cc:294
int position
Definition liveedit.cc:290
InstructionOperand destination
constexpr int kNoSourcePosition
Definition globals.h:850
@ PRIVATE_GETTER_ONLY
Definition ast.h:1664
@ NAMED_PROPERTY
Definition ast.h:1659
@ NAMED_SUPER_PROPERTY
Definition ast.h:1661
@ PRIVATE_SETTER_ONLY
Definition ast.h:1665
@ KEYED_SUPER_PROPERTY
Definition ast.h:1662
@ NON_PROPERTY
Definition ast.h:1658
@ PRIVATE_METHOD
Definition ast.h:1663
@ KEYED_PROPERTY
Definition ast.h:1660
@ PRIVATE_DEBUG_DYNAMIC
Definition ast.h:1667
@ PRIVATE_GETTER_AND_SETTER
Definition ast.h:1666
return value
Definition map-inl.h:893
ZoneList< T * > ZonePtrList
TorqueStructIteratorRecord IteratorRecord
#define DCHECK_NOT_NULL(val)
Definition logging.h:492
#define DCHECK(condition)
Definition logging.h:482
#define DCHECK_EQ(v1, v2)
Definition logging.h:485
Symbol method
#define V8_INLINE
Definition v8config.h:500
#define V8_WARN_UNUSED_RESULT
Definition v8config.h:671