%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
#include "src/ast/ast.h" #include "src/builtins/builtins-array-gen.h" #include "src/builtins/builtins-bigint-gen.h" #include "src/builtins/builtins-collections-gen.h" #include "src/builtins/builtins-constructor-gen.h" #include "src/builtins/builtins-data-view-gen.h" #include "src/builtins/builtins-iterator-gen.h" #include "src/builtins/builtins-promise-gen.h" #include "src/builtins/builtins-promise.h" #include "src/builtins/builtins-proxy-gen.h" #include "src/builtins/builtins-regexp-gen.h" #include "src/builtins/builtins-string-gen.h" #include "src/builtins/builtins-typed-array-gen.h" #include "src/builtins/builtins-utils-gen.h" #include "src/builtins/builtins-wasm-gen.h" #include "src/builtins/builtins.h" #include "src/codegen/code-factory.h" #include "src/debug/debug-wasm-objects.h" #include "src/heap/factory-inl.h" #include "src/ic/binary-op-assembler.h" #include "src/ic/handler-configuration-inl.h" #include "src/objects/arguments.h" #include "src/objects/bigint.h" #include "src/objects/elements-kind.h" #include "src/objects/free-space.h" #include "src/objects/js-break-iterator.h" #include "src/objects/js-collator.h" #include "src/objects/js-date-time-format.h" #include "src/objects/js-display-names.h" #include "src/objects/js-function.h" #include "src/objects/js-generator.h" #include "src/objects/js-list-format.h" #include "src/objects/js-locale.h" #include "src/objects/js-number-format.h" #include "src/objects/js-objects.h" #include "src/objects/js-plural-rules.h" #include "src/objects/js-promise.h" #include "src/objects/js-regexp-string-iterator.h" #include "src/objects/js-relative-time-format.h" #include "src/objects/js-segment-iterator.h" #include "src/objects/js-segmenter.h" #include "src/objects/js-segments.h" #include "src/objects/js-weak-refs.h" #include "src/objects/objects.h" #include "src/objects/ordered-hash-table.h" #include "src/objects/property-array.h" #include "src/objects/property-descriptor-object.h" #include "src/objects/source-text-module.h" #include "src/objects/stack-frame-info.h" #include "src/objects/swiss-hash-table-helpers.h" #include "src/objects/swiss-name-dictionary.h" #include "src/objects/synthetic-module.h" #include "src/objects/template-objects.h" #include "src/objects/torque-defined-classes.h" #include "src/torque/runtime-support.h" // Required Builtins: #include "torque-generated/src/builtins/internal-tq-csa.h" #include "torque-generated/src/builtins/array-isarray-tq-csa.h" #include "torque-generated/src/builtins/array-join-tq-csa.h" #include "torque-generated/src/builtins/base-tq-csa.h" #include "torque-generated/src/builtins/cast-tq-csa.h" #include "torque-generated/src/builtins/convert-tq-csa.h" #include "torque-generated/src/builtins/ic-callable-tq-csa.h" #include "torque-generated/src/builtins/ic-tq-csa.h" #include "torque-generated/src/builtins/internal-tq-csa.h" #include "torque-generated/src/builtins/torque-internal-tq-csa.h" #include "torque-generated/src/objects/feedback-vector-tq-csa.h" #include "torque-generated/src/objects/fixed-array-tq-csa.h" namespace v8 { namespace internal { TF_BUILTIN(GetTemplateObject, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Context> parameter0 = UncheckedParameter<Context>(Descriptor::kContext); USE(parameter0); TNode<SharedFunctionInfo> parameter1 = UncheckedParameter<SharedFunctionInfo>(Descriptor::kShared); USE(parameter1); TNode<TemplateObjectDescription> parameter2 = UncheckedParameter<TemplateObjectDescription>(Descriptor::kDescription); USE(parameter2); TNode<UintPtrT> parameter3 = UncheckedParameter<UintPtrT>(Descriptor::kSlot); USE(parameter3); TNode<HeapObject> parameter4 = UncheckedParameter<HeapObject>(Descriptor::kMaybeFeedbackVector); USE(parameter4); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block11(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block10(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block13(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block12(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block9(&ca_, compiler::CodeAssemblerLabel::kDeferred); compiler::CodeAssemblerParameterizedLabel<> block17(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block16(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<FeedbackVector> tmp0; if (block0.is_used()) { ca_.Bind(&block0); compiler::CodeAssemblerLabel label1(&ca_); tmp0 = Cast_FeedbackVector_0(state_, TNode<HeapObject>{parameter4}, &label1); ca_.Goto(&block10); if (label1.is_used()) { ca_.Bind(&label1); ca_.Goto(&block11); } } if (block11.is_used()) { ca_.Bind(&block11); ca_.Goto(&block9); } TNode<MaybeObject> tmp2; TNode<JSArray> tmp3; if (block10.is_used()) { ca_.Bind(&block10); tmp2 = CodeStubAssembler(state_).LoadFeedbackVectorSlot(TNode<FeedbackVector>{tmp0}, TNode<UintPtrT>{parameter3}); compiler::CodeAssemblerLabel label4(&ca_); tmp3 = Cast_JSArray_2(state_, TNode<Context>{parameter0}, TNode<MaybeObject>{tmp2}, &label4); ca_.Goto(&block12); if (label4.is_used()) { ca_.Bind(&label4); ca_.Goto(&block13); } } if (block13.is_used()) { ca_.Bind(&block13); ca_.Goto(&block9); } if (block12.is_used()) { ca_.Bind(&block12); CodeStubAssembler(state_).Return(tmp3); } TNode<IntPtrT> tmp5; TNode<Smi> tmp6; TNode<Object> tmp7; TNode<JSArray> tmp8; TNode<FeedbackVector> tmp9; if (block9.is_used()) { ca_.Bind(&block9); tmp5 = CodeStubAssembler(state_).Signed(TNode<UintPtrT>{parameter3}); tmp6 = Convert_Smi_intptr_0(state_, TNode<IntPtrT>{tmp5}); tmp7 = CodeStubAssembler(state_).CallRuntime(Runtime::kGetTemplateObject, parameter0, parameter2, parameter1, tmp6); tmp8 = UnsafeCast_JSArray_0(state_, TNode<Context>{parameter0}, TNode<Object>{tmp7}); compiler::CodeAssemblerLabel label10(&ca_); tmp9 = Cast_FeedbackVector_0(state_, TNode<HeapObject>{parameter4}, &label10); ca_.Goto(&block16); if (label10.is_used()) { ca_.Bind(&label10); ca_.Goto(&block17); } } if (block17.is_used()) { ca_.Bind(&block17); CodeStubAssembler(state_).Return(tmp8); } if (block16.is_used()) { ca_.Bind(&block16); CodeStubAssembler(state_).StoreFeedbackVectorSlot(TNode<FeedbackVector>{tmp9}, TNode<UintPtrT>{parameter3}, TNode<MaybeObject>{tmp8}); CodeStubAssembler(state_).Return(tmp8); } } TF_BUILTIN(BytecodeBudgetInterruptFromCode, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Context> parameter0 = UncheckedParameter<Context>(Descriptor::kContext); USE(parameter0); TNode<FeedbackCell> parameter1 = UncheckedParameter<FeedbackCell>(Descriptor::kFeedbackCell); USE(parameter1); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); if (block0.is_used()) { ca_.Bind(&block0); CodeStubAssembler(state_).TailCallRuntime(Runtime::kBytecodeBudgetInterruptFromCode, parameter0, parameter1); } } TNode<Uint32T> FromConstexpr_ForInFeedback_constexpr_kAny_0(compiler::CodeAssemblerState* state_, ForInFeedback p_o) { compiler::CodeAssembler ca_(state_); compiler::CodeAssembler::SourcePositionScope pos_scope(&ca_); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Uint32T> tmp0; TNode<Uint32T> tmp1; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = ca_.Uint32Constant(CastToUnderlyingTypeIfEnum(p_o)); tmp1 = (TNode<Uint32T>{tmp0}); ca_.Goto(&block2); } ca_.Bind(&block2); return TNode<Uint32T>{tmp1}; } TNode<Object> ForInNextSlow_0(compiler::CodeAssemblerState* state_, TNode<Context> p_context, TNode<UintPtrT> p_slot, TNode<HeapObject> p_receiver, TNode<Object> p_key, TNode<Object> p_cacheType, TNode<HeapObject> p_maybeFeedbackVector, UpdateFeedbackMode p_guaranteedFeedback) { compiler::CodeAssembler ca_(state_); compiler::CodeAssembler::SourcePositionScope pos_scope(&ca_); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block6(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Uint32T> tmp0; TNode<Smi> tmp1; TNode<Object> tmp2; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = FromConstexpr_ForInFeedback_constexpr_kAny_0(state_, ForInFeedback::kAny); tmp1 = SmiTag_ForInFeedback_0(state_, TNode<Uint32T>{tmp0}); CodeStubAssembler(state_).UpdateFeedback(TNode<Smi>{tmp1}, TNode<HeapObject>{p_maybeFeedbackVector}, TNode<UintPtrT>{p_slot}, p_guaranteedFeedback); tmp2 = ca_.CallStub<Object>(Builtins::CallableFor(ca_.isolate(), Builtin::kForInFilter), p_context, p_key, p_receiver); ca_.Goto(&block6); } ca_.Bind(&block6); return TNode<Object>{tmp2}; } TF_BUILTIN(ForInNext, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); TNode<Context> parameter0 = UncheckedParameter<Context>(Descriptor::kContext); USE(parameter0); TNode<UintPtrT> parameter1 = UncheckedParameter<UintPtrT>(Descriptor::kSlot); USE(parameter1); TNode<HeapObject> parameter2 = UncheckedParameter<HeapObject>(Descriptor::kReceiver); USE(parameter2); TNode<FixedArray> parameter3 = UncheckedParameter<FixedArray>(Descriptor::kCacheArray); USE(parameter3); TNode<Object> parameter4 = UncheckedParameter<Object>(Descriptor::kCacheType); USE(parameter4); TNode<Smi> parameter5 = UncheckedParameter<Smi>(Descriptor::kCacheIndex); USE(parameter5); TNode<FeedbackVector> parameter6 = UncheckedParameter<FeedbackVector>(Descriptor::kFeedbackVector); USE(parameter6); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block5(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block6(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block8(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block9(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Object> tmp0; TNode<IntPtrT> tmp1; TNode<IntPtrT> tmp2; TNode<IntPtrT> tmp3; TNode<UintPtrT> tmp4; TNode<UintPtrT> tmp5; TNode<BoolT> tmp6; if (block0.is_used()) { ca_.Bind(&block0); std::tie(tmp0, tmp1, tmp2) = FieldSliceFixedArrayObjects_0(state_, TNode<FixedArray>{parameter3}).Flatten(); tmp3 = Convert_intptr_Smi_0(state_, TNode<Smi>{parameter5}); tmp4 = Convert_uintptr_intptr_0(state_, TNode<IntPtrT>{tmp3}); tmp5 = Convert_uintptr_intptr_0(state_, TNode<IntPtrT>{tmp2}); tmp6 = CodeStubAssembler(state_).UintPtrLessThan(TNode<UintPtrT>{tmp4}, TNode<UintPtrT>{tmp5}); ca_.Branch(tmp6, &block5, std::vector<compiler::Node*>{}, &block6, std::vector<compiler::Node*>{}); } TNode<IntPtrT> tmp7; TNode<IntPtrT> tmp8; TNode<Object> tmp9; TNode<IntPtrT> tmp10; TNode<Object> tmp11; TNode<Object> tmp12; TNode<IntPtrT> tmp13; TNode<Map> tmp14; TNode<BoolT> tmp15; if (block5.is_used()) { ca_.Bind(&block5); tmp7 = TimesSizeOf_Object_0(state_, TNode<IntPtrT>{tmp3}); tmp8 = CodeStubAssembler(state_).IntPtrAdd(TNode<IntPtrT>{tmp1}, TNode<IntPtrT>{tmp7}); std::tie(tmp9, tmp10) = NewReference_Object_0(state_, TNode<Object>{tmp0}, TNode<IntPtrT>{tmp8}).Flatten(); tmp11 = CodeStubAssembler(state_).LoadReference<Object>(CodeStubAssembler::Reference{tmp9, tmp10}); tmp12 = UnsafeCast_JSAny_0(state_, TNode<Context>{parameter0}, TNode<Object>{tmp11}); tmp13 = FromConstexpr_intptr_constexpr_int31_0(state_, 0); tmp14 = CodeStubAssembler(state_).LoadReference<Map>(CodeStubAssembler::Reference{parameter2, tmp13}); tmp15 = CodeStubAssembler(state_).TaggedEqual(TNode<HeapObject>{tmp14}, TNode<Object>{parameter4}); ca_.Branch(tmp15, &block8, std::vector<compiler::Node*>{}, &block9, std::vector<compiler::Node*>{}); } if (block6.is_used()) { ca_.Bind(&block6); CodeStubAssembler(state_).Unreachable(); } if (block8.is_used()) { ca_.Bind(&block8); CodeStubAssembler(state_).Return(tmp12); } TNode<Object> tmp16; if (block9.is_used()) { ca_.Bind(&block9); tmp16 = ForInNextSlow_0(state_, TNode<Context>{parameter0}, TNode<UintPtrT>{parameter1}, TNode<HeapObject>{parameter2}, TNode<Object>{tmp12}, TNode<Object>{parameter4}, TNode<HeapObject>{parameter6}, UpdateFeedbackMode::kGuaranteedFeedback); CodeStubAssembler(state_).Return(tmp16); } } TF_BUILTIN(GetImportMetaObjectBaseline, CodeStubAssembler) { compiler::CodeAssemblerState* state_ = state(); compiler::CodeAssembler ca_(state()); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Context> tmp0; TNode<Object> tmp1; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = CodeStubAssembler(state_).LoadContextFromBaseline(); tmp1 = CodeStubAssembler(state_).GetImportMetaObject(TNode<Context>{tmp0}); CodeStubAssembler(state_).Return(tmp1); } } TNode<JSArray> Cast_JSArray_2(compiler::CodeAssemblerState* state_, TNode<Context> p_context, TNode<MaybeObject> p_o, compiler::CodeAssemblerLabel* label_CastError) { compiler::CodeAssembler ca_(state_); compiler::CodeAssembler::SourcePositionScope pos_scope(&ca_); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block6(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block5(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block8(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block7(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block1(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block9(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<MaybeObject> tmp0; if (block0.is_used()) { ca_.Bind(&block0); compiler::CodeAssemblerLabel label1(&ca_); tmp0 = Cast_WeakHeapObject_0(state_, TNode<MaybeObject>{p_o}, &label1); ca_.Goto(&block5); if (label1.is_used()) { ca_.Bind(&label1); ca_.Goto(&block6); } } TNode<JSArray> tmp2; if (block6.is_used()) { ca_.Bind(&block6); compiler::CodeAssemblerLabel label3(&ca_); tmp2 = Cast_JSArray_1(state_, TNode<Context>{p_context}, TNode<Object>{ca_.UncheckedCast<Object>(p_o)}, &label3); ca_.Goto(&block7); if (label3.is_used()) { ca_.Bind(&label3); ca_.Goto(&block8); } } if (block5.is_used()) { ca_.Bind(&block5); ca_.Goto(&block1); } if (block8.is_used()) { ca_.Bind(&block8); ca_.Goto(&block1); } if (block7.is_used()) { ca_.Bind(&block7); ca_.Goto(&block9); } if (block1.is_used()) { ca_.Bind(&block1); ca_.Goto(label_CastError); } ca_.Bind(&block9); return TNode<JSArray>{tmp2}; } TNode<Smi> SmiTag_ForInFeedback_0(compiler::CodeAssemblerState* state_, TNode<Uint32T> p_value) { compiler::CodeAssembler ca_(state_); compiler::CodeAssembler::SourcePositionScope pos_scope(&ca_); compiler::CodeAssemblerParameterizedLabel<> block0(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); compiler::CodeAssemblerParameterizedLabel<> block2(&ca_, compiler::CodeAssemblerLabel::kNonDeferred); ca_.Goto(&block0); TNode<Smi> tmp0; TNode<Smi> tmp1; if (block0.is_used()) { ca_.Bind(&block0); tmp0 = CodeStubAssembler(state_).SmiFromUint32(TNode<Uint32T>{p_value}); tmp1 = (TNode<Smi>{tmp0}); ca_.Goto(&block2); } ca_.Bind(&block2); return TNode<Smi>{tmp1}; } } // namespace internal } // namespace v8