%PDF- %PDF-
Direktori : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/src/wasm/ |
Current File : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/src/wasm/wasm-objects.tq |
// Copyright 2019 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @useParentTypeChecker type PodArrayOfWasmValueType extends ByteArray constexpr 'PodArray<wasm::ValueType>'; @useParentTypeChecker type ManagedWasmNativeModule extends Foreign constexpr 'Managed<wasm::NativeModule>'; extern class WasmInstanceObject extends JSObject; // Represents the context of a function that is defined through the JS or C // APIs. Corresponds to the WasmInstanceObject passed to a Wasm function // reference. // TODO(manoskouk): If V8_ENABLE_SANDBOX, we cannot encode the isolate_root as // a sandboxed pointer, because that would require having access to the isolate // root in the first place. extern class WasmApiFunctionRef extends HeapObject { native_context: NativeContext; callable: JSReceiver|Undefined; // Present when compiling JSFastApiCall wrappers, needed // to load memory start/size fields. instance: WasmInstanceObject|Undefined; suspend: Smi; // Boolean. wrapper_budget: Smi; call_origin: Smi|WasmInternalFunction|Tuple2; // The signature is needed for the generic wasm-to-js wrapper. sig: PodArrayOfWasmValueType; } // This is the representation that is used internally by wasm to represent // function references. extern class WasmInternalFunction extends HeapObject { // This is the "reference" value that must be passed along in the "instance" // register when calling the given function. It is either the target instance // (for wasm functions), or a WasmApiFunctionRef object (for functions defined // through the JS or C APIs). // For imported functions, this value equals the respective entry in // the module's imported_function_refs array. ref: WasmInstanceObject|WasmApiFunctionRef; // The external (JS) representation of this function reference. external: JSFunction|Undefined; // This field is used when the call target is null. code: Code; // The function index if ref is a WasmInstanceObject, -1 otherwise. function_index: Smi; // The call target. Tagged with the kWasmInternalFunctionCallTargetTag call_target: ExternalPointer; } extern operator '.call_target_ptr' macro LoadWasmInternalFunctionCallTargetPtr( WasmInternalFunction): RawPtr; extern class WasmFunctionData extends HeapObject { // The wasm-internal representation of this function object. internal: WasmInternalFunction; // Used for calling this function from JavaScript. wrapper_code: Code; // Encode the {promising} and {suspending} flags in a single smi. js_promise_flags: Smi; } extern class WasmExportedFunctionData extends WasmFunctionData { // This is the instance that exported the function (which in case of // imported and re-exported functions is different from the instance // where the function is defined -- for the latter see WasmFunctionData::ref). instance: WasmInstanceObject; function_index: Smi; wrapper_budget: Smi; // The next two fields are for fast calling from C++. The contract is // that they are lazily populated, and either all will be present or none. c_wrapper_code: Code; packed_args_size: Smi; canonical_type_index: Smi; sig: ExternalPointer; // wasm::FunctionSig* } extern operator '.sig_ptr' macro LoadWasmExportedFunctionDataSigPtr( WasmExportedFunctionData): RawPtr; extern class WasmJSFunctionData extends WasmFunctionData { serialized_signature: PodArrayOfWasmValueType; } extern class WasmCapiFunctionData extends WasmFunctionData { embedder_data: Foreign; // Managed<wasm::FuncData> serialized_signature: PodArrayOfWasmValueType; } extern class WasmResumeData extends HeapObject { suspender: WasmSuspenderObject; on_resume: Smi; // See wasm::OnResume enum. } extern class WasmIndirectFunctionTable extends Struct { sig_ids: ByteArray; targets: ExternalPointerArray; refs: FixedArray; size: uint32; @if(TAGGED_SIZE_8_BYTES) optional_padding: uint32; @ifnot(TAGGED_SIZE_8_BYTES) optional_padding: void; } extern class WasmContinuationObject extends HeapObject { stack: Foreign; parent: WasmContinuationObject|Undefined; jmpbuf: ExternalPointer; // Direct access to the stack's jump buffer. } extern class WasmSuspenderObject extends JSObject { continuation: WasmContinuationObject|Undefined; parent: WasmSuspenderObject|Undefined; promise: JSPromise; resume: JSObject|Undefined; reject: JSObject|Undefined; state: Smi; // 0: Inactive, 1: Active, 2: Suspended. // Number of Wasm-to-JS frames in this suspender's stack. // If the value is non-zero, this means that there are JS frames on the stack // and trying to suspend should trap. wasm_to_js_counter: uint32; @if(TAGGED_SIZE_8_BYTES) optional_padding: uint32; @ifnot(TAGGED_SIZE_8_BYTES) optional_padding: void; } extern class WasmExceptionTag extends Struct { // Note that this index is only useful for debugging purposes and it is not // unique across modules. The GC however does not allow objects without at // least one field, hence this also serves as a padding field for now. index: Smi; } extern class WasmExceptionPackage extends JSObject; extern class WasmModuleObject extends JSObject { managed_native_module: ManagedWasmNativeModule; script: Script; } extern class WasmTableObject extends JSObject { // The instance in which this WasmTableObject is defined. // This field is undefined if the global is defined outside any Wasm module, // i.e., through the JS API (WebAssembly.Table). // Because it might be undefined, we declare it as a HeapObject. instance: WasmInstanceObject|Undefined; // The entries array is at least as big as {current_length()}, but might be // bigger to make future growth more efficient. entries: FixedArray; current_length: Smi; maximum_length: Smi|HeapNumber|Undefined; dispatch_tables: FixedArray; raw_type: Smi; } extern class WasmMemoryObject extends JSObject { array_buffer: JSArrayBuffer; maximum_pages: Smi; is_memory64: Smi; // Boolean instances: WeakArrayList|Undefined; } extern class WasmGlobalObject extends JSObject { // The instance in which this WasmGlobalObject is defined. // This field is undefined if the global is defined outside any Wasm module, // i.e., through the JS API (WebAssembly.Global). // Because it might be undefined, we declare it as a HeapObject. instance: WasmInstanceObject|Undefined; untagged_buffer: JSArrayBuffer|Undefined; tagged_buffer: FixedArray|Undefined; offset: Smi; raw_type: Smi; // TODO(14034): If we encode mutability in raw_type, turn this into a boolean // accessor. is_mutable: Smi; } extern class WasmTagObject extends JSObject { serialized_signature: PodArrayOfWasmValueType; tag: HeapObject; canonical_type_index: Smi; } type WasmExportedFunction extends JSFunction; extern class AsmWasmData extends Struct { managed_native_module: ManagedWasmNativeModule; uses_bitset: HeapNumber; } extern class WasmTypeInfo extends HeapObject { // We must make sure that the StructType/ArrayType, which is allocated in // the WasmModule's "signature_zone", stays around as long as there are // HeapObjects referring to it. Short term, we simply keep a reference to // the instance, which in turn keeps the entire WasmModule alive. // TODO(jkummerow): Possible optimization: manage the "signature_zone"'s // lifetime separately by having WasmModule refer to it via std::shared_ptr, // and introduce a new link from here to just that zone using a Managed<...>. // Details: https://bit.ly/2UxD4hW native_type: ExternalPointer; type_index: uint32; @if(TAGGED_SIZE_8_BYTES) optional_padding: uint32; @ifnot(TAGGED_SIZE_8_BYTES) optional_padding: void; // Is undefined for WasmExternalFunctions referring to WasmJSFunctions. instance: WasmInstanceObject|Undefined; const supertypes_length: Smi; supertypes[supertypes_length]: Object; } extern operator '.native_type_ptr' macro LoadWasmTypeInfoNativeTypePtr( WasmTypeInfo): RawPtr; // WasmObject corresponds to data ref types which are WasmStruct and WasmArray. @abstract extern class WasmObject extends JSReceiver {} @highestInstanceTypeWithinParentClassRange extern class WasmStruct extends WasmObject {} @lowestInstanceTypeWithinParentClassRange extern class WasmArray extends WasmObject { length: uint32; @if(TAGGED_SIZE_8_BYTES) optional_padding: uint32; @ifnot(TAGGED_SIZE_8_BYTES) optional_padding: void; } class WasmStringViewIter extends HeapObject { string: String; offset: uint32; // Index into string. @if(TAGGED_SIZE_8_BYTES) optional_padding: uint32; @ifnot(TAGGED_SIZE_8_BYTES) optional_padding: void; } extern class WasmNull extends HeapObject {} extern macro WasmNullConstant(): WasmNull; const kWasmNull: WasmNull = WasmNullConstant();