/** * Dump the contents of the literal storage. */ void lit_dump_literals () { lit_record_t *rec_p; size_t i; JERRY_DLOG ("LITERALS:\n"); for (rec_p = lit_storage; rec_p != NULL; rec_p = lit_cpointer_decompress (rec_p->next)) { JERRY_DLOG ("%p ", rec_p); JERRY_DLOG ("[%3zu] ", lit_get_literal_size (rec_p)); switch (rec_p->type) { case LIT_RECORD_TYPE_CHARSET: { const lit_charset_record_t *const record_p = (const lit_charset_record_t *) rec_p; char *str = (char *) (record_p + 1); for (i = 0; i < record_p->size; ++i, ++str) { /* TODO: Support proper printing of characters which occupy more than one byte. */ JERRY_DLOG ("%c", *str); } JERRY_DLOG (" : STRING"); break; } case LIT_RECORD_TYPE_MAGIC_STR: { lit_magic_string_id_t id = (lit_magic_string_id_t) ((lit_magic_record_t *) rec_p)->magic_id; JERRY_DLOG ("%s : MAGIC STRING", lit_get_magic_string_utf8 (id)); JERRY_DLOG (" [id=%d] ", id); break; } case LIT_RECORD_TYPE_MAGIC_STR_EX: { lit_magic_string_ex_id_t id = ((lit_magic_record_t *) rec_p)->magic_id; JERRY_DLOG ("%s : EXT MAGIC STRING", lit_get_magic_string_ex_utf8 (id)); JERRY_DLOG (" [id=%d] ", id); break; } case LIT_RECORD_TYPE_NUMBER: { const lit_number_record_t *const record_p = (const lit_number_record_t *) rec_p; ecma_number_t value; memcpy (&value, &record_p->number, sizeof (ecma_number_t)); if (ecma_number_is_nan (value)) { JERRY_DLOG ("%s : NUMBER", "NaN"); } else { lit_utf8_byte_t buff[ECMA_MAX_CHARS_IN_STRINGIFIED_NUMBER + 1u]; memset (buff, 0, sizeof (buff)); lit_utf8_size_t sz = ecma_number_to_utf8_string (value, buff, sizeof (buff)); JERRY_ASSERT (sz <= ECMA_MAX_CHARS_IN_STRINGIFIED_NUMBER); JERRY_DLOG ("%s : NUMBER", buff); } break; } default: { JERRY_UNREACHABLE (); } } JERRY_DLOG ("\n"); } } /* lit_dump_literals */
/** * RegExp bytecode dumper */ void re_dump_bytecode (re_bytecode_ctx_t *bc_ctx_p) { re_bytecode_t *bytecode_p = bc_ctx_p->block_start_p; JERRY_DLOG ("%d ", re_get_value (&bytecode_p)); JERRY_DLOG ("%d ", re_get_value (&bytecode_p)); JERRY_DLOG ("%d | ", re_get_value (&bytecode_p)); re_opcode_t op; while ((op = re_get_opcode (&bytecode_p))) { switch (op) { case RE_OP_MATCH: { JERRY_DLOG ("MATCH, "); break; } case RE_OP_CHAR: { JERRY_DLOG ("CHAR "); JERRY_DLOG ("%c, ", (char) re_get_value (&bytecode_p)); break; } case RE_OP_CAPTURE_NON_GREEDY_ZERO_GROUP_START: { JERRY_DLOG ("N"); /* FALLTHRU */ } case RE_OP_CAPTURE_GREEDY_ZERO_GROUP_START: { JERRY_DLOG ("GZ_START "); JERRY_DLOG ("%d ", re_get_value (&bytecode_p)); JERRY_DLOG ("%d ", re_get_value (&bytecode_p)); JERRY_DLOG ("%d, ", re_get_value (&bytecode_p)); break; } case RE_OP_CAPTURE_GROUP_START: { JERRY_DLOG ("START "); JERRY_DLOG ("%d ", re_get_value (&bytecode_p)); JERRY_DLOG ("%d, ", re_get_value (&bytecode_p)); break; } case RE_OP_CAPTURE_NON_GREEDY_GROUP_END: { JERRY_DLOG ("N"); /* FALLTHRU */ } case RE_OP_CAPTURE_GREEDY_GROUP_END: { JERRY_DLOG ("G_END "); JERRY_DLOG ("%d ", re_get_value (&bytecode_p)); JERRY_DLOG ("%d ", re_get_value (&bytecode_p)); JERRY_DLOG ("%d ", re_get_value (&bytecode_p)); JERRY_DLOG ("%d, ", re_get_value (&bytecode_p)); break; } case RE_OP_NON_CAPTURE_NON_GREEDY_ZERO_GROUP_START: { JERRY_DLOG ("N"); /* FALLTHRU */ } case RE_OP_NON_CAPTURE_GREEDY_ZERO_GROUP_START: { JERRY_DLOG ("GZ_NC_START "); JERRY_DLOG ("%d ", re_get_value (&bytecode_p)); JERRY_DLOG ("%d ", re_get_value (&bytecode_p)); JERRY_DLOG ("%d, ", re_get_value (&bytecode_p)); break; } case RE_OP_NON_CAPTURE_GROUP_START: { JERRY_DLOG ("NC_START "); JERRY_DLOG ("%d ", re_get_value (&bytecode_p)); JERRY_DLOG ("%d, ", re_get_value (&bytecode_p)); break; } case RE_OP_NON_CAPTURE_NON_GREEDY_GROUP_END: { JERRY_DLOG ("N"); /* FALLTHRU */ } case RE_OP_NON_CAPTURE_GREEDY_GROUP_END: { JERRY_DLOG ("G_NC_END "); JERRY_DLOG ("%d ", re_get_value (&bytecode_p)); JERRY_DLOG ("%d ", re_get_value (&bytecode_p)); JERRY_DLOG ("%d ", re_get_value (&bytecode_p)); JERRY_DLOG ("%d, ", re_get_value (&bytecode_p)); break; } case RE_OP_SAVE_AT_START: { JERRY_DLOG ("RE_START "); JERRY_DLOG ("%d, ", re_get_value (&bytecode_p)); break; } case RE_OP_SAVE_AND_MATCH: { JERRY_DLOG ("RE_END, "); break; } case RE_OP_GREEDY_ITERATOR: { JERRY_DLOG ("GREEDY_ITERATOR "); JERRY_DLOG ("%d ", re_get_value (&bytecode_p)); JERRY_DLOG ("%d ", re_get_value (&bytecode_p)); JERRY_DLOG ("%d, ", re_get_value (&bytecode_p)); break; } case RE_OP_NON_GREEDY_ITERATOR: { JERRY_DLOG ("NON_GREEDY_ITERATOR "); JERRY_DLOG ("%d, ", re_get_value (&bytecode_p)); JERRY_DLOG ("%d, ", re_get_value (&bytecode_p)); JERRY_DLOG ("%d, ", re_get_value (&bytecode_p)); break; } case RE_OP_PERIOD: { JERRY_DLOG ("PERIOD "); break; } case RE_OP_ALTERNATIVE: { JERRY_DLOG ("ALTERNATIVE "); JERRY_DLOG ("%d, ", re_get_value (&bytecode_p)); break; } case RE_OP_ASSERT_START: { JERRY_DLOG ("ASSERT_START "); break; } case RE_OP_ASSERT_END: { JERRY_DLOG ("ASSERT_END "); break; } case RE_OP_ASSERT_WORD_BOUNDARY: { JERRY_DLOG ("ASSERT_WORD_BOUNDARY "); break; } case RE_OP_ASSERT_NOT_WORD_BOUNDARY: { JERRY_DLOG ("ASSERT_NOT_WORD_BOUNDARY "); break; } case RE_OP_LOOKAHEAD_POS: { JERRY_DLOG ("LOOKAHEAD_POS "); JERRY_DLOG ("%d, ", re_get_value (&bytecode_p)); break; } case RE_OP_LOOKAHEAD_NEG: { JERRY_DLOG ("LOOKAHEAD_NEG "); JERRY_DLOG ("%d, ", re_get_value (&bytecode_p)); break; } case RE_OP_BACKREFERENCE: { JERRY_DLOG ("BACKREFERENCE "); JERRY_DLOG ("%d, ", re_get_value (&bytecode_p)); break; } case RE_OP_INV_CHAR_CLASS: { JERRY_DLOG ("INV_"); /* FALLTHRU */ } case RE_OP_CHAR_CLASS: { JERRY_DLOG ("CHAR_CLASS "); uint32_t num_of_class = re_get_value (&bytecode_p); JERRY_DLOG ("%d", num_of_class); while (num_of_class) { JERRY_DLOG (" %d", re_get_value (&bytecode_p)); JERRY_DLOG ("-%d", re_get_value (&bytecode_p)); num_of_class--; } JERRY_DLOG (", "); break; } default: { JERRY_DLOG ("UNKNOWN(%d), ", (uint32_t) op); break; } } } JERRY_DLOG ("EOF\n"); } /* re_dump_bytecode */