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
This commit is contained in:
Mitchell Blank Jr
2012-05-19 22:40:57 -07:00
parent 4105b59568
commit 3471e2b134
5 changed files with 37 additions and 27 deletions
+6 -4
View File
@@ -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;
};
+9 -7
View File
@@ -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;
+6 -4
View File
@@ -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;
+9 -7
View File
@@ -8,15 +8,17 @@
#include <stddef.h>
#include <string.h>
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
+7 -5
View File
@@ -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) ? \