mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
MSVC: compilation works again (+minor style fixes)
This commit is contained in:
+47
-39
@@ -1,21 +1,21 @@
|
||||
#include "mruby/debug.h"
|
||||
|
||||
#include <string.h>
|
||||
#include "mruby.h"
|
||||
#include "mruby/irep.h"
|
||||
#include "mruby/debug.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
static mrb_irep_debug_info_file*
|
||||
get_file(mrb_irep_debug_info* info, uint32_t const pc)
|
||||
static mrb_irep_debug_info_file *
|
||||
get_file(mrb_irep_debug_info *info, uint32_t pc)
|
||||
{
|
||||
if(pc >= info->pc_count) { return NULL; }
|
||||
mrb_irep_debug_info_file **ret;
|
||||
int32_t count;
|
||||
|
||||
if(pc >= info->pc_count) { return NULL; }
|
||||
// get upper bound
|
||||
mrb_irep_debug_info_file** ret = info->files;
|
||||
int32_t count = info->flen;
|
||||
ret = info->files;
|
||||
count = info->flen;
|
||||
while (count > 0) {
|
||||
int32_t const step = count / 2;
|
||||
mrb_irep_debug_info_file** const it = ret + step;
|
||||
int32_t step = count / 2;
|
||||
mrb_irep_debug_info_file **it = ret + step;
|
||||
if (!(pc < (*it)->start_pos)) {
|
||||
ret = it + 1;
|
||||
count -= step + 1;
|
||||
@@ -33,7 +33,7 @@ get_file(mrb_irep_debug_info* info, uint32_t const pc)
|
||||
}
|
||||
|
||||
static mrb_debug_line_type
|
||||
select_line_type(uint16_t const* lines, size_t lines_len)
|
||||
select_line_type(const uint16_t *lines, size_t lines_len)
|
||||
{
|
||||
size_t line_count = 0;
|
||||
int prev_line = -1;
|
||||
@@ -48,7 +48,7 @@ select_line_type(uint16_t const* lines, size_t lines_len)
|
||||
}
|
||||
|
||||
char const*
|
||||
mrb_debug_get_filename(mrb_irep* irep, uint32_t pc)
|
||||
mrb_debug_get_filename(mrb_irep *irep, uint32_t pc)
|
||||
{
|
||||
if (irep && pc < irep->ilen) {
|
||||
mrb_irep_debug_info_file* f = NULL;
|
||||
@@ -61,7 +61,7 @@ mrb_debug_get_filename(mrb_irep* irep, uint32_t pc)
|
||||
}
|
||||
|
||||
int32_t
|
||||
mrb_debug_get_line(mrb_irep* irep, uint32_t const pc)
|
||||
mrb_debug_get_line(mrb_irep *irep, uint32_t pc)
|
||||
{
|
||||
if (irep && pc < irep->ilen) {
|
||||
mrb_irep_debug_info_file* f = NULL;
|
||||
@@ -76,11 +76,11 @@ mrb_debug_get_line(mrb_irep* irep, uint32_t const pc)
|
||||
|
||||
case mrb_debug_line_flat_map: {
|
||||
// get upper bound
|
||||
mrb_irep_debug_info_line* ret = f->line_flat_map;
|
||||
int32_t count = f->line_entry_count;
|
||||
mrb_irep_debug_info_line *ret = f->line_flat_map;
|
||||
uint32_t count = f->line_entry_count;
|
||||
while (count > 0) {
|
||||
int32_t const step = count / 2;
|
||||
mrb_irep_debug_info_line* const it = ret + step;
|
||||
int32_t step = count / 2;
|
||||
mrb_irep_debug_info_line *it = ret + step;
|
||||
if (!(pc < it->start_pos)) {
|
||||
ret = it + 1;
|
||||
count -= step + 1;
|
||||
@@ -89,7 +89,7 @@ mrb_debug_get_line(mrb_irep* irep, uint32_t const pc)
|
||||
|
||||
--ret;
|
||||
|
||||
mrb_assert((ret - f->line_flat_map) < f->line_entry_count);
|
||||
mrb_assert((ret - f->line_flat_map) < (ptrdiff_t)f->line_entry_count);
|
||||
mrb_assert(ret->start_pos <= pc &&
|
||||
pc < (((ret + 1 - f->line_flat_map) < f->line_entry_count)
|
||||
? (ret+1)->start_pos : irep->debug_info->pc_count));
|
||||
@@ -102,49 +102,56 @@ mrb_debug_get_line(mrb_irep* irep, uint32_t const pc)
|
||||
return -1;
|
||||
}
|
||||
|
||||
mrb_irep_debug_info*
|
||||
mrb_debug_info_alloc(mrb_state* mrb, mrb_irep* irep)
|
||||
mrb_irep_debug_info *
|
||||
mrb_debug_info_alloc(mrb_state *mrb, mrb_irep *irep)
|
||||
{
|
||||
static mrb_irep_debug_info const initial = { 0, 0, NULL };
|
||||
mrb_assert(!irep->debug_info);
|
||||
static const mrb_irep_debug_info initial = { 0, 0, NULL };
|
||||
mrb_irep_debug_info *ret;
|
||||
|
||||
mrb_irep_debug_info* const ret = (mrb_irep_debug_info*)mrb_malloc(mrb, sizeof(mrb_irep_debug_info));
|
||||
mrb_assert(!irep->debug_info);
|
||||
ret = (mrb_irep_debug_info *)mrb_malloc(mrb, sizeof(*ret));
|
||||
*ret = initial;
|
||||
irep->debug_info = ret;
|
||||
return ret;
|
||||
}
|
||||
|
||||
mrb_irep_debug_info_file*
|
||||
mrb_debug_info_append_file(mrb_state* mrb, mrb_irep* irep,
|
||||
uint32_t const start_pos, uint32_t const end_pos)
|
||||
mrb_irep_debug_info_file *
|
||||
mrb_debug_info_append_file(mrb_state *mrb, mrb_irep *irep,
|
||||
uint32_t start_pos, uint32_t end_pos)
|
||||
{
|
||||
mrb_irep_debug_info *info;
|
||||
mrb_irep_debug_info_file *ret;
|
||||
uint32_t file_pc_count;
|
||||
size_t fn_len;
|
||||
size_t len;
|
||||
uint32_t i;
|
||||
|
||||
if (!irep->debug_info) { return NULL; }
|
||||
|
||||
mrb_assert(irep->filename);
|
||||
mrb_assert(irep->lines);
|
||||
|
||||
mrb_irep_debug_info* info = irep->debug_info;
|
||||
info = irep->debug_info;
|
||||
|
||||
if (info->flen > 0 && strcmp(irep->filename, info->files[info->flen - 1]->filename) == 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
mrb_irep_debug_info_file* const ret =
|
||||
(mrb_irep_debug_info_file*)mrb_malloc(mrb, sizeof(mrb_irep_debug_info_file));
|
||||
ret = (mrb_irep_debug_info_file *)mrb_malloc(mrb, sizeof(*ret));
|
||||
info->files =
|
||||
(mrb_irep_debug_info_file*)info->files
|
||||
? mrb_realloc(mrb, info->files, sizeof(mrb_irep_debug_info_file*) * (info->flen + 1))
|
||||
: mrb_malloc(mrb, sizeof(mrb_irep_debug_info_file*));
|
||||
info->files[info->flen++] = ret;
|
||||
|
||||
uint32_t const file_pc_count = end_pos - start_pos;
|
||||
file_pc_count = end_pos - start_pos;
|
||||
|
||||
ret->start_pos = start_pos;
|
||||
info->pc_count = end_pos;
|
||||
|
||||
size_t const fn_len = strlen(irep->filename);
|
||||
fn_len = strlen(irep->filename);
|
||||
ret->filename_sym = mrb_intern2(mrb, irep->filename, fn_len);
|
||||
size_t len = 0;
|
||||
len = 0;
|
||||
ret->filename = mrb_sym2name_len(mrb, ret->filename_sym, &len);
|
||||
|
||||
ret->line_type = select_line_type(irep->lines + start_pos, end_pos - start_pos);
|
||||
@@ -154,24 +161,24 @@ mrb_debug_info_append_file(mrb_state* mrb, mrb_irep* irep,
|
||||
case mrb_debug_line_ary:
|
||||
ret->line_entry_count = file_pc_count;
|
||||
ret->line_ary = mrb_malloc(mrb, sizeof(uint16_t) * file_pc_count);
|
||||
uint32_t i;
|
||||
for(i = 0; i < file_pc_count; ++i) {
|
||||
ret->line_ary[i] = irep->lines[start_pos + i];
|
||||
}
|
||||
break;
|
||||
|
||||
case mrb_debug_line_flat_map: {
|
||||
uint16_t prev_line = 0;
|
||||
mrb_irep_debug_info_line m;
|
||||
ret->line_flat_map = mrb_malloc(mrb, sizeof(mrb_irep_debug_info_line) * 1);
|
||||
ret->line_entry_count = 0;
|
||||
uint16_t prev_line = 0;
|
||||
uint32_t i;
|
||||
for(i = 0; i < file_pc_count; ++i) {
|
||||
if(irep->lines[start_pos + i] == prev_line) { continue; }
|
||||
|
||||
ret->line_flat_map = mrb_realloc(
|
||||
mrb, ret->line_flat_map,
|
||||
sizeof(mrb_irep_debug_info_line) * (ret->line_entry_count + 1));
|
||||
mrb_irep_debug_info_line const m = { start_pos + i, irep->lines[start_pos + i] };
|
||||
m.start_pos = start_pos + i;
|
||||
m.line = irep->lines[start_pos + i];
|
||||
ret->line_flat_map[ret->line_entry_count] = m;
|
||||
|
||||
// update
|
||||
@@ -187,11 +194,12 @@ mrb_debug_info_append_file(mrb_state* mrb, mrb_irep* irep,
|
||||
}
|
||||
|
||||
void
|
||||
mrb_debug_info_free(mrb_state* mrb, mrb_irep_debug_info* d)
|
||||
mrb_debug_info_free(mrb_state *mrb, mrb_irep_debug_info *d)
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
if(!d) { return; }
|
||||
|
||||
uint32_t i;
|
||||
for(i = 0; i < d->flen; ++i) {
|
||||
mrb_assert(d->files[i]);
|
||||
mrb_free(mrb, d->files[i]->line_ptr);
|
||||
|
||||
Reference in New Issue
Block a user