|
17 | 17 | #include "ecma-alloc.h"
|
18 | 18 | #include "ecma-builtin-helpers.h"
|
19 | 19 | #include "ecma-exceptions.h"
|
| 20 | +#include "ecma-function-object.h" |
20 | 21 | #include "ecma-globals.h"
|
21 | 22 | #include "ecma-helpers.h"
|
22 | 23 | #include "ecma-objects.h"
|
@@ -1113,9 +1114,62 @@ ecma_builtin_date_prototype_to_iso_string (ecma_value_t this_arg) /**< this argu
|
1113 | 1114 | */
|
1114 | 1115 | static ecma_completion_value_t
|
1115 | 1116 | ecma_builtin_date_prototype_to_json (ecma_value_t this_arg, /**< this argument */
|
1116 |
| - ecma_value_t arg) /**< key */ |
| 1117 | + ecma_value_t arg __attr_unused___) /**< key */ |
1117 | 1118 | {
|
1118 |
| - ECMA_BUILTIN_CP_UNIMPLEMENTED (this_arg, arg); |
| 1119 | + ecma_completion_value_t ret_value = ecma_make_empty_completion_value (); |
| 1120 | + |
| 1121 | + /* 1. */ |
| 1122 | + ECMA_TRY_CATCH (obj, |
| 1123 | + ecma_op_to_object (this_arg), |
| 1124 | + ret_value); |
| 1125 | + |
| 1126 | + /* 2. */ |
| 1127 | + ECMA_TRY_CATCH (tv, |
| 1128 | + ecma_op_to_primitive (obj, ECMA_PREFERRED_TYPE_NUMBER), |
| 1129 | + ret_value); |
| 1130 | + |
| 1131 | + /* 3. */ |
| 1132 | + if (ecma_is_value_number (tv)) |
| 1133 | + { |
| 1134 | + ecma_number_t num_value_p = *ecma_get_number_from_value (tv); |
| 1135 | + |
| 1136 | + if (ecma_number_is_nan (num_value_p) || ecma_number_is_infinity (num_value_p)) |
| 1137 | + { |
| 1138 | + ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_NULL); |
| 1139 | + } |
| 1140 | + } |
| 1141 | + |
| 1142 | + if (ecma_is_completion_value_empty (ret_value)) |
| 1143 | + { |
| 1144 | + ecma_string_t *to_iso_str_p = ecma_get_magic_string (LIT_MAGIC_STRING_TO_ISO_STRING_UL); |
| 1145 | + ecma_object_t *value_obj_p = ecma_get_object_from_value (obj); |
| 1146 | + |
| 1147 | + /* 4. */ |
| 1148 | + ECMA_TRY_CATCH (to_iso, |
| 1149 | + ecma_op_object_get (value_obj_p, to_iso_str_p), |
| 1150 | + ret_value); |
| 1151 | + |
| 1152 | + /* 5. */ |
| 1153 | + if (!ecma_op_is_callable (to_iso)) |
| 1154 | + { |
| 1155 | + ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE)); |
| 1156 | + } |
| 1157 | + /* 6. */ |
| 1158 | + else |
| 1159 | + { |
| 1160 | + ecma_object_t *to_iso_obj_p = ecma_get_object_from_value (to_iso); |
| 1161 | + ret_value = ecma_op_function_call (to_iso_obj_p, this_arg, NULL, 0); |
| 1162 | + } |
| 1163 | + |
| 1164 | + ECMA_FINALIZE (to_iso); |
| 1165 | + |
| 1166 | + ecma_deref_ecma_string (to_iso_str_p); |
| 1167 | + } |
| 1168 | + |
| 1169 | + ECMA_FINALIZE (tv); |
| 1170 | + ECMA_FINALIZE (obj); |
| 1171 | + |
| 1172 | + return ret_value; |
1119 | 1173 | } /* ecma_builtin_date_prototype_to_json */
|
1120 | 1174 |
|
1121 | 1175 | /**
|
|
0 commit comments