dump.c: adjust local variable declarations

This commit is contained in:
Yukihiro "Matz" Matsumoto
2024-04-20 09:54:55 +09:00
parent c445723fa4
commit 4a27a18807
+33 -61
View File
@@ -97,13 +97,10 @@ dump_float(mrb_state *mrb, uint8_t *buf, mrb_float f)
static size_t
get_pool_block_size(mrb_state *mrb, const mrb_irep *irep)
{
int pool_no;
size_t size = 0;
size += sizeof(uint16_t); /* plen */
size_t size = sizeof(uint16_t); /* plen */
size += irep->plen * sizeof(uint8_t); /* len(n) */
for (pool_no = 0; pool_no < irep->plen; pool_no++) {
for (int pool_no = 0; pool_no < irep->plen; pool_no++) {
int ai = mrb_gc_arena_save(mrb);
switch (irep->pool[pool_no].tt) {
@@ -159,14 +156,13 @@ get_pool_block_size(mrb_state *mrb, const mrb_irep *irep)
static ptrdiff_t
write_pool_block(mrb_state *mrb, const mrb_irep *irep, uint8_t *buf)
{
int pool_no;
uint8_t *cur = buf;
mrb_int len;
const char *ptr;
cur += uint16_to_bin(irep->plen, cur); /* number of pool */
for (pool_no = 0; pool_no < irep->plen; pool_no++) {
for (int pool_no = 0; pool_no < irep->plen; pool_no++) {
int ai = mrb_gc_arena_save(mrb);
switch (irep->pool[pool_no].tt) {
@@ -249,17 +245,14 @@ get_syms_block_size(mrb_state *mrb, const mrb_irep *irep)
static ptrdiff_t
write_syms_block(mrb_state *mrb, const mrb_irep *irep, uint8_t *buf)
{
int sym_no;
uint8_t *cur = buf;
const char *name;
cur += uint16_to_bin(irep->slen, cur); /* number of symbol */
for (sym_no = 0; sym_no < irep->slen; sym_no++) {
for (int sym_no = 0; sym_no < irep->slen; sym_no++) {
if (irep->syms[sym_no] != 0) {
mrb_int len;
name = mrb_sym_name_len(mrb, irep->syms[sym_no], &len);
const char *name = mrb_sym_name_len(mrb, irep->syms[sym_no], &len);
mrb_assert_int_fit(mrb_int, len, uint16_t, UINT16_MAX);
cur += uint16_to_bin((uint16_t)len, cur); /* length of symbol name */
@@ -278,9 +271,7 @@ write_syms_block(mrb_state *mrb, const mrb_irep *irep, uint8_t *buf)
static size_t
get_irep_record_size_1(mrb_state *mrb, const mrb_irep *irep)
{
size_t size = 0;
size += get_irep_header_size(mrb);
size_t size = get_irep_header_size(mrb);
size += get_iseq_block_size(mrb, irep);
size += get_pool_block_size(mrb, irep);
size += get_syms_block_size(mrb, irep);
@@ -290,9 +281,8 @@ get_irep_record_size_1(mrb_state *mrb, const mrb_irep *irep)
static size_t
get_irep_record_size(mrb_state *mrb, const mrb_irep *irep)
{
size_t size = 0;
size_t size = get_irep_record_size_1(mrb, irep);
size = get_irep_record_size_1(mrb, irep);
for (int irep_no = 0; irep_no < irep->rlen; irep_no++) {
size += get_irep_record_size(mrb, irep->reps[irep_no]);
}
@@ -357,8 +347,6 @@ write_section_irep_header(mrb_state *mrb, size_t section_size, uint8_t *bin)
static int
write_section_irep(mrb_state *mrb, const mrb_irep *irep, uint8_t *bin, size_t *len_p, uint8_t flags)
{
int result;
size_t rsize = 0;
uint8_t *cur = bin;
if (mrb == NULL || bin == NULL) {
@@ -367,7 +355,8 @@ write_section_irep(mrb_state *mrb, const mrb_irep *irep, uint8_t *bin, size_t *l
cur += sizeof(struct rite_section_irep_header);
result = write_irep_record(mrb, irep, cur, &rsize, flags);
size_t rsize = 0;
int result = write_irep_record(mrb, irep, cur, &rsize, flags);
if (result != MRB_DUMP_OK) {
return result;
}
@@ -381,13 +370,10 @@ write_section_irep(mrb_state *mrb, const mrb_irep *irep, uint8_t *bin, size_t *l
static size_t
get_debug_record_size(mrb_state *mrb, const mrb_irep *irep)
{
size_t ret = 0;
uint16_t f_idx;
ret += sizeof(uint32_t); /* record size */
size_t ret = sizeof(uint32_t); /* record size */
ret += sizeof(uint16_t); /* file count */
for (f_idx = 0; f_idx < irep->debug_info->flen; ++f_idx) {
for (uint16_t f_idx = 0; f_idx < irep->debug_info->flen; ++f_idx) {
mrb_irep_debug_info_file const* file = irep->debug_info->files[f_idx];
ret += sizeof(uint32_t); /* position */
@@ -462,7 +448,6 @@ static size_t
write_debug_record_1(mrb_state *mrb, const mrb_irep *irep, uint8_t *bin, mrb_sym const* filenames, uint16_t filenames_len)
{
uint8_t *cur;
ptrdiff_t ret;
cur = bin + sizeof(uint32_t); /* skip record size */
cur += uint16_to_bin(irep->debug_info->flen, cur); /* file count */
@@ -508,7 +493,7 @@ write_debug_record_1(mrb_state *mrb, const mrb_irep *irep, uint8_t *bin, mrb_sym
}
}
ret = cur - bin;
ptrdiff_t ret = cur - bin;
mrb_assert_int_fit(ptrdiff_t, ret, uint32_t, UINT32_MAX);
uint32_to_bin((uint32_t)ret, bin);
@@ -535,18 +520,15 @@ write_debug_record(mrb_state *mrb, const mrb_irep *irep, uint8_t *bin, mrb_sym c
static int
write_section_debug(mrb_state *mrb, const mrb_irep *irep, uint8_t *cur, mrb_sym const *filenames, uint16_t filenames_len)
{
size_t section_size = 0;
const uint8_t *bin = cur;
struct rite_section_debug_header *header;
size_t dlen;
if (mrb == NULL || cur == NULL) {
return MRB_DUMP_INVALID_ARGUMENT;
}
header = (struct rite_section_debug_header*)bin;
cur += sizeof(struct rite_section_debug_header);
section_size += sizeof(struct rite_section_debug_header);
struct rite_section_debug_header *header = (struct rite_section_debug_header*)bin;
size_t section_size = sizeof(struct rite_section_debug_header);
cur += section_size;
/* filename table */
cur += uint16_to_bin(filenames_len, cur);
@@ -564,7 +546,7 @@ write_section_debug(mrb_state *mrb, const mrb_irep *irep, uint8_t *cur, mrb_sym
}
/* debug records */
dlen = write_debug_record(mrb, irep, cur, filenames, filenames_len);
size_t dlen = write_debug_record(mrb, irep, cur, filenames, filenames_len);
section_size += dlen;
memcpy(header->section_ident, RITE_SECTION_DEBUG_IDENT, sizeof(header->section_ident));
@@ -600,13 +582,12 @@ static int
write_lv_sym_table(mrb_state *mrb, uint8_t **start, mrb_sym const *syms, uint32_t syms_len)
{
uint8_t *cur = *start;
const char *str;
mrb_int str_len;
cur += uint32_to_bin(syms_len, cur);
for (uint32_t i = 0; i < syms_len; i++) {
str = mrb_sym_name_len(mrb, syms[i], &str_len);
mrb_int str_len;
const char *str = mrb_sym_name_len(mrb, syms[i], &str_len);
cur += uint16_to_bin((uint16_t)str_len, cur);
memcpy(cur, str, str_len);
cur += str_len;
@@ -675,34 +656,30 @@ static int
write_section_lv(mrb_state *mrb, const mrb_irep *irep, uint8_t *start, mrb_sym const *syms, uint32_t const syms_len)
{
uint8_t *cur = start;
struct rite_section_lv_header *header;
ptrdiff_t diff;
int result = MRB_DUMP_OK;
if (mrb == NULL || cur == NULL) {
return MRB_DUMP_INVALID_ARGUMENT;
}
header = (struct rite_section_lv_header*)cur;
struct rite_section_lv_header *header = (struct rite_section_lv_header*)cur;
cur += sizeof(struct rite_section_lv_header);
result = write_lv_sym_table(mrb, &cur, syms, syms_len);
int result = write_lv_sym_table(mrb, &cur, syms, syms_len);
if (result != MRB_DUMP_OK) {
goto lv_section_exit;
return result;
}
result = write_lv_record(mrb, irep, &cur, syms, syms_len);
if (result != MRB_DUMP_OK) {
goto lv_section_exit;
return result;
}
memcpy(header->section_ident, RITE_SECTION_LV_IDENT, sizeof(header->section_ident));
diff = cur - start;
ptrdiff_t diff = cur - start;
mrb_assert_int_fit(ptrdiff_t, diff, size_t, SIZE_MAX);
uint32_to_bin((uint32_t)diff, header->section_size);
lv_section_exit:
return result;
}
@@ -726,7 +703,7 @@ static mrb_bool
debug_info_defined_p(const mrb_irep *irep)
{
if (!irep->debug_info) return FALSE;
for (int i=0; i<irep->rlen; i++) {
for (int i = 0; i < irep->rlen; i++) {
if (!debug_info_defined_p(irep->reps[i])) return FALSE;
}
return TRUE;
@@ -747,9 +724,6 @@ lv_defined_p(const mrb_irep *irep)
int
mrb_dump_irep(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, uint8_t **bin, size_t *bin_size)
{
int result = MRB_DUMP_GENERAL_FAILURE;
size_t malloc_size;
size_t section_irep_size;
size_t section_lineno_size = 0, section_lv_size = 0;
uint8_t *cur = NULL;
mrb_bool const debug_info_defined = debug_info_defined_p(irep), lv_defined = lv_defined_p(irep);
@@ -761,7 +735,7 @@ mrb_dump_irep(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, uint8_t **bin
return MRB_DUMP_GENERAL_FAILURE;
}
section_irep_size = sizeof(struct rite_section_irep_header);
size_t section_irep_size = sizeof(struct rite_section_irep_header);
section_irep_size += get_irep_record_size(mrb, irep);
/* DEBUG section size */
@@ -785,13 +759,13 @@ mrb_dump_irep(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, uint8_t **bin
section_lv_size += get_lv_section_size(mrb, irep, lv_syms, lv_syms_len);
}
malloc_size = sizeof(struct rite_binary_header) +
section_irep_size + section_lineno_size + section_lv_size +
sizeof(struct rite_binary_footer);
size_t malloc_size = sizeof(struct rite_binary_header) +
section_irep_size + section_lineno_size + section_lv_size +
sizeof(struct rite_binary_footer);
cur = *bin = (uint8_t*)mrb_malloc(mrb, malloc_size);
cur += sizeof(struct rite_binary_header);
result = write_section_irep(mrb, irep, cur, &section_irep_size, flags);
int result = write_section_irep(mrb, irep, cur, &section_irep_size, flags);
if (result != MRB_DUMP_OK) {
goto error_exit;
}
@@ -838,14 +812,13 @@ int
mrb_dump_irep_binary(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE* fp)
{
uint8_t *bin = NULL;
size_t bin_size = 0;
int result;
if (fp == NULL) {
return MRB_DUMP_INVALID_ARGUMENT;
}
result = mrb_dump_irep(mrb, irep, flags, &bin, &bin_size);
size_t bin_size;
int result = mrb_dump_irep(mrb, irep, flags, &bin, &bin_size);
if (result == MRB_DUMP_OK) {
if (fwrite(bin, sizeof(bin[0]), bin_size, fp) != bin_size) {
result = MRB_DUMP_WRITE_FAULT;
@@ -860,13 +833,12 @@ int
mrb_dump_irep_cfunc(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE *fp, const char *initname)
{
uint8_t *bin = NULL;
size_t bin_size = 0, bin_idx = 0;
int result;
if (fp == NULL || initname == NULL || initname[0] == '\0') {
return MRB_DUMP_INVALID_ARGUMENT;
}
result = mrb_dump_irep(mrb, irep, flags, &bin, &bin_size);
size_t bin_size, bin_idx = 0;
int result = mrb_dump_irep(mrb, irep, flags, &bin, &bin_size);
if (result == MRB_DUMP_OK) {
if (fprintf(fp, "#include <stdint.h>\n") < 0) { /* for uint8_t under at least Darwin */
mrb_free(mrb, bin);