Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mruby
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
mruby
Commits
f6d686ea
Commit
f6d686ea
authored
Jul 26, 2013
by
Yukihiro "Matz" Matsumoto
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1410 from Fleurer/introduce-mrb-assert
add assert check for TravisCI
parents
2d83e4b8
54ff02ac
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
85 additions
and
81 deletions
+85
-81
include/mruby.h
include/mruby.h
+7
-0
src/gc.c
src/gc.c
+53
-56
src/kernel.c
src/kernel.c
+2
-3
src/numeric.c
src/numeric.c
+1
-2
src/parse.y
src/parse.y
+11
-11
src/state.c
src/state.c
+2
-6
src/vm.c
src/vm.c
+3
-3
tasks/mruby_build_commands.rake
tasks/mruby_build_commands.rake
+5
-0
travis_config.rb
travis_config.rb
+1
-0
No files found.
include/mruby.h
View file @
f6d686ea
...
@@ -382,6 +382,13 @@ void* mrb_pool_realloc(struct mrb_pool*, void*, size_t oldlen, size_t newlen);
...
@@ -382,6 +382,13 @@ void* mrb_pool_realloc(struct mrb_pool*, void*, size_t oldlen, size_t newlen);
mrb_bool
mrb_pool_can_realloc
(
struct
mrb_pool
*
,
void
*
,
size_t
);
mrb_bool
mrb_pool_can_realloc
(
struct
mrb_pool
*
,
void
*
,
size_t
);
void
*
mrb_alloca
(
mrb_state
*
mrb
,
size_t
);
void
*
mrb_alloca
(
mrb_state
*
mrb
,
size_t
);
#ifdef MRB_DEBUG
#include <assert.h>
#define mrb_assert(p) assert(p)
#else
#define mrb_assert(p) ((void)0)
#endif
#if defined(__cplusplus)
#if defined(__cplusplus)
}
/* extern "C" { */
}
/* extern "C" { */
#endif
#endif
...
...
src/gc.c
View file @
f6d686ea
...
@@ -157,11 +157,8 @@ gettimeofday_time(void)
...
@@ -157,11 +157,8 @@ gettimeofday_time(void)
#endif
#endif
#ifdef GC_DEBUG
#ifdef GC_DEBUG
#include <assert.h>
#define gc_assert(expect) assert(expect)
#define DEBUG(x) (x)
#define DEBUG(x) (x)
#else
#else
#define gc_assert(expect) ((void)0)
#define DEBUG(x)
#define DEBUG(x)
#endif
#endif
...
@@ -471,7 +468,7 @@ mark_context(mrb_state *mrb, struct mrb_context *c)
...
@@ -471,7 +468,7 @@ mark_context(mrb_state *mrb, struct mrb_context *c)
static
void
static
void
gc_mark_children
(
mrb_state
*
mrb
,
struct
RBasic
*
obj
)
gc_mark_children
(
mrb_state
*
mrb
,
struct
RBasic
*
obj
)
{
{
gc
_assert
(
is_gray
(
obj
));
mrb
_assert
(
is_gray
(
obj
));
paint_black
(
obj
);
paint_black
(
obj
);
mrb
->
gray_list
=
obj
->
gcnext
;
mrb
->
gray_list
=
obj
->
gcnext
;
mrb_gc_mark
(
mrb
,
(
struct
RBasic
*
)
obj
->
c
);
mrb_gc_mark
(
mrb
,
(
struct
RBasic
*
)
obj
->
c
);
...
@@ -568,7 +565,7 @@ mrb_gc_mark(mrb_state *mrb, struct RBasic *obj)
...
@@ -568,7 +565,7 @@ mrb_gc_mark(mrb_state *mrb, struct RBasic *obj)
{
{
if
(
obj
==
0
)
return
;
if
(
obj
==
0
)
return
;
if
(
!
is_white
(
obj
))
return
;
if
(
!
is_white
(
obj
))
return
;
gc
_assert
((
obj
)
->
tt
!=
MRB_TT_FREE
);
mrb
_assert
((
obj
)
->
tt
!=
MRB_TT_FREE
);
add_gray_list
(
mrb
,
obj
);
add_gray_list
(
mrb
,
obj
);
}
}
...
@@ -803,11 +800,11 @@ final_marking_phase(mrb_state *mrb)
...
@@ -803,11 +800,11 @@ final_marking_phase(mrb_state *mrb)
{
{
mark_context_stack
(
mrb
,
mrb
->
root_c
);
mark_context_stack
(
mrb
,
mrb
->
root_c
);
gc_mark_gray_list
(
mrb
);
gc_mark_gray_list
(
mrb
);
gc
_assert
(
mrb
->
gray_list
==
NULL
);
mrb
_assert
(
mrb
->
gray_list
==
NULL
);
mrb
->
gray_list
=
mrb
->
atomic_gray_list
;
mrb
->
gray_list
=
mrb
->
atomic_gray_list
;
mrb
->
atomic_gray_list
=
NULL
;
mrb
->
atomic_gray_list
=
NULL
;
gc_mark_gray_list
(
mrb
);
gc_mark_gray_list
(
mrb
);
gc
_assert
(
mrb
->
gray_list
==
NULL
);
mrb
_assert
(
mrb
->
gray_list
==
NULL
);
}
}
static
void
static
void
...
@@ -907,7 +904,7 @@ incremental_gc(mrb_state *mrb, size_t limit)
...
@@ -907,7 +904,7 @@ incremental_gc(mrb_state *mrb, size_t limit)
}
}
default:
default:
/* unknown state */
/* unknown state */
gc
_assert
(
0
);
mrb
_assert
(
0
);
return
0
;
return
0
;
}
}
}
}
...
@@ -939,7 +936,7 @@ clear_all_old(mrb_state *mrb)
...
@@ -939,7 +936,7 @@ clear_all_old(mrb_state *mrb)
{
{
size_t
origin_mode
=
mrb
->
is_generational_gc_mode
;
size_t
origin_mode
=
mrb
->
is_generational_gc_mode
;
gc
_assert
(
is_generational
(
mrb
));
mrb
_assert
(
is_generational
(
mrb
));
if
(
is_major_gc
(
mrb
))
{
if
(
is_major_gc
(
mrb
))
{
incremental_gc_until
(
mrb
,
GC_STATE_NONE
);
incremental_gc_until
(
mrb
,
GC_STATE_NONE
);
}
}
...
@@ -967,7 +964,7 @@ mrb_incremental_gc(mrb_state *mrb)
...
@@ -967,7 +964,7 @@ mrb_incremental_gc(mrb_state *mrb)
}
}
if
(
mrb
->
gc_state
==
GC_STATE_NONE
)
{
if
(
mrb
->
gc_state
==
GC_STATE_NONE
)
{
gc
_assert
(
mrb
->
live
>=
mrb
->
gc_live_after_mark
);
mrb
_assert
(
mrb
->
live
>=
mrb
->
gc_live_after_mark
);
mrb
->
gc_threshold
=
(
mrb
->
gc_live_after_mark
/
100
)
*
mrb
->
gc_interval_ratio
;
mrb
->
gc_threshold
=
(
mrb
->
gc_live_after_mark
/
100
)
*
mrb
->
gc_interval_ratio
;
if
(
mrb
->
gc_threshold
<
GC_STEP_SIZE
)
{
if
(
mrb
->
gc_threshold
<
GC_STEP_SIZE
)
{
mrb
->
gc_threshold
=
GC_STEP_SIZE
;
mrb
->
gc_threshold
=
GC_STEP_SIZE
;
...
@@ -1047,14 +1044,14 @@ mrb_field_write_barrier(mrb_state *mrb, struct RBasic *obj, struct RBasic *value
...
@@ -1047,14 +1044,14 @@ mrb_field_write_barrier(mrb_state *mrb, struct RBasic *obj, struct RBasic *value
if
(
!
is_black
(
obj
))
return
;
if
(
!
is_black
(
obj
))
return
;
if
(
!
is_white
(
value
))
return
;
if
(
!
is_white
(
value
))
return
;
gc
_assert
(
!
is_dead
(
mrb
,
value
)
&&
!
is_dead
(
mrb
,
obj
));
mrb
_assert
(
!
is_dead
(
mrb
,
value
)
&&
!
is_dead
(
mrb
,
obj
));
gc
_assert
(
is_generational
(
mrb
)
||
mrb
->
gc_state
!=
GC_STATE_NONE
);
mrb
_assert
(
is_generational
(
mrb
)
||
mrb
->
gc_state
!=
GC_STATE_NONE
);
if
(
is_generational
(
mrb
)
||
mrb
->
gc_state
==
GC_STATE_MARK
)
{
if
(
is_generational
(
mrb
)
||
mrb
->
gc_state
==
GC_STATE_MARK
)
{
add_gray_list
(
mrb
,
value
);
add_gray_list
(
mrb
,
value
);
}
}
else
{
else
{
gc
_assert
(
mrb
->
gc_state
==
GC_STATE_SWEEP
);
mrb
_assert
(
mrb
->
gc_state
==
GC_STATE_SWEEP
);
paint_partial_white
(
mrb
,
obj
);
/* for never write barriers */
paint_partial_white
(
mrb
,
obj
);
/* for never write barriers */
}
}
}
}
...
@@ -1073,8 +1070,8 @@ mrb_write_barrier(mrb_state *mrb, struct RBasic *obj)
...
@@ -1073,8 +1070,8 @@ mrb_write_barrier(mrb_state *mrb, struct RBasic *obj)
{
{
if
(
!
is_black
(
obj
))
return
;
if
(
!
is_black
(
obj
))
return
;
gc
_assert
(
!
is_dead
(
mrb
,
obj
));
mrb
_assert
(
!
is_dead
(
mrb
,
obj
));
gc
_assert
(
is_generational
(
mrb
)
||
mrb
->
gc_state
!=
GC_STATE_NONE
);
mrb
_assert
(
is_generational
(
mrb
)
||
mrb
->
gc_state
!=
GC_STATE_NONE
);
paint_gray
(
obj
);
paint_gray
(
obj
);
obj
->
gcnext
=
mrb
->
atomic_gray_list
;
obj
->
gcnext
=
mrb
->
atomic_gray_list
;
mrb
->
atomic_gray_list
=
obj
;
mrb
->
atomic_gray_list
=
obj
;
...
@@ -1211,7 +1208,7 @@ change_gen_gc_mode(mrb_state *mrb, mrb_int enable)
...
@@ -1211,7 +1208,7 @@ change_gen_gc_mode(mrb_state *mrb, mrb_int enable)
{
{
if
(
is_generational
(
mrb
)
&&
!
enable
)
{
if
(
is_generational
(
mrb
)
&&
!
enable
)
{
clear_all_old
(
mrb
);
clear_all_old
(
mrb
);
gc
_assert
(
mrb
->
gc_state
==
GC_STATE_NONE
);
mrb
_assert
(
mrb
->
gc_state
==
GC_STATE_NONE
);
mrb
->
gc_full
=
FALSE
;
mrb
->
gc_full
=
FALSE
;
}
}
else
if
(
!
is_generational
(
mrb
)
&&
enable
)
{
else
if
(
!
is_generational
(
mrb
)
&&
enable
)
{
...
@@ -1323,7 +1320,7 @@ test_mrb_field_write_barrier(void)
...
@@ -1323,7 +1320,7 @@ test_mrb_field_write_barrier(void)
mrb
->
gc_state
=
GC_STATE_MARK
;
mrb
->
gc_state
=
GC_STATE_MARK
;
mrb_field_write_barrier
(
mrb
,
obj
,
value
);
mrb_field_write_barrier
(
mrb
,
obj
,
value
);
gc
_assert
(
is_gray
(
value
));
mrb
_assert
(
is_gray
(
value
));
puts
(
" in GC_STATE_SWEEP"
);
puts
(
" in GC_STATE_SWEEP"
);
...
@@ -1331,8 +1328,8 @@ test_mrb_field_write_barrier(void)
...
@@ -1331,8 +1328,8 @@ test_mrb_field_write_barrier(void)
mrb
->
gc_state
=
GC_STATE_SWEEP
;
mrb
->
gc_state
=
GC_STATE_SWEEP
;
mrb_field_write_barrier
(
mrb
,
obj
,
value
);
mrb_field_write_barrier
(
mrb
,
obj
,
value
);
gc
_assert
(
obj
->
color
&
mrb
->
current_white_part
);
mrb
_assert
(
obj
->
color
&
mrb
->
current_white_part
);
gc
_assert
(
value
->
color
&
mrb
->
current_white_part
);
mrb
_assert
(
value
->
color
&
mrb
->
current_white_part
);
puts
(
" fail with black"
);
puts
(
" fail with black"
);
...
@@ -1341,7 +1338,7 @@ test_mrb_field_write_barrier(void)
...
@@ -1341,7 +1338,7 @@ test_mrb_field_write_barrier(void)
paint_partial_white
(
mrb
,
value
);
paint_partial_white
(
mrb
,
value
);
mrb_field_write_barrier
(
mrb
,
obj
,
value
);
mrb_field_write_barrier
(
mrb
,
obj
,
value
);
gc
_assert
(
obj
->
color
&
mrb
->
current_white_part
);
mrb
_assert
(
obj
->
color
&
mrb
->
current_white_part
);
puts
(
" fail with gray"
);
puts
(
" fail with gray"
);
...
@@ -1350,7 +1347,7 @@ test_mrb_field_write_barrier(void)
...
@@ -1350,7 +1347,7 @@ test_mrb_field_write_barrier(void)
paint_gray
(
value
);
paint_gray
(
value
);
mrb_field_write_barrier
(
mrb
,
obj
,
value
);
mrb_field_write_barrier
(
mrb
,
obj
,
value
);
gc
_assert
(
is_gray
(
value
));
mrb
_assert
(
is_gray
(
value
));
{
{
...
@@ -1363,7 +1360,7 @@ test_mrb_field_write_barrier(void)
...
@@ -1363,7 +1360,7 @@ test_mrb_field_write_barrier(void)
mrb
->
gc_state
=
GC_STATE_MARK
;
mrb
->
gc_state
=
GC_STATE_MARK
;
mrb_field_write_barrier_value
(
mrb
,
obj
,
value
);
mrb_field_write_barrier_value
(
mrb
,
obj
,
value
);
gc
_assert
(
is_gray
(
mrb_basic_ptr
(
value
)));
mrb
_assert
(
is_gray
(
mrb_basic_ptr
(
value
)));
}
}
mrb_close
(
mrb
);
mrb_close
(
mrb
);
...
@@ -1383,15 +1380,15 @@ test_mrb_write_barrier(void)
...
@@ -1383,15 +1380,15 @@ test_mrb_write_barrier(void)
mrb
->
gc_state
=
GC_STATE_MARK
;
mrb
->
gc_state
=
GC_STATE_MARK
;
mrb_write_barrier
(
mrb
,
obj
);
mrb_write_barrier
(
mrb
,
obj
);
gc
_assert
(
is_gray
(
obj
));
mrb
_assert
(
is_gray
(
obj
));
gc
_assert
(
mrb
->
atomic_gray_list
==
obj
);
mrb
_assert
(
mrb
->
atomic_gray_list
==
obj
);
puts
(
" fail with gray"
);
puts
(
" fail with gray"
);
paint_gray
(
obj
);
paint_gray
(
obj
);
mrb_write_barrier
(
mrb
,
obj
);
mrb_write_barrier
(
mrb
,
obj
);
gc
_assert
(
is_gray
(
obj
));
mrb
_assert
(
is_gray
(
obj
));
mrb_close
(
mrb
);
mrb_close
(
mrb
);
}
}
...
@@ -1404,17 +1401,17 @@ test_add_gray_list(void)
...
@@ -1404,17 +1401,17 @@ test_add_gray_list(void)
puts
(
"test_add_gray_list"
);
puts
(
"test_add_gray_list"
);
change_gen_gc_mode
(
mrb
,
FALSE
);
change_gen_gc_mode
(
mrb
,
FALSE
);
gc
_assert
(
mrb
->
gray_list
==
NULL
);
mrb
_assert
(
mrb
->
gray_list
==
NULL
);
obj1
=
mrb_basic_ptr
(
mrb_str_new_cstr
(
mrb
,
"test"
));
obj1
=
mrb_basic_ptr
(
mrb_str_new_cstr
(
mrb
,
"test"
));
add_gray_list
(
mrb
,
obj1
);
add_gray_list
(
mrb
,
obj1
);
gc
_assert
(
mrb
->
gray_list
==
obj1
);
mrb
_assert
(
mrb
->
gray_list
==
obj1
);
gc
_assert
(
is_gray
(
obj1
));
mrb
_assert
(
is_gray
(
obj1
));
obj2
=
mrb_basic_ptr
(
mrb_str_new_cstr
(
mrb
,
"test"
));
obj2
=
mrb_basic_ptr
(
mrb_str_new_cstr
(
mrb
,
"test"
));
add_gray_list
(
mrb
,
obj2
);
add_gray_list
(
mrb
,
obj2
);
gc
_assert
(
mrb
->
gray_list
==
obj2
);
mrb
_assert
(
mrb
->
gray_list
==
obj2
);
gc
_assert
(
mrb
->
gray_list
->
gcnext
==
obj1
);
mrb
_assert
(
mrb
->
gray_list
->
gcnext
==
obj1
);
gc
_assert
(
is_gray
(
obj2
));
mrb
_assert
(
is_gray
(
obj2
));
mrb_close
(
mrb
);
mrb_close
(
mrb
);
}
}
...
@@ -1433,8 +1430,8 @@ test_gc_gray_mark(void)
...
@@ -1433,8 +1430,8 @@ test_gc_gray_mark(void)
obj
=
(
struct
RBasic
*
)
mrb
->
object_class
;
obj
=
(
struct
RBasic
*
)
mrb
->
object_class
;
paint_gray
(
obj
);
paint_gray
(
obj
);
gray_num
=
gc_gray_mark
(
mrb
,
obj
);
gray_num
=
gc_gray_mark
(
mrb
,
obj
);
gc
_assert
(
is_black
(
obj
));
mrb
_assert
(
is_black
(
obj
));
gc
_assert
(
gray_num
>
1
);
mrb
_assert
(
gray_num
>
1
);
puts
(
" in MRB_TT_ARRAY"
);
puts
(
" in MRB_TT_ARRAY"
);
obj_v
=
mrb_ary_new
(
mrb
);
obj_v
=
mrb_ary_new
(
mrb
);
...
@@ -1443,9 +1440,9 @@ test_gc_gray_mark(void)
...
@@ -1443,9 +1440,9 @@ test_gc_gray_mark(void)
paint_partial_white
(
mrb
,
mrb_basic_ptr
(
value_v
));
paint_partial_white
(
mrb
,
mrb_basic_ptr
(
value_v
));
mrb_ary_push
(
mrb
,
obj_v
,
value_v
);
mrb_ary_push
(
mrb
,
obj_v
,
value_v
);
gray_num
=
gc_gray_mark
(
mrb
,
mrb_basic_ptr
(
obj_v
));
gray_num
=
gc_gray_mark
(
mrb
,
mrb_basic_ptr
(
obj_v
));
gc
_assert
(
is_black
(
mrb_basic_ptr
(
obj_v
)));
mrb
_assert
(
is_black
(
mrb_basic_ptr
(
obj_v
)));
gc
_assert
(
is_gray
(
mrb_basic_ptr
(
value_v
)));
mrb
_assert
(
is_gray
(
mrb_basic_ptr
(
value_v
)));
gc
_assert
(
gray_num
==
1
);
mrb
_assert
(
gray_num
==
1
);
mrb_close
(
mrb
);
mrb_close
(
mrb
);
}
}
...
@@ -1464,13 +1461,13 @@ test_incremental_gc(void)
...
@@ -1464,13 +1461,13 @@ test_incremental_gc(void)
puts
(
" in mrb_full_gc"
);
puts
(
" in mrb_full_gc"
);
mrb_full_gc
(
mrb
);
mrb_full_gc
(
mrb
);
gc
_assert
(
mrb
->
gc_state
==
GC_STATE_NONE
);
mrb
_assert
(
mrb
->
gc_state
==
GC_STATE_NONE
);
puts
(
" in GC_STATE_NONE"
);
puts
(
" in GC_STATE_NONE"
);
incremental_gc
(
mrb
,
max
);
incremental_gc
(
mrb
,
max
);
gc
_assert
(
mrb
->
gc_state
==
GC_STATE_MARK
);
mrb
_assert
(
mrb
->
gc_state
==
GC_STATE_MARK
);
puts
(
" in GC_STATE_MARK"
);
puts
(
" in GC_STATE_MARK"
);
incremental_gc_until
(
mrb
,
GC_STATE_SWEEP
);
incremental_gc_until
(
mrb
,
GC_STATE_SWEEP
);
gc
_assert
(
mrb
->
gc_state
==
GC_STATE_SWEEP
);
mrb
_assert
(
mrb
->
gc_state
==
GC_STATE_SWEEP
);
puts
(
" in GC_STATE_SWEEP"
);
puts
(
" in GC_STATE_SWEEP"
);
page
=
mrb
->
heaps
;
page
=
mrb
->
heaps
;
...
@@ -1490,13 +1487,13 @@ test_incremental_gc(void)
...
@@ -1490,13 +1487,13 @@ test_incremental_gc(void)
total
+=
MRB_HEAP_PAGE_SIZE
;
total
+=
MRB_HEAP_PAGE_SIZE
;
}
}
gc
_assert
(
mrb
->
gray_list
==
NULL
);
mrb
_assert
(
mrb
->
gray_list
==
NULL
);
incremental_gc
(
mrb
,
max
);
incremental_gc
(
mrb
,
max
);
gc
_assert
(
mrb
->
gc_state
==
GC_STATE_SWEEP
);
mrb
_assert
(
mrb
->
gc_state
==
GC_STATE_SWEEP
);
incremental_gc
(
mrb
,
max
);
incremental_gc
(
mrb
,
max
);
gc
_assert
(
mrb
->
gc_state
==
GC_STATE_NONE
);
mrb
_assert
(
mrb
->
gc_state
==
GC_STATE_NONE
);
free
=
(
RVALUE
*
)
mrb
->
heaps
->
freelist
;
free
=
(
RVALUE
*
)
mrb
->
heaps
->
freelist
;
while
(
free
)
{
while
(
free
)
{
...
@@ -1504,30 +1501,30 @@ test_incremental_gc(void)
...
@@ -1504,30 +1501,30 @@ test_incremental_gc(void)
free
=
(
RVALUE
*
)
free
->
as
.
free
.
next
;
free
=
(
RVALUE
*
)
free
->
as
.
free
.
next
;
}
}
gc
_assert
(
mrb
->
live
==
live
);
mrb
_assert
(
mrb
->
live
==
live
);
gc
_assert
(
mrb
->
live
==
total
-
freed
);
mrb
_assert
(
mrb
->
live
==
total
-
freed
);
puts
(
"test_incremental_gc(gen)"
);
puts
(
"test_incremental_gc(gen)"
);
incremental_gc_until
(
mrb
,
GC_STATE_SWEEP
);
incremental_gc_until
(
mrb
,
GC_STATE_SWEEP
);
change_gen_gc_mode
(
mrb
,
TRUE
);
change_gen_gc_mode
(
mrb
,
TRUE
);
gc
_assert
(
mrb
->
gc_full
==
FALSE
);
mrb
_assert
(
mrb
->
gc_full
==
FALSE
);
gc
_assert
(
mrb
->
gc_state
==
GC_STATE_NONE
);
mrb
_assert
(
mrb
->
gc_state
==
GC_STATE_NONE
);
puts
(
" in minor"
);
puts
(
" in minor"
);
gc
_assert
(
is_minor_gc
(
mrb
));
mrb
_assert
(
is_minor_gc
(
mrb
));
gc
_assert
(
mrb
->
majorgc_old_threshold
>
0
);
mrb
_assert
(
mrb
->
majorgc_old_threshold
>
0
);
mrb
->
majorgc_old_threshold
=
0
;
mrb
->
majorgc_old_threshold
=
0
;
mrb_incremental_gc
(
mrb
);
mrb_incremental_gc
(
mrb
);
gc
_assert
(
mrb
->
gc_full
==
TRUE
);
mrb
_assert
(
mrb
->
gc_full
==
TRUE
);
gc
_assert
(
mrb
->
gc_state
==
GC_STATE_NONE
);
mrb
_assert
(
mrb
->
gc_state
==
GC_STATE_NONE
);
puts
(
" in major"
);
puts
(
" in major"
);
gc
_assert
(
is_major_gc
(
mrb
));
mrb
_assert
(
is_major_gc
(
mrb
));
do
{
do
{
mrb_incremental_gc
(
mrb
);
mrb_incremental_gc
(
mrb
);
}
while
(
mrb
->
gc_state
!=
GC_STATE_NONE
);
}
while
(
mrb
->
gc_state
!=
GC_STATE_NONE
);
gc
_assert
(
mrb
->
gc_full
==
FALSE
);
mrb
_assert
(
mrb
->
gc_full
==
FALSE
);
mrb_close
(
mrb
);
mrb_close
(
mrb
);
}
}
...
@@ -1542,12 +1539,12 @@ test_incremental_sweep_phase(void)
...
@@ -1542,12 +1539,12 @@ test_incremental_sweep_phase(void)
add_heap
(
mrb
);
add_heap
(
mrb
);
mrb
->
sweeps
=
mrb
->
heaps
;
mrb
->
sweeps
=
mrb
->
heaps
;
gc
_assert
(
mrb
->
heaps
->
next
->
next
==
NULL
);
mrb
_assert
(
mrb
->
heaps
->
next
->
next
==
NULL
);
gc
_assert
(
mrb
->
free_heaps
->
next
->
next
==
NULL
);
mrb
_assert
(
mrb
->
free_heaps
->
next
->
next
==
NULL
);
incremental_sweep_phase
(
mrb
,
MRB_HEAP_PAGE_SIZE
*
3
);
incremental_sweep_phase
(
mrb
,
MRB_HEAP_PAGE_SIZE
*
3
);
gc
_assert
(
mrb
->
heaps
->
next
==
NULL
);
mrb
_assert
(
mrb
->
heaps
->
next
==
NULL
);
gc
_assert
(
mrb
->
heaps
==
mrb
->
free_heaps
);
mrb
_assert
(
mrb
->
heaps
==
mrb
->
free_heaps
);
mrb_close
(
mrb
);
mrb_close
(
mrb
);
}
}
...
...
src/kernel.c
View file @
f6d686ea
...
@@ -4,8 +4,6 @@
...
@@ -4,8 +4,6 @@
** See Copyright Notice in mruby.h
** See Copyright Notice in mruby.h
*/
*/
#include <assert.h>
#include "mruby.h"
#include "mruby.h"
#include "mruby/array.h"
#include "mruby/array.h"
#include "mruby/class.h"
#include "mruby/class.h"
...
@@ -573,12 +571,13 @@ get_valid_iv_sym(mrb_state *mrb, mrb_value iv_name)
...
@@ -573,12 +571,13 @@ get_valid_iv_sym(mrb_state *mrb, mrb_value iv_name)
{
{
mrb_sym
iv_name_id
;
mrb_sym
iv_name_id
;
mrb_assert
(
mrb_symbol_p
(
iv_name
)
||
mrb_string_p
(
iv_name
));
if
(
mrb_string_p
(
iv_name
))
{
if
(
mrb_string_p
(
iv_name
))
{
iv_name_id
=
mrb_intern_cstr
(
mrb
,
RSTRING_PTR
(
iv_name
));
iv_name_id
=
mrb_intern_cstr
(
mrb
,
RSTRING_PTR
(
iv_name
));
valid_iv_name
(
mrb
,
iv_name_id
,
RSTRING_PTR
(
iv_name
),
RSTRING_LEN
(
iv_name
));
valid_iv_name
(
mrb
,
iv_name_id
,
RSTRING_PTR
(
iv_name
),
RSTRING_LEN
(
iv_name
));
}
}
else
{
else
{
assert
(
mrb_symbol_p
(
iv_name
));
iv_name_id
=
mrb_symbol
(
iv_name
);
iv_name_id
=
mrb_symbol
(
iv_name
);
check_iv_name
(
mrb
,
iv_name_id
);
check_iv_name
(
mrb
,
iv_name_id
);
}
}
...
...
src/numeric.c
View file @
f6d686ea
...
@@ -4,7 +4,6 @@
...
@@ -4,7 +4,6 @@
** See Copyright Notice in mruby.h
** See Copyright Notice in mruby.h
*/
*/
#include <assert.h>
#include <float.h>
#include <float.h>
#if defined(__FreeBSD__) && __FreeBSD__ < 4
#if defined(__FreeBSD__) && __FreeBSD__ < 4
# include <floatingpoint.h>
# include <floatingpoint.h>
...
@@ -782,7 +781,7 @@ fixdivmod(mrb_state *mrb, mrb_int x, mrb_int y, mrb_int *divp, mrb_int *modp)
...
@@ -782,7 +781,7 @@ fixdivmod(mrb_state *mrb, mrb_int x, mrb_int y, mrb_int *divp, mrb_int *modp)
{
{
mrb_int
div
,
mod
;
mrb_int
div
,
mod
;
/* TODO: add assert(y != 0) to make sure */
/* TODO: add
mrb_
assert(y != 0) to make sure */
if
(
y
<
0
)
{
if
(
y
<
0
)
{
if
(
x
<
0
)
if
(
x
<
0
)
...
...
src/parse.y
View file @
f6d686ea
/*
/*
** parse.y - mruby parser
** parse.y - mruby parser
**
**
** See Copyright Notice in mruby.h
** See Copyright Notice in mruby.h
*/
*/
...
@@ -272,7 +272,7 @@ new_scope(parser_state *p, node *body)
...
@@ -272,7 +272,7 @@ new_scope(parser_state *p, node *body)
static node*
static node*
new_begin(parser_state *p, node *body)
new_begin(parser_state *p, node *body)
{
{
if (body)
if (body)
return list2((node*)NODE_BEGIN, body);
return list2((node*)NODE_BEGIN, body);
return cons((node*)NODE_BEGIN, 0);
return cons((node*)NODE_BEGIN, 0);
}
}
...
@@ -909,7 +909,7 @@ parsing_heredoc_inf(parser_state *p)
...
@@ -909,7 +909,7 @@ parsing_heredoc_inf(parser_state *p)
node *nd = p->parsing_heredoc;
node *nd = p->parsing_heredoc;
if (nd == NULL)
if (nd == NULL)
return NULL;
return NULL;
/* assert(nd->car->car == NODE_HEREDOC); */
/*
mrb_
assert(nd->car->car == NODE_HEREDOC); */
return (parser_heredoc_info*)nd->car->cdr;
return (parser_heredoc_info*)nd->car->cdr;
}
}
...
@@ -2744,7 +2744,7 @@ var_ref : variable
...
@@ -2744,7 +2744,7 @@ var_ref : variable
{
{
$$ = var_reference(p, $1);
$$ = var_reference(p, $1);
}
}
| keyword_nil
| keyword_nil
{
{
$$ = new_nil(p);
$$ = new_nil(p);
}
}
...
@@ -3408,7 +3408,7 @@ scan_oct(const int *start, int len, int *retlen)
...
@@ -3408,7 +3408,7 @@ scan_oct(const int *start, int len, int *retlen)
const int *s = start;
const int *s = start;
int retval = 0;
int retval = 0;
/* assert(len <= 3) */
/*
mrb_
assert(len <= 3) */
while (len-- && *s >= '0' && *s <= '7') {
while (len-- && *s >= '0' && *s <= '7') {
retval <<= 3;
retval <<= 3;
retval |= *s++ - '0';
retval |= *s++ - '0';
...
@@ -3426,7 +3426,7 @@ scan_hex(const int *start, int len, int *retlen)
...
@@ -3426,7 +3426,7 @@ scan_hex(const int *start, int len, int *retlen)
register int retval = 0;
register int retval = 0;
char *tmp;
char *tmp;
/* assert(len <= 2) */
/*
mrb_
assert(len <= 2) */
while (len-- && *s && (tmp = (char*)strchr(hexdigit, *s))) {
while (len-- && *s && (tmp = (char*)strchr(hexdigit, *s))) {
retval <<= 4;
retval <<= 4;
retval |= (tmp - hexdigit) & 15;
retval |= (tmp - hexdigit) & 15;
...
@@ -3686,7 +3686,7 @@ parse_string(parser_state *p)
...
@@ -3686,7 +3686,7 @@ parse_string(parser_state *p)
tokadd(p, c);
tokadd(p, c);
}
}
tokfix(p);
tokfix(p);
p->lstate = EXPR_END;
p->lstate = EXPR_END;
...
@@ -3731,7 +3731,7 @@ parse_string(parser_state *p)
...
@@ -3731,7 +3731,7 @@ parse_string(parser_state *p)
yylval.nd = new_str(p, tok(p), toklen(p));
yylval.nd = new_str(p, tok(p), toklen(p));
return tSTRING;
return tSTRING;
}
}
static int
static int
heredoc_identifier(parser_state *p)
heredoc_identifier(parser_state *p)
...
@@ -4813,7 +4813,7 @@ parser_yylex(parser_state *p)
...
@@ -4813,7 +4813,7 @@ parser_yylex(parser_state *p)
pushback(p, c);
pushback(p, c);
if (last_state == EXPR_FNAME) goto gvar;
if (last_state == EXPR_FNAME) goto gvar;
tokfix(p);
tokfix(p);
yylval.nd = new_nth_ref(p, atoi(tok(p)));
yylval.nd = new_nth_ref(p, atoi(tok(p)));
return tNTH_REF;
return tNTH_REF;
default:
default:
...
@@ -5176,7 +5176,7 @@ parser_state*
...
@@ -5176,7 +5176,7 @@ parser_state*
mrb_parse_file(mrb_state *mrb, FILE *f, mrbc_context *c)
mrb_parse_file(mrb_state *mrb, FILE *f, mrbc_context *c)
{
{
parser_state *p;
parser_state *p;
p = mrb_parser_new(mrb);
p = mrb_parser_new(mrb);
if (!p) return 0;
if (!p) return 0;
p->s = p->send = NULL;
p->s = p->send = NULL;
...
@@ -5561,7 +5561,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
...
@@ -5561,7 +5561,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
printf("NODE_CALL:\n");
printf("NODE_CALL:\n");
parser_dump(mrb, tree->car, offset+1);
parser_dump(mrb, tree->car, offset+1);
dump_prefix(offset+1);
dump_prefix(offset+1);
printf("method='%s' (%d)\n",
printf("method='%s' (%d)\n",
mrb_sym2name(mrb, sym(tree->cdr->car)),
mrb_sym2name(mrb, sym(tree->cdr->car)),
(int)(intptr_t)tree->cdr->car);
(int)(intptr_t)tree->cdr->car);
tree = tree->cdr->cdr->car;
tree = tree->cdr->cdr->car;
...
...
src/state.c
View file @
f6d686ea
...
@@ -21,10 +21,6 @@ inspect_main(mrb_state *mrb, mrb_value mod)
...
@@ -21,10 +21,6 @@ inspect_main(mrb_state *mrb, mrb_value mod)
return
mrb_str_new
(
mrb
,
"main"
,
4
);
return
mrb_str_new
(
mrb
,
"main"
,
4
);
}
}
#ifdef MRB_NAN_BOXING
#include <assert.h>
#endif
mrb_state
*
mrb_state
*
mrb_open_allocf
(
mrb_allocf
f
,
void
*
ud
)
mrb_open_allocf
(
mrb_allocf
f
,
void
*
ud
)
{
{
...
@@ -33,7 +29,7 @@ mrb_open_allocf(mrb_allocf f, void *ud)
...
@@ -33,7 +29,7 @@ mrb_open_allocf(mrb_allocf f, void *ud)
mrb_state
*
mrb
;
mrb_state
*
mrb
;
#ifdef MRB_NAN_BOXING
#ifdef MRB_NAN_BOXING
assert
(
sizeof
(
void
*
)
==
4
);
mrb_
assert
(
sizeof
(
void
*
)
==
4
);
#endif
#endif
mrb
=
(
mrb_state
*
)(
f
)(
NULL
,
NULL
,
sizeof
(
mrb_state
),
ud
);
mrb
=
(
mrb_state
*
)(
f
)(
NULL
,
NULL
,
sizeof
(
mrb_state
),
ud
);
...
@@ -192,7 +188,7 @@ mrb_value
...
@@ -192,7 +188,7 @@ mrb_value
mrb_top_self
(
mrb_state
*
mrb
)
mrb_top_self
(
mrb_state
*
mrb
)
{
{
if
(
!
mrb
->
top_self
)
{
if
(
!
mrb
->
top_self
)
{
mrb
->
top_self
=
(
struct
RObject
*
)
mrb_obj_alloc
(
mrb
,
MRB_TT_OBJECT
,
mrb
->
object_class
);
mrb
->
top_self
=
(
struct
RObject
*
)
mrb_obj_alloc
(
mrb
,
MRB_TT_OBJECT
,
mrb
->
object_class
);
mrb_define_singleton_method
(
mrb
,
mrb
->
top_self
,
"inspect"
,
inspect_main
,
MRB_ARGS_NONE
());
mrb_define_singleton_method
(
mrb
,
mrb
->
top_self
,
"inspect"
,
inspect_main
,
MRB_ARGS_NONE
());
mrb_define_singleton_method
(
mrb
,
mrb
->
top_self
,
"to_s"
,
inspect_main
,
MRB_ARGS_NONE
());
mrb_define_singleton_method
(
mrb
,
mrb
->
top_self
,
"to_s"
,
inspect_main
,
MRB_ARGS_NONE
());
}
}
...
...
src/vm.c
View file @
f6d686ea
...
@@ -92,12 +92,12 @@ stack_init(mrb_state *mrb)
...
@@ -92,12 +92,12 @@ stack_init(mrb_state *mrb)
{
{
struct
mrb_context
*
c
=
mrb
->
c
;
struct
mrb_context
*
c
=
mrb
->
c
;
/* assert(mrb->stack == NULL); */
/*
mrb_
assert(mrb->stack == NULL); */
c
->
stbase
=
(
mrb_value
*
)
mrb_calloc
(
mrb
,
STACK_INIT_SIZE
,
sizeof
(
mrb_value
));
c
->
stbase
=
(
mrb_value
*
)
mrb_calloc
(
mrb
,
STACK_INIT_SIZE
,
sizeof
(
mrb_value
));
c
->
stend
=
c
->
stbase
+
STACK_INIT_SIZE
;
c
->
stend
=
c
->
stbase
+
STACK_INIT_SIZE
;
c
->
stack
=
c
->
stbase
;
c
->
stack
=
c
->
stbase
;
/* assert(ci == NULL); */
/*
mrb_
assert(ci == NULL); */
c
->
cibase
=
(
mrb_callinfo
*
)
mrb_calloc
(
mrb
,
CALLINFO_INIT_SIZE
,
sizeof
(
mrb_callinfo
));
c
->
cibase
=
(
mrb_callinfo
*
)
mrb_calloc
(
mrb
,
CALLINFO_INIT_SIZE
,
sizeof
(
mrb_callinfo
));
c
->
ciend
=
c
->
cibase
+
CALLINFO_INIT_SIZE
;
c
->
ciend
=
c
->
cibase
+
CALLINFO_INIT_SIZE
;
c
->
ci
=
c
->
cibase
;
c
->
ci
=
c
->
cibase
;
...
@@ -544,7 +544,7 @@ void mrb_gv_val_set(mrb_state *mrb, mrb_sym sym, mrb_value val);
...
@@ -544,7 +544,7 @@ void mrb_gv_val_set(mrb_state *mrb, mrb_sym sym, mrb_value val);
mrb_value
mrb_value
mrb_run
(
mrb_state
*
mrb
,
struct
RProc
*
proc
,
mrb_value
self
)
mrb_run
(
mrb_state
*
mrb
,
struct
RProc
*
proc
,
mrb_value
self
)
{
{
/* assert(mrb_proc_cfunc_p(proc)) */
/*
mrb_
assert(mrb_proc_cfunc_p(proc)) */
mrb_irep
*
irep
=
proc
->
body
.
irep
;
mrb_irep
*
irep
=
proc
->
body
.
irep
;
mrb_code
*
pc
=
irep
->
iseq
;
mrb_code
*
pc
=
irep
->
iseq
;
mrb_value
*
pool
=
irep
->
pool
;
mrb_value
*
pool
=
irep
->
pool
;
...
...
tasks/mruby_build_commands.rake
View file @
f6d686ea
...
@@ -262,6 +262,11 @@ module MRuby
...
@@ -262,6 +262,11 @@ module MRuby
IO
.
popen
(
"
#{
filename
@command
}
#{
@compile_options
%
{
:funcname
=>
funcname
}
}
#{
filename
(
infiles
).
join
(
' '
)
}
"
,
'r+'
)
do
|
io
|
IO
.
popen
(
"
#{
filename
@command
}
#{
@compile_options
%
{
:funcname
=>
funcname
}
}
#{
filename
(
infiles
).
join
(
' '
)
}
"
,
'r+'
)
do
|
io
|
out
.
puts
io
.
read
out
.
puts
io
.
read
end
end
# if mrbc execution fail, drop the file
if
not
$?
.
exitstatus
File
.
delete
(
out
.
path
)
exit
-
1
end
end
end
end
end
...
...
travis_config.rb
View file @
f6d686ea
...
@@ -3,4 +3,5 @@ MRuby::Build.new do |conf|
...
@@ -3,4 +3,5 @@ MRuby::Build.new do |conf|
# include all core GEMs
# include all core GEMs
conf
.
gembox
'full-core'
conf
.
gembox
'full-core'
conf
.
cc
.
defines
=
%w(MRB_DEBUG)
end
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment