|
template<typename... InterfaceArgs> |
| WasmFullDecoder (Zone *zone, const WasmModule *module, WasmEnabledFeatures enabled, WasmDetectedFeatures *detected, const FunctionBody &body, InterfaceArgs &&... interface_args) |
|
| ~WasmFullDecoder () |
|
Interface & | interface () |
|
void | Decode () |
|
void | TraceFailed () |
|
const char * | SafeOpcodeNameAt (const uint8_t *pc) |
|
WasmCodePosition | position () const |
|
uint32_t | control_depth () const |
|
Control * | control_at (uint32_t depth) |
|
uint32_t | stack_size () const |
|
Value * | stack_value (uint32_t depth) const |
|
int32_t | current_catch () const |
|
uint32_t | control_depth_of_current_catch () const |
|
uint32_t | pc_relative_offset () const |
|
bool | is_local_initialized (uint32_t local_index) |
|
void | set_local_initialized (uint32_t local_index) |
|
uint32_t | locals_initialization_stack_depth () const |
|
void | RollbackLocalsInitialization (Control *c) |
|
void | InitializeInitializedLocalsTracking (int non_defaultable_locals) |
|
void | DecodeFunctionBody () |
|
bool | HasCatchAll (Control *block) const |
|
| WasmDecoder (Zone *zone, const WasmModule *module, WasmEnabledFeatures enabled, WasmDetectedFeatures *detected, const FunctionSig *sig, bool is_shared, const uint8_t *start, const uint8_t *end, uint32_t buffer_offset=0) |
|
Zone * | zone () const |
|
uint32_t | num_locals () const |
|
base::Vector< ValueType > | local_types () const |
|
ValueType | local_type (uint32_t index) const |
|
uint32_t | DecodeLocals (const uint8_t *pc) |
|
V8_INLINE void | DecodeError (Args... args) |
|
bool | Validate (const uint8_t *pc, TagIndexImmediate &imm) |
|
bool | Validate (const uint8_t *pc, GlobalIndexImmediate &imm) |
|
bool | Validate (const uint8_t *pc, SigIndexImmediate &imm) |
|
bool | Validate (const uint8_t *pc, StructIndexImmediate &imm) |
|
bool | Validate (const uint8_t *pc, FieldImmediate &imm) |
|
bool | Validate (const uint8_t *pc, ArrayIndexImmediate &imm) |
|
bool | Validate (const uint8_t *pc, CallFunctionImmediate &imm) |
|
bool | Validate (const uint8_t *pc, CallIndirectImmediate &imm) |
|
bool | Validate (const uint8_t *pc, BranchDepthImmediate &imm, size_t control_depth) |
|
bool | Validate (const uint8_t *pc, BranchTableImmediate &imm) |
|
bool | Validate (const uint8_t *pc, WasmOpcode opcode, SimdLaneImmediate &imm) |
|
bool | Validate (const uint8_t *pc, Simd128Immediate &imm) |
|
bool | Validate (const uint8_t *pc, BlockTypeImmediate &imm) |
|
bool | Validate (const uint8_t *pc, MemoryIndexImmediate &imm) |
|
bool | Validate (const uint8_t *pc, MemoryAccessImmediate &imm) |
|
bool | Validate (const uint8_t *pc, MemoryInitImmediate &imm) |
|
bool | Validate (const uint8_t *pc, MemoryCopyImmediate &imm) |
|
bool | Validate (const uint8_t *pc, TableInitImmediate &imm) |
|
bool | Validate (const uint8_t *pc, TableCopyImmediate &imm) |
|
bool | Validate (const uint8_t *pc, StringConstImmediate &imm) |
|
bool | Validate (const uint8_t *pc, TableIndexImmediate &imm) |
|
bool | Validate (const uint8_t *pc, SelectTypeImmediate &imm) |
|
bool | Validate (const uint8_t *pc, HeapTypeImmediate &imm) |
|
bool | CanReturnCall (const FunctionSig *target_sig) |
|
bool | ValidateElementSegment (const uint8_t *pc, IndexImmediate &imm) |
|
bool | ValidateLocal (const uint8_t *pc, IndexImmediate &imm) |
|
bool | ValidateFunction (const uint8_t *pc, IndexImmediate &imm) |
|
bool | ValidateCont (const uint8_t *pc, ContIndexImmediate &imm) |
|
bool | ValidateDataSegment (const uint8_t *pc, IndexImmediate &imm) |
|
bool | ValidateValueType (const uint8_t *pc, ValueType type) |
|
bool | ValidateHeapType (const uint8_t *pc, HeapType type) |
|
| Decoder (const uint8_t *start, const uint8_t *end, uint32_t buffer_offset=0) |
|
| Decoder (const base::Vector< const uint8_t > bytes, uint32_t buffer_offset=0) |
|
| Decoder (const uint8_t *start, const uint8_t *pc, const uint8_t *end, uint32_t buffer_offset=0) |
|
virtual | ~Decoder ()=default |
|
template<typename ValidationTag > |
uint8_t | read_u8 (const uint8_t *pc, Name< ValidationTag > msg="expected 1 byte") |
|
template<typename ValidationTag > |
uint16_t | read_u16 (const uint8_t *pc, Name< ValidationTag > msg="expected 2 bytes") |
|
template<typename ValidationTag > |
uint32_t | read_u32 (const uint8_t *pc, Name< ValidationTag > msg="expected 4 bytes") |
|
template<typename ValidationTag > |
uint64_t | read_u64 (const uint8_t *pc, Name< ValidationTag > msg="expected 8 bytes") |
|
template<typename ValidationTag > |
std::pair< uint32_t, uint32_t > | read_u32v (const uint8_t *pc, Name< ValidationTag > name="LEB32") |
|
template<typename ValidationTag > |
std::pair< int32_t, uint32_t > | read_i32v (const uint8_t *pc, Name< ValidationTag > name="signed LEB32") |
|
template<typename ValidationTag > |
std::pair< uint64_t, uint32_t > | read_u64v (const uint8_t *pc, Name< ValidationTag > name="LEB64") |
|
template<typename ValidationTag > |
std::pair< int64_t, uint32_t > | read_i64v (const uint8_t *pc, Name< ValidationTag > name="signed LEB64") |
|
template<typename ValidationTag > |
std::pair< int64_t, uint32_t > | read_i33v (const uint8_t *pc, Name< ValidationTag > name="signed LEB33") |
|
template<typename ValidationTag > |
std::pair< WasmOpcode, uint32_t > | read_prefixed_opcode (const uint8_t *pc, Name< ValidationTag > name="prefixed opcode") |
|
uint8_t | consume_u8 (const char *name="uint8_t") |
|
uint8_t | consume_u8 (const char *name, ITracer *tracer) |
|
uint16_t | consume_u16 (const char *name="uint16_t") |
|
uint32_t | consume_u32 (const char *name, ITracer *tracer) |
|
uint32_t | consume_u32v (const char *name="var_uint32") |
|
uint32_t | consume_u32v (const char *name, ITracer *tracer) |
|
int32_t | consume_i32v (const char *name="var_int32") |
|
uint64_t | consume_u64v (const char *name, ITracer *tracer) |
|
int64_t | consume_i64v (const char *name="var_int64") |
|
void | consume_bytes (uint32_t size, const char *name="skip") |
|
void | consume_bytes (uint32_t size, const char *name, ITracer *tracer) |
|
uint32_t | available_bytes () const |
|
bool | checkAvailable (uint32_t size) |
|
void V8_NOINLINE V8_PRESERVE_MOST | error (const char *msg) |
|
void V8_NOINLINE V8_PRESERVE_MOST | error (const uint8_t *pc, const char *msg) |
|
void V8_NOINLINE V8_PRESERVE_MOST | error (uint32_t offset, const char *msg) |
|
template<typename... Args> |
void V8_NOINLINE V8_PRESERVE_MOST | errorf (const char *format, Args... args) |
|
template<typename... Args> |
void V8_NOINLINE V8_PRESERVE_MOST | errorf (const uint8_t *pc, const char *format, Args... args) |
|
template<typename... Args> |
void V8_NOINLINE V8_PRESERVE_MOST | errorf (uint32_t offset, const char *format, Args... args) |
|
void | traceByteRange (const uint8_t *start, const uint8_t *end) |
|
void | traceOffEnd () |
|
template<typename T , typename R = std::decay_t<T>> |
Result< R > | toResult (T &&val) |
|
void | Reset (const uint8_t *start, const uint8_t *end, uint32_t buffer_offset=0) |
|
void | Reset (base::Vector< const uint8_t > bytes, uint32_t buffer_offset=0) |
|
bool | ok () const |
|
bool | failed () const |
|
bool | more () const |
|
const WasmError & | error () const |
|
const uint8_t * | start () const |
|
const uint8_t * | pc () const |
|
uint32_t V8_INLINE | position () const |
|
uint32_t V8_INLINE | pc_offset (const uint8_t *pc) const |
|
uint32_t | pc_offset () const |
|
uint32_t | buffer_offset () const |
|
uint32_t | GetBufferRelativeOffset (uint32_t offset) const |
|
const uint8_t * | end () const |
|
void | set_end (const uint8_t *end) |
|
bool | lookahead (int offset, uint8_t expected) |
|
|
| ASSERT_TRIVIALLY_COPYABLE (Value) |
|
void | SetSucceedingCodeDynamicallyUnreachable () |
|
void | MarkMightThrow () |
|
V8_INLINE ValueType | TableAddressType (const WasmTable *table) |
|
V8_INLINE ValueType | MemoryAddressType (const WasmMemory *memory) |
|
V8_INLINE MemoryAccessImmediate | MakeMemoryAccessImmediate (uint32_t pc_offset, uint32_t max_alignment) |
|
| DECODE (Nop) |
|
| DECODE (NopForTestingUnsupportedInLiftoff) |
|
| DECODE (Block) |
|
| DECODE (Rethrow) |
|
| DECODE (Throw) |
|
| DECODE (Try) |
|
| DECODE (Catch) |
|
| DECODE (Delegate) |
|
| DECODE (CatchAll) |
|
| DECODE (TryTable) |
|
| DECODE (ThrowRef) |
|
| DECODE (BrOnNull) |
|
| DECODE (BrOnNonNull) |
|
| DECODE (Loop) |
|
| DECODE (If) |
|
| DECODE (Else) |
|
| DECODE (End) |
|
| DECODE (Select) |
|
| DECODE (SelectWithType) |
|
| DECODE (Br) |
|
| DECODE (BrIf) |
|
| DECODE (BrTable) |
|
| DECODE (Return) |
|
| DECODE (Unreachable) |
|
| DECODE (I32Const) |
|
| DECODE (I64Const) |
|
| DECODE (F32Const) |
|
| DECODE (F64Const) |
|
| DECODE (RefNull) |
|
| DECODE (RefIsNull) |
|
| DECODE (RefFunc) |
|
| DECODE (RefAsNonNull) |
|
V8_INLINE | DECODE (LocalGet) |
|
| DECODE (LocalSet) |
|
| DECODE (LocalTee) |
|
| DECODE (Drop) |
|
| DECODE (GlobalGet) |
|
| DECODE (GlobalSet) |
|
| DECODE (TableGet) |
|
| DECODE (TableSet) |
|
| DECODE (LoadMem) |
|
| DECODE (StoreMem) |
|
| DECODE (MemoryGrow) |
|
| DECODE (MemorySize) |
|
| DECODE (CallFunction) |
|
| DECODE (CallIndirect) |
|
| DECODE (ReturnCall) |
|
| DECODE (ReturnCallIndirect) |
|
| DECODE (CallRef) |
|
| DECODE (ReturnCallRef) |
|
| DECODE (RefEq) |
|
| DECODE (ContNew) |
|
| DECODE (Resume) |
|
| DECODE (Suspend) |
|
| DECODE (Numeric) |
|
| DECODE (AsmJs) |
|
| DECODE (Simd) |
|
| DECODE (Atomic) |
|
| DECODE (GC) |
|
OpcodeHandler | GetOpcodeHandler (uint8_t opcode) |
|
void | EndControl () |
|
template<typename func > |
V8_INLINE void | InitMerge (Merge< Value > *merge, uint32_t arity, func get_val) |
|
V8_INLINE int | EnsureStackArguments (int count) |
|
V8_NOINLINE V8_PRESERVE_MOST int | EnsureStackArguments_Slow (int count) |
|
V8_INLINE void | ValidateParameters (const FunctionSig *sig) |
|
V8_INLINE void | DropArgs (const FunctionSig *sig) |
|
V8_INLINE PoppedArgVector | PopArgs (const StructType *type) |
|
V8_INLINE void | DropArgs (const StructType *type) |
|
V8_INLINE PoppedArgVector | PopArgs (const FunctionSig *sig) |
|
Control * | PushControl (ControlKind kind, const BlockTypeImmediate &imm) |
|
void | PopControl () |
|
int | DecodeLoadMem (LoadType type, int prefix_len=1) |
|
int | DecodeLoadTransformMem (LoadType type, LoadTransformationKind transform, uint32_t opcode_length) |
|
int | DecodeLoadLane (WasmOpcode opcode, LoadType type, uint32_t opcode_length) |
|
int | DecodeStoreLane (WasmOpcode opcode, StoreType type, uint32_t opcode_length) |
|
bool | CheckStaticallyOutOfBounds (const WasmMemory *memory, uint64_t size, uint64_t offset) |
|
int | DecodeStoreMem (StoreType store, int prefix_len=1) |
|
uint32_t | SimdConstOp (uint32_t opcode_length) |
|
uint32_t | SimdExtractLane (WasmOpcode opcode, ValueType type, uint32_t opcode_length) |
|
uint32_t | SimdReplaceLane (WasmOpcode opcode, ValueType type, uint32_t opcode_length) |
|
uint32_t | Simd8x16ShuffleOp (uint32_t opcode_length) |
|
uint32_t | DecodeSimdOpcode (WasmOpcode opcode, uint32_t opcode_length) |
|
bool | TypeCheckAlwaysFails (Value obj, HeapType expected_type, bool null_succeeds) |
|
bool | TypeCheckAlwaysSucceeds (Value obj, HeapType type) |
|
Value | PopDescriptor (ModuleTypeIndex described_index) |
|
int | DecodeGCOpcode (WasmOpcode opcode, uint32_t opcode_length) |
|
int | ParseBrOnCast (WasmOpcode opcode, uint32_t pc_offset) |
|
int | DecodeStringNewWtf8 (unibrow::Utf8Variant variant, uint32_t opcode_length) |
|
int | DecodeStringMeasureWtf8 (unibrow::Utf8Variant variant, uint32_t opcode_length) |
|
int | DecodeStringEncodeWtf8 (unibrow::Utf8Variant variant, uint32_t opcode_length) |
|
int | DecodeStringViewWtf8Encode (unibrow::Utf8Variant variant, uint32_t opcode_length) |
|
int | DecodeStringNewWtf8Array (unibrow::Utf8Variant variant, uint32_t opcode_length) |
|
int | DecodeStringEncodeWtf8Array (unibrow::Utf8Variant variant, uint32_t opcode_length) |
|
int | DecodeStringRefOpcode (WasmOpcode opcode, uint32_t opcode_length) |
|
uint32_t | DecodeAtomicOpcode (WasmOpcode opcode, uint32_t opcode_length) |
|
unsigned | DecodeNumericOpcode (WasmOpcode opcode, uint32_t opcode_length) |
|
unsigned | DecodeAsmJsOpcode (WasmOpcode opcode, uint32_t opcode_length) |
|
V8_INLINE Value | CreateValue (ValueType type) |
|
V8_INLINE Value * | Push (Value value) |
|
V8_INLINE Value * | Push (ValueType type) |
|
void | PushMergeValues (Control *c, Merge< Value > *merge) |
|
V8_INLINE void | PushReturns (ReturnVector values) |
|
Value * | PushReturns (const FunctionSig *sig) |
|
V8_NOINLINE V8_PRESERVE_MOST void | PopTypeError (int index, Value val, const char *expected) |
|
V8_NOINLINE V8_PRESERVE_MOST void | PopTypeError (int index, Value val, std::string expected) |
|
V8_NOINLINE V8_PRESERVE_MOST void | PopTypeError (int index, Value val, ValueType expected) |
|
V8_NOINLINE V8_PRESERVE_MOST void | NotEnoughArgumentsError (int needed, int actual) |
|
V8_INLINE Value | Pop (int index, ValueType expected) |
|
V8_INLINE void | ValidateStackValue (int index, Value value, ValueType expected) |
|
V8_INLINE Value | Pop () |
|
V8_INLINE Value | Peek (int depth, int index, ValueType expected) |
|
V8_INLINE Value | Peek (int depth=0) |
|
V8_INLINE Value | Peek (ValueType expected) |
|
template<typename... ValueTypes>
requires ((std::is_same_v<ValueType, ValueTypes> || std::is_base_of_v<IndependentValueType, ValueTypes>) && ...) |
V8_INLINE std::conditional_t< sizeof...(ValueTypes)==1, Value, std::array< Value, sizeof...(ValueTypes)> > | Pop (ValueTypes... expected_types) |
|
Value | PopPackedArray (uint32_t operand_index, ValueType expected_element_type, WasmArrayAccess access) |
|
V8_INLINE void | Drop (int count=1) |
|
V8_INLINE void | Drop (const Value &) |
|
template<StackElementsCountMode strict_count, PushBranchValues push_branch_values, MergeType merge_type, RewriteStackTypes rewrite_types> |
V8_INLINE bool | TypeCheckStackAgainstMerge (Merge< Value > *merge) |
|
template<StackElementsCountMode strict_count, PushBranchValues push_branch_values, MergeType merge_type, RewriteStackTypes rewrite_types> |
V8_PRESERVE_MOST V8_NOINLINE bool | TypeCheckStackAgainstMerge_Slow (Merge< Value > *merge) |
|
template<StackElementsCountMode strict_count, MergeType merge_type> |
bool | DoReturn () |
|
int | startrel (const uint8_t *ptr) |
|
void | FallThrough () |
|
bool | TypeCheckOneArmedIf (Control *c) |
|
bool | TypeCheckFallThru () |
|
template<PushBranchValues push_branch_values, RewriteStackTypes rewrite_types> |
bool | TypeCheckBranch (Control *c) |
|
void | onFirstError () override |
|
int | BuildSimplePrototypeOperator (WasmOpcode opcode) |
|
int | BuildSimpleOperator (WasmOpcode opcode, const FunctionSig *sig) |
|
int | BuildSimpleOperator (WasmOpcode opcode, ValueType return_type, ValueType arg_type) |
|
int | BuildSimpleOperator (WasmOpcode opcode, ValueType return_type, ValueType lhs_type, ValueType rhs_type) |
|
template<typename ValidationTag, typename Interface,
DecodingMode decoding_mode = kFunctionBody>
class v8::internal::wasm::WasmFullDecoder< ValidationTag, Interface, decoding_mode >
Definition at line 2875 of file function-body-decoder-impl.h.