1/*
2 * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
3 * Description: add debug utils.
4 * Create: 2020/11/20
5 */
6
7#include <stdio.h>
8
9#include "debug-utils.h"
10#include "ecma-conversion.h"
11#include "ecma-globals.h"
12#include "ecma-helpers.h"
13#include "vm.h"
14
15void PrintObjectValueProperties(ecma_value_t value)
16{
17  if (!ecma_is_value_object(value)) {
18    return;
19  }
20  ecma_object_t* object = ecma_get_object_from_value(value);
21  PrintObjectProperties(object);
22}
23
24void PrintObjectProperties(ecma_object_t* object)
25{
26  jmem_cpointer_t prop_iter_cp = object->u1.property_list_cp;
27
28  while (prop_iter_cp != JMEM_CP_NULL) {
29    ecma_property_header_t *prop_iter_p = ECMA_GET_NON_NULL_POINTER (ecma_property_header_t, prop_iter_cp);
30    JERRY_ASSERT (ECMA_PROPERTY_IS_PROPERTY_PAIR (prop_iter_p));
31
32    ecma_property_pair_t *prop_pair_p = (ecma_property_pair_t *) prop_iter_p;
33
34    for (int i = 0; i < ECMA_PROPERTY_PAIR_ITEM_COUNT; i++) {
35      if (ECMA_PROPERTY_IS_NAMED_PROPERTY (prop_iter_p->types[i])) {
36        if (ECMA_PROPERTY_GET_NAME_TYPE (prop_iter_p->types[i]) == ECMA_DIRECT_STRING_MAGIC
37            && prop_pair_p->names_cp[i] >= LIT_NON_INTERNAL_MAGIC_STRING__COUNT) {
38          printf("Skipped direct string with big lit property\n");
39          continue;
40        }
41
42        ecma_string_t *prop_name = ecma_string_from_property_name (prop_iter_p->types[i],
43                                                                   prop_pair_p->names_cp[i]);
44        ecma_property_value_t prop_value_p = prop_pair_p->values[i];
45
46        ecma_string_t *string_value;
47        if (ecma_is_value_object(prop_value_p.value)) {
48          // Expand it more?
49          string_value = ecma_op_to_string (prop_value_p.value);
50        } else {
51          string_value = ecma_op_to_string (prop_value_p.value);
52        }
53        // handle value_value is error value?
54        JERRY_ASSERT (string_value != NULL);
55
56        ecma_string_t* separator_str = ecma_new_ecma_string_from_utf8((const lit_utf8_byte_t *)" :> ", 4);
57        prop_name = ecma_concat_ecma_strings(prop_name, separator_str);
58        prop_name = ecma_concat_ecma_strings(prop_name, string_value);
59
60        ECMA_STRING_TO_UTF8_STRING(prop_name, buf, buf_size);
61        printf("PROPERTY PAIR : ");
62        for (int ii = 0; ii < (int)buf_size; ++ii) {
63          printf("%c", buf[ii]);
64        }
65	printf("\n");
66
67        ecma_deref_ecma_string(prop_name);
68        ecma_deref_ecma_string(string_value);
69        ecma_deref_ecma_string(separator_str);
70      }
71    }
72    prop_iter_cp = prop_iter_p->next_property_cp;
73  }
74}
75
76void PrintString(ecma_string_t* str)
77{
78  ECMA_STRING_TO_UTF8_STRING(str, buf, buf_size);
79  printf("String: ");
80  for (int i = 0; i < (int)buf_size; ++i) {
81    printf("%c", buf[i]);
82  }
83  printf("\n");
84}
85