summaryrefslogtreecommitdiffhomepage
path: root/src/debug.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2013-09-04 21:50:45 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2013-09-04 21:50:45 +0900
commit385e5d6e831e0de76a44e736340bcb867df1d1a6 (patch)
treee04ef4960455b9da9dd65de6aca8faf44205ab28 /src/debug.c
parentcc64e6e2b21373f6693f6aa903194cd1aece2cd6 (diff)
parentb8d5f0f65c2a427859622736ff3c3d7b29453313 (diff)
downloadmruby-385e5d6e831e0de76a44e736340bcb867df1d1a6.tar.gz
mruby-385e5d6e831e0de76a44e736340bcb867df1d1a6.zip
resolve conflict
Diffstat (limited to 'src/debug.c')
-rw-r--r--src/debug.c84
1 files changed, 46 insertions, 38 deletions
diff --git a/src/debug.c b/src/debug.c
index ebc8a319b..7902c09ba 100644
--- a/src/debug.c
+++ b/src/debug.c
@@ -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;
@@ -35,7 +35,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;
@@ -50,7 +50,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;
@@ -63,7 +63,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;
@@ -78,11 +78,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;
@@ -106,49 +106,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);
@@ -158,24 +165,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
@@ -191,11 +198,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);