1425bb815Sopenharmony_ci/* 2425bb815Sopenharmony_ci * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. 3425bb815Sopenharmony_ci * Description: add debug utils. 4425bb815Sopenharmony_ci * Create: 2020/11/20 5425bb815Sopenharmony_ci */ 6425bb815Sopenharmony_ci 7425bb815Sopenharmony_ci#include <stdio.h> 8425bb815Sopenharmony_ci 9425bb815Sopenharmony_ci#include "debug-utils.h" 10425bb815Sopenharmony_ci#include "ecma-conversion.h" 11425bb815Sopenharmony_ci#include "ecma-globals.h" 12425bb815Sopenharmony_ci#include "ecma-helpers.h" 13425bb815Sopenharmony_ci#include "vm.h" 14425bb815Sopenharmony_ci 15425bb815Sopenharmony_civoid PrintObjectValueProperties(ecma_value_t value) 16425bb815Sopenharmony_ci{ 17425bb815Sopenharmony_ci if (!ecma_is_value_object(value)) { 18425bb815Sopenharmony_ci return; 19425bb815Sopenharmony_ci } 20425bb815Sopenharmony_ci ecma_object_t* object = ecma_get_object_from_value(value); 21425bb815Sopenharmony_ci PrintObjectProperties(object); 22425bb815Sopenharmony_ci} 23425bb815Sopenharmony_ci 24425bb815Sopenharmony_civoid PrintObjectProperties(ecma_object_t* object) 25425bb815Sopenharmony_ci{ 26425bb815Sopenharmony_ci jmem_cpointer_t prop_iter_cp = object->u1.property_list_cp; 27425bb815Sopenharmony_ci 28425bb815Sopenharmony_ci while (prop_iter_cp != JMEM_CP_NULL) { 29425bb815Sopenharmony_ci ecma_property_header_t *prop_iter_p = ECMA_GET_NON_NULL_POINTER (ecma_property_header_t, prop_iter_cp); 30425bb815Sopenharmony_ci JERRY_ASSERT (ECMA_PROPERTY_IS_PROPERTY_PAIR (prop_iter_p)); 31425bb815Sopenharmony_ci 32425bb815Sopenharmony_ci ecma_property_pair_t *prop_pair_p = (ecma_property_pair_t *) prop_iter_p; 33425bb815Sopenharmony_ci 34425bb815Sopenharmony_ci for (int i = 0; i < ECMA_PROPERTY_PAIR_ITEM_COUNT; i++) { 35425bb815Sopenharmony_ci if (ECMA_PROPERTY_IS_NAMED_PROPERTY (prop_iter_p->types[i])) { 36425bb815Sopenharmony_ci if (ECMA_PROPERTY_GET_NAME_TYPE (prop_iter_p->types[i]) == ECMA_DIRECT_STRING_MAGIC 37425bb815Sopenharmony_ci && prop_pair_p->names_cp[i] >= LIT_NON_INTERNAL_MAGIC_STRING__COUNT) { 38425bb815Sopenharmony_ci printf("Skipped direct string with big lit property\n"); 39425bb815Sopenharmony_ci continue; 40425bb815Sopenharmony_ci } 41425bb815Sopenharmony_ci 42425bb815Sopenharmony_ci ecma_string_t *prop_name = ecma_string_from_property_name (prop_iter_p->types[i], 43425bb815Sopenharmony_ci prop_pair_p->names_cp[i]); 44425bb815Sopenharmony_ci ecma_property_value_t prop_value_p = prop_pair_p->values[i]; 45425bb815Sopenharmony_ci 46425bb815Sopenharmony_ci ecma_string_t *string_value; 47425bb815Sopenharmony_ci if (ecma_is_value_object(prop_value_p.value)) { 48425bb815Sopenharmony_ci // Expand it more? 49425bb815Sopenharmony_ci string_value = ecma_op_to_string (prop_value_p.value); 50425bb815Sopenharmony_ci } else { 51425bb815Sopenharmony_ci string_value = ecma_op_to_string (prop_value_p.value); 52425bb815Sopenharmony_ci } 53425bb815Sopenharmony_ci // handle value_value is error value? 54425bb815Sopenharmony_ci JERRY_ASSERT (string_value != NULL); 55425bb815Sopenharmony_ci 56425bb815Sopenharmony_ci ecma_string_t* separator_str = ecma_new_ecma_string_from_utf8((const lit_utf8_byte_t *)" :> ", 4); 57425bb815Sopenharmony_ci prop_name = ecma_concat_ecma_strings(prop_name, separator_str); 58425bb815Sopenharmony_ci prop_name = ecma_concat_ecma_strings(prop_name, string_value); 59425bb815Sopenharmony_ci 60425bb815Sopenharmony_ci ECMA_STRING_TO_UTF8_STRING(prop_name, buf, buf_size); 61425bb815Sopenharmony_ci printf("PROPERTY PAIR : "); 62425bb815Sopenharmony_ci for (int ii = 0; ii < (int)buf_size; ++ii) { 63425bb815Sopenharmony_ci printf("%c", buf[ii]); 64425bb815Sopenharmony_ci } 65425bb815Sopenharmony_ci printf("\n"); 66425bb815Sopenharmony_ci 67425bb815Sopenharmony_ci ecma_deref_ecma_string(prop_name); 68425bb815Sopenharmony_ci ecma_deref_ecma_string(string_value); 69425bb815Sopenharmony_ci ecma_deref_ecma_string(separator_str); 70425bb815Sopenharmony_ci } 71425bb815Sopenharmony_ci } 72425bb815Sopenharmony_ci prop_iter_cp = prop_iter_p->next_property_cp; 73425bb815Sopenharmony_ci } 74425bb815Sopenharmony_ci} 75425bb815Sopenharmony_ci 76425bb815Sopenharmony_civoid PrintString(ecma_string_t* str) 77425bb815Sopenharmony_ci{ 78425bb815Sopenharmony_ci ECMA_STRING_TO_UTF8_STRING(str, buf, buf_size); 79425bb815Sopenharmony_ci printf("String: "); 80425bb815Sopenharmony_ci for (int i = 0; i < (int)buf_size; ++i) { 81425bb815Sopenharmony_ci printf("%c", buf[i]); 82425bb815Sopenharmony_ci } 83425bb815Sopenharmony_ci printf("\n"); 84425bb815Sopenharmony_ci} 85