From 4105b595684bb9f1e176563f819de2917d0471fd Mon Sep 17 00:00:00 2001 From: Mitchell Blank Jr Date: Sat, 19 May 2012 22:18:34 -0700 Subject: C++ compilability -- make mrb_object() macro return an RObject, not void --- include/mruby.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'include') diff --git a/include/mruby.h b/include/mruby.h index 9e7d20351..ed5fe79d2 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -81,7 +81,7 @@ typedef struct mrb_value { #define mrb_fixnum(o) (o).value.i #define mrb_float(o) (o).value.f #define mrb_symbol(o) (o).value.sym -#define mrb_object(o) (o).value.p +#define mrb_object(o) ((struct RObject *) (o).value.p) #define FIXNUM_P(o) ((o).tt == MRB_TT_FIXNUM) #define UNDEF_P(o) ((o).tt == MRB_TT_UNDEF) @@ -368,11 +368,11 @@ int mrb_gc_arena_save(mrb_state*); void mrb_gc_arena_restore(mrb_state*,int); void mrb_gc_mark(mrb_state*,struct RBasic*); #define mrb_gc_mark_value(mrb,val) do {\ - if ((val).tt >= MRB_TT_OBJECT) mrb_gc_mark((mrb), mrb_object(val));\ + if ((val).tt >= MRB_TT_OBJECT) mrb_gc_mark((mrb), (struct RBasic *) mrb_object(val));\ } while (0); void mrb_field_write_barrier(mrb_state *, struct RBasic*, struct RBasic*); #define mrb_field_write_barrier_value(mrb, obj, val) do{\ - if ((val.tt >= MRB_TT_OBJECT)) mrb_field_write_barrier((mrb), (obj), mrb_object(val));\ + if ((val.tt >= MRB_TT_OBJECT)) mrb_field_write_barrier((mrb), (obj), (struct RBasic *) mrb_object(val));\ } while (0); void mrb_write_barrier(mrb_state *, struct RBasic*); -- cgit v1.2.3 From 3471e2b1340cb84504272da26051f149f350ee94 Mon Sep 17 00:00:00 2001 From: Mitchell Blank Jr Date: Sat, 19 May 2012 22:40:57 -0700 Subject: C++ compilability - don't define types inside others The following is legal code in both C and C++: struct foo { struct bar { int a } x; int y; }; ...however in C++ it defines a type called "foo::bar" instead of "bar". Just avoid this construct altogether --- include/mruby/range.h | 10 ++++++---- src/codegen.c | 16 +++++++++------- src/gc.h | 10 ++++++---- src/pool.c | 16 +++++++++------- src/transcode.c | 12 +++++++----- 5 files changed, 37 insertions(+), 27 deletions(-) (limited to 'include') diff --git a/include/mruby/range.h b/include/mruby/range.h index b95838375..036cdd574 100644 --- a/include/mruby/range.h +++ b/include/mruby/range.h @@ -11,12 +11,14 @@ extern "C" { #endif +struct mrb_range_edges { + mrb_value beg; + mrb_value end; +}; + struct RRange { MRUBY_OBJECT_HEADER; - struct mrb_range_edges { - mrb_value beg; - mrb_value end; - } *edges; + struct mrb_range_edges *edges; int excl; }; diff --git a/src/codegen.c b/src/codegen.c index 769f9e538..263490f27 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -20,14 +20,16 @@ typedef mrb_ast_node node; typedef struct mrb_parser_state parser_state; +enum looptype { + LOOP_NORMAL, + LOOP_BLOCK, + LOOP_FOR, + LOOP_BEGIN, + LOOP_RESCUE, +} type; + struct loopinfo { - enum looptype { - LOOP_NORMAL, - LOOP_BLOCK, - LOOP_FOR, - LOOP_BEGIN, - LOOP_RESCUE, - } type; + enum looptype type; int pc1, pc2, pc3, acc; int ensure_level; struct loopinfo *prev; diff --git a/src/gc.h b/src/gc.h index 0a4bc1c51..fea761d1b 100644 --- a/src/gc.h +++ b/src/gc.h @@ -11,12 +11,14 @@ extern "C" { #endif +struct free_obj { + MRUBY_OBJECT_HEADER; + struct RBasic *next; +}; + typedef struct { union { - struct free_obj { - MRUBY_OBJECT_HEADER; - struct RBasic *next; - } free; + struct free_obj free; struct RBasic basic; struct RObject object; struct RClass klass; diff --git a/src/pool.c b/src/pool.c index a367a30a5..3cbb2b163 100644 --- a/src/pool.c +++ b/src/pool.c @@ -8,15 +8,17 @@ #include #include +struct mrb_pool_page { + struct mrb_pool_page *next; + size_t offset; + size_t len; + void *last; + char page[1]; +}; + struct mrb_pool { mrb_state *mrb; - struct mrb_pool_page { - struct mrb_pool_page *next; - size_t offset; - size_t len; - void *last; - char page[1]; - } *pages; + struct mrb_pool_page *pages; }; #undef TEST_POOL diff --git a/src/transcode.c b/src/transcode.c index 42c86d167..d6d41b667 100644 --- a/src/transcode.c +++ b/src/transcode.c @@ -65,6 +65,12 @@ allocate_converted_string(mrb_state *mrb, unsigned char *caller_dst_buf, size_t caller_dst_bufsize, size_t *dst_len_ptr); +union mrb_transcoding_state_t { /* opaque data for stateful encoding */ + void *ptr; + char ary[sizeof(double) > sizeof(void*) ? sizeof(double) : sizeof(void*)]; + double dummy_for_alignment; +}; + /* dynamic structure, one per conversion (similar to iconv_t) */ /* may carry conversion state (e.g. for iso-2022-jp) */ typedef struct mrb_transcoding { @@ -92,11 +98,7 @@ typedef struct mrb_transcoding { unsigned char *ptr; /* length: max_output */ } writebuf; - union mrb_transcoding_state_t { /* opaque data for stateful encoding */ - void *ptr; - char ary[sizeof(double) > sizeof(void*) ? sizeof(double) : sizeof(void*)]; - double dummy_for_alignment; - } state; + union mrb_transcoding_state_t state; } mrb_transcoding; #define TRANSCODING_READBUF(tc) \ ((tc)->transcoder->max_input <= (int)sizeof((tc)->readbuf.ary) ? \ -- cgit v1.2.3