Преглед изворни кода

GC: Add wasm_struct_obj_get_field_count API (#3236)

Liangyu Zhang пре 1 година
родитељ
комит
b11a1d157d
3 измењених фајлова са 30 додато и 0 уклоњено
  1. 10 0
      core/iwasm/common/gc/gc_object.c
  2. 10 0
      core/iwasm/common/gc/gc_object.h
  3. 10 0
      core/iwasm/include/gc_export.h

+ 10 - 0
core/iwasm/common/gc/gc_object.c

@@ -189,6 +189,16 @@ wasm_struct_obj_get_field(const WASMStructObjectRef struct_obj,
     }
 }
 
+uint32
+wasm_struct_obj_get_field_count(const WASMStructObjectRef struct_obj)
+{
+    WASMRttTypeRef rtt_type =
+        (WASMRttTypeRef)wasm_object_header((WASMObjectRef)struct_obj);
+    WASMStructType *struct_type = (WASMStructType *)rtt_type->defined_type;
+
+    return struct_type->field_count;
+}
+
 WASMArrayObjectRef
 wasm_array_obj_new_internal(void *heap_handle, WASMRttTypeRef rtt_type,
                             uint32 length, WASMValue *init_value)

+ 10 - 0
core/iwasm/common/gc/gc_object.h

@@ -157,6 +157,16 @@ void
 wasm_struct_obj_get_field(const WASMStructObjectRef struct_obj,
                           uint32 field_idx, bool sign_extend, WASMValue *value);
 
+/**
+ * Return the field count of the WASM struct object.
+ *
+ * @param struct_obj the WASM struct object
+ *
+ * @return the field count of the WASM struct object
+ */
+uint32
+wasm_struct_obj_get_field_count(const WASMStructObjectRef struct_obj);
+
 WASMArrayObjectRef
 wasm_array_obj_new_internal(void *heap_handle, WASMRttTypeRef rtt_type,
                             uint32 length, WASMValue *init_value);

+ 10 - 0
core/iwasm/include/gc_export.h

@@ -437,6 +437,16 @@ WASM_RUNTIME_API_EXTERN void
 wasm_struct_obj_get_field(const wasm_struct_obj_t obj, uint32_t field_idx,
                           bool sign_extend, wasm_value_t *value);
 
+/**
+ * Get the field count of the a struct object.
+ *
+ * @param obj the WASM struct object
+ *
+ * @return the field count of the a struct object
+ */
+WASM_RUNTIME_API_EXTERN uint32_t
+wasm_struct_obj_get_field_count(const wasm_struct_obj_t obj);
+
 /**
  * Create an array object with the index of defined type, the obj's length is
  * length, init value is init_value