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