diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/mrbconf.h | 10 | ||||
| -rw-r--r-- | include/mruby.h | 35 | ||||
| -rw-r--r-- | include/mruby/compile.h | 9 | ||||
| -rw-r--r-- | include/mruby/gc.h | 13 | ||||
| -rw-r--r-- | include/mruby/hash.h | 2 | ||||
| -rw-r--r-- | include/mruby/irep.h | 12 | ||||
| -rw-r--r-- | include/mruby/khash.h | 70 | ||||
| -rw-r--r-- | include/mruby/range.h | 2 | ||||
| -rw-r--r-- | include/mruby/string.h | 8 | ||||
| -rw-r--r-- | include/mruby/value.h | 12 | ||||
| -rw-r--r-- | include/mruby/version.h | 27 |
11 files changed, 115 insertions, 85 deletions
diff --git a/include/mrbconf.h b/include/mrbconf.h index a10a1d04e..bcef1b1bd 100644 --- a/include/mrbconf.h +++ b/include/mrbconf.h @@ -38,9 +38,6 @@ /* initial size for IV khash; ignored when MRB_USE_IV_SEGLIST is set */ //#define MRB_IVHASH_INIT_SIZE 8 -/* initial size for IREP array */ -//#define MRB_IREP_ARRAY_INIT_SIZE (256u) - /* turn off generational GC by default */ //#define MRB_GC_TURN_OFF_GENERATIONAL @@ -56,8 +53,11 @@ /* initial minimum size for string buffer */ //#define MRB_STR_BUF_MIN_SIZE 128 -/* array size for parser buffer */ -//#define MRB_PARSER_BUF_SIZE 1024 +/* arena size */ +//#define MRB_GC_ARENA_SIZE 100 + +/* fixed size GC arena */ +//#define MRB_GC_FIXED_ARENA /* -DDISABLE_XXXX to drop following features */ //#define DISABLE_STDIO /* use of stdio */ diff --git a/include/mruby.h b/include/mruby.h index bf42b76fd..10f97a491 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -1,7 +1,7 @@ /* ** mruby - An embeddable Ruby implementation ** -** Copyright (c) mruby developers 2010-2013 +** Copyright (c) mruby developers 2010-2014 ** ** Permission is hereby granted, free of charge, to any person obtaining ** a copy of this software and associated documentation files (the @@ -41,18 +41,19 @@ extern "C" { typedef uint32_t mrb_code; typedef uint32_t mrb_aspec; +struct mrb_irep; struct mrb_state; typedef void* (*mrb_allocf) (struct mrb_state *mrb, void*, size_t, void *ud); -#ifndef MRB_ARENA_SIZE -#define MRB_ARENA_SIZE 100 +#ifndef MRB_GC_ARENA_SIZE +#define MRB_GC_ARENA_SIZE 100 #endif typedef struct { mrb_sym mid; struct RProc *proc; - int stackidx; + mrb_value *stackent; int nregs; int argc; mrb_code *pc; /* return address */ @@ -127,7 +128,12 @@ typedef struct mrb_state { struct heap_page *sweeps; struct heap_page *free_heaps; size_t live; /* count of live objects */ - struct RBasic *arena[MRB_ARENA_SIZE]; /* GC protection array */ +#ifdef MRB_GC_FIXED_ARENA + struct RBasic *arena[MRB_GC_ARENA_SIZE]; /* GC protection array */ +#else + struct RBasic **arena; /* GC protection array */ + int arena_capa; +#endif int arena_idx; enum gc_state gc_state; /* state of gc */ @@ -150,6 +156,7 @@ typedef struct mrb_state { #ifdef ENABLE_DEBUG void (*code_fetch_hook)(struct mrb_state* mrb, struct mrb_irep *irep, mrb_code *pc, mrb_value *regs); + void (*debug_op_hook)(struct mrb_state* mrb, struct mrb_irep *irep, mrb_code *pc, mrb_value *regs); #endif struct RClass *eException_class; @@ -179,10 +186,12 @@ struct RClass * mrb_module_new(mrb_state *mrb); mrb_bool mrb_class_defined(mrb_state *mrb, const char *name); struct RClass * mrb_class_get(mrb_state *mrb, const char *name); struct RClass * mrb_class_get_under(mrb_state *mrb, struct RClass *outer, const char *name); +struct RClass * mrb_module_get(mrb_state *mrb, const char *name); +struct RClass * mrb_module_get_under(mrb_state *mrb, struct RClass *outer, const char *name); mrb_value mrb_obj_dup(mrb_state *mrb, mrb_value obj); mrb_value mrb_check_to_integer(mrb_state *mrb, mrb_value val, const char *method); -mrb_bool mrb_obj_respond_to(struct RClass* c, mrb_sym mid); +mrb_bool mrb_obj_respond_to(mrb_state *mrb, struct RClass* c, mrb_sym mid); struct RClass * mrb_define_class_under(mrb_state *mrb, struct RClass *outer, const char *name, struct RClass *super); struct RClass * mrb_define_module_under(mrb_state *mrb, struct RClass *outer, const char *name); @@ -223,7 +232,9 @@ mrb_value mrb_funcall(mrb_state*, mrb_value, const char*, int,...); mrb_value mrb_funcall_argv(mrb_state*, mrb_value, mrb_sym, int, mrb_value*); mrb_value mrb_funcall_with_block(mrb_state*, mrb_value, mrb_sym, int, mrb_value*, mrb_value); mrb_sym mrb_intern_cstr(mrb_state*,const char*); -mrb_sym mrb_intern2(mrb_state*,const char*,size_t); +mrb_sym mrb_intern(mrb_state*,const char*,size_t); +mrb_sym mrb_intern_static(mrb_state*,const char*,size_t); +#define mrb_intern_lit(mrb, lit) mrb_intern_static(mrb, (lit), sizeof(lit) - 1) mrb_sym mrb_intern_str(mrb_state*,mrb_value); mrb_value mrb_check_intern_cstr(mrb_state*,const char*); mrb_value mrb_check_intern(mrb_state*,const char*,size_t); @@ -231,14 +242,6 @@ mrb_value mrb_check_intern_str(mrb_state*,mrb_value); const char *mrb_sym2name(mrb_state*,mrb_sym); const char *mrb_sym2name_len(mrb_state*,mrb_sym,size_t*); mrb_value mrb_sym2str(mrb_state*,mrb_sym); -mrb_value mrb_str_format(mrb_state *, int, const mrb_value *, mrb_value); - -/* For backward compatibility. */ -static inline -mrb_sym mrb_intern(mrb_state *mrb,const char *cstr) -{ - return mrb_intern_cstr(mrb, cstr); -} void *mrb_malloc(mrb_state*, size_t); /* raise RuntimeError if no mem */ void *mrb_calloc(mrb_state*, size_t, size_t); /* ditto */ @@ -251,6 +254,7 @@ void mrb_free(mrb_state*, void*); mrb_value mrb_str_new(mrb_state *mrb, const char *p, size_t len); mrb_value mrb_str_new_cstr(mrb_state*, const char*); mrb_value mrb_str_new_static(mrb_state *mrb, const char *p, size_t len); +#define mrb_str_new_lit(mrb, lit) mrb_str_new_static(mrb, (lit), sizeof(lit) - 1) mrb_state* mrb_open(void); mrb_state* mrb_open_allocf(mrb_allocf, void *ud); @@ -364,7 +368,6 @@ void mrb_define_alias(mrb_state *mrb, struct RClass *klass, const char *name1, c const char *mrb_class_name(mrb_state *mrb, struct RClass* klass); void mrb_define_global_const(mrb_state *mrb, const char *name, mrb_value val); -mrb_value mrb_block_proc(void); mrb_value mrb_attr_get(mrb_state *mrb, mrb_value obj, mrb_sym id); mrb_bool mrb_respond_to(mrb_state *mrb, mrb_value obj, mrb_sym mid); diff --git a/include/mruby/compile.h b/include/mruby/compile.h index ec5a6935f..6717f001e 100644 --- a/include/mruby/compile.h +++ b/include/mruby/compile.h @@ -96,9 +96,7 @@ struct mrb_parser_heredoc_info { mrb_ast_node *doc; }; -#ifndef MRB_PARSER_BUF_SIZE -# define MRB_PARSER_BUF_SIZE 1024 -#endif +#define MRB_PARSER_BUF_SIZE 1024 /* parser structure */ struct mrb_parser_state { @@ -121,7 +119,8 @@ struct mrb_parser_state { unsigned int cmdarg_stack; int paren_nest; int lpar_beg; - int in_def, in_single, cmd_start; + int in_def, in_single; + mrb_bool cmd_start:1; mrb_ast_node *locals; mrb_ast_node *pb; @@ -140,7 +139,7 @@ struct mrb_parser_state { size_t nwarn; mrb_ast_node *tree; - int capture_errors; + mrb_bool capture_errors:1; struct mrb_parser_message error_buffer[10]; struct mrb_parser_message warn_buffer[10]; diff --git a/include/mruby/gc.h b/include/mruby/gc.h index 7afa24b48..02714be8e 100644 --- a/include/mruby/gc.h +++ b/include/mruby/gc.h @@ -7,11 +7,16 @@ #ifndef MRUBY_GC_H #define MRUBY_GC_H -#include "mruby.h" -#include "mruby/value.h" +#if defined(__cplusplus) +extern "C" { +#endif -typedef void (each_object_callback)(mrb_state *mrb, struct RBasic* obj, void *data); -void mrb_objspace_each_objects(mrb_state *mrb, each_object_callback* callback, void *data); +typedef void (mrb_each_object_callback)(mrb_state *mrb, struct RBasic *obj, void *data); +void mrb_objspace_each_objects(mrb_state *mrb, mrb_each_object_callback *callback, void *data); void mrb_free_context(mrb_state *mrb, struct mrb_context *c); +#if defined(__cplusplus) +} /* extern "C" { */ +#endif + #endif /* MRUBY_GC_H */ diff --git a/include/mruby/hash.h b/include/mruby/hash.h index ba3f84c41..6a8b11373 100644 --- a/include/mruby/hash.h +++ b/include/mruby/hash.h @@ -35,7 +35,7 @@ mrb_value mrb_hash_clear(mrb_state *mrb, mrb_value hash); /* RHASH_TBL allocates st_table if not available. */ #define RHASH(obj) ((struct RHash*)(mrb_ptr(obj))) #define RHASH_TBL(h) (RHASH(h)->ht) -#define RHASH_IFNONE(h) mrb_iv_get(mrb, (h), mrb_intern2(mrb, "ifnone", 6)) +#define RHASH_IFNONE(h) mrb_iv_get(mrb, (h), mrb_intern_lit(mrb, "ifnone")) #define RHASH_PROCDEFAULT(h) RHASH_IFNONE(h) struct kh_ht * mrb_hash_tbl(mrb_state *mrb, mrb_value hash); diff --git a/include/mruby/irep.h b/include/mruby/irep.h index 1b978dd42..480cb052f 100644 --- a/include/mruby/irep.h +++ b/include/mruby/irep.h @@ -26,17 +26,7 @@ typedef struct mrb_irep { uint8_t flags; mrb_code *iseq; - struct irep_pool { - union { - mrb_float f; - struct irep_pool_string { - mrb_int len; - char buf[1]; - } *s; - mrb_int i; - } value; - enum irep_pool_type type; - } *pool; + mrb_value *pool; mrb_sym *syms; struct mrb_irep **reps; diff --git a/include/mruby/khash.h b/include/mruby/khash.h index cadb3d074..dae44cff3 100644 --- a/include/mruby/khash.h +++ b/include/mruby/khash.h @@ -63,17 +63,16 @@ static const uint8_t __m_either[8] = {0x03, 0x0c, 0x30, 0xc0}; khval_t *vals; \ khint_t mask; \ khint_t inc; \ - mrb_state *mrb; \ } kh_##name##_t; \ - void kh_alloc_##name(kh_##name##_t *h); \ + void kh_alloc_##name(mrb_state *mrb, kh_##name##_t *h); \ kh_##name##_t *kh_init_##name##_size(mrb_state *mrb, khint_t size); \ kh_##name##_t *kh_init_##name(mrb_state *mrb); \ - void kh_destroy_##name(kh_##name##_t *h); \ - void kh_clear_##name(kh_##name##_t *h); \ - khint_t kh_get_##name(kh_##name##_t *h, khkey_t key); \ - khint_t kh_put_##name(kh_##name##_t *h, khkey_t key); \ - void kh_resize_##name(kh_##name##_t *h, khint_t new_n_buckets); \ - void kh_del_##name(kh_##name##_t *h, khint_t x); \ + void kh_destroy_##name(mrb_state *mrb, kh_##name##_t *h); \ + void kh_clear_##name(mrb_state *mrb, kh_##name##_t *h); \ + khint_t kh_get_##name(mrb_state *mrb, kh_##name##_t *h, khkey_t key); \ + khint_t kh_put_##name(mrb_state *mrb, kh_##name##_t *h, khkey_t key); \ + void kh_resize_##name(mrb_state *mrb, kh_##name##_t *h, khint_t new_n_buckets); \ + void kh_del_##name(mrb_state *mrb, kh_##name##_t *h, khint_t x); \ kh_##name##_t *kh_copy_##name(mrb_state *mrb, kh_##name##_t *h); static inline void @@ -94,11 +93,11 @@ kh_fill_flags(uint8_t *p, uint8_t c, size_t len) __hash_equal: hash comparation function */ #define KHASH_DEFINE(name, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) \ - void kh_alloc_##name(kh_##name##_t *h) \ + void kh_alloc_##name(mrb_state *mrb, kh_##name##_t *h) \ { \ khint_t sz = h->n_buckets; \ int len = sizeof(khkey_t) + (kh_is_map ? sizeof(khval_t) : 0); \ - uint8_t *p = mrb_malloc(h->mrb, sizeof(uint8_t)*sz/4+len*sz); \ + uint8_t *p = mrb_malloc(mrb, sizeof(uint8_t)*sz/4+len*sz); \ h->size = h->n_occupied = 0; \ h->upper_bound = UPPER_BOUND(sz); \ h->keys = (khkey_t *)p; \ @@ -114,39 +113,38 @@ kh_fill_flags(uint8_t *p, uint8_t c, size_t len) size = KHASH_MIN_SIZE; \ khash_power2(size); \ h->n_buckets = size; \ - h->mrb = mrb; \ - kh_alloc_##name(h); \ + kh_alloc_##name(mrb, h); \ return h; \ } \ kh_##name##_t *kh_init_##name(mrb_state *mrb){ \ return kh_init_##name##_size(mrb, KHASH_DEFAULT_SIZE); \ } \ - void kh_destroy_##name(kh_##name##_t *h) \ + void kh_destroy_##name(mrb_state *mrb, kh_##name##_t *h) \ { \ if (h) { \ - mrb_free(h->mrb, h->keys); \ - mrb_free(h->mrb, h); \ + mrb_free(mrb, h->keys); \ + mrb_free(mrb, h); \ } \ } \ - void kh_clear_##name(kh_##name##_t *h) \ + void kh_clear_##name(mrb_state *mrb, kh_##name##_t *h) \ { \ if (h && h->ed_flags) { \ kh_fill_flags(h->ed_flags, 0xaa, h->n_buckets/4); \ h->size = h->n_occupied = 0; \ } \ } \ - khint_t kh_get_##name(kh_##name##_t *h, khkey_t key) \ + khint_t kh_get_##name(mrb_state *mrb, kh_##name##_t *h, khkey_t key) \ { \ - khint_t k = __hash_func(h->mrb,key) & (h->mask); \ + khint_t k = __hash_func(mrb,key) & (h->mask); \ while (!__ac_isempty(h->ed_flags, k)) { \ if (!__ac_isdel(h->ed_flags, k)) { \ - if (__hash_equal(h->mrb,h->keys[k], key)) return k; \ + if (__hash_equal(mrb,h->keys[k], key)) return k; \ } \ k = (k+h->inc) & (h->mask); \ } \ return h->n_buckets; \ } \ - void kh_resize_##name(kh_##name##_t *h, khint_t new_n_buckets) \ + void kh_resize_##name(mrb_state *mrb, kh_##name##_t *h, khint_t new_n_buckets) \ { \ if (new_n_buckets < KHASH_MIN_SIZE) \ new_n_buckets = KHASH_MIN_SIZE; \ @@ -158,26 +156,26 @@ kh_fill_flags(uint8_t *p, uint8_t c, size_t len) khint_t old_n_buckets = h->n_buckets; \ khint_t i; \ h->n_buckets = new_n_buckets; \ - kh_alloc_##name(h); \ + kh_alloc_##name(mrb, h); \ /* relocate */ \ for (i=0 ; i<old_n_buckets ; i++) { \ if (!__ac_iseither(old_ed_flags, i)) { \ - khint_t k = kh_put_##name(h, old_keys[i]); \ - if (kh_is_map) kh_value(h,k) = old_vals[i]; \ + khint_t k = kh_put_##name(mrb, h, old_keys[i]); \ + if (kh_is_map) kh_value(h,k) = old_vals[i]; \ } \ } \ - mrb_free(h->mrb, old_keys); \ + mrb_free(mrb, old_keys); \ } \ } \ - khint_t kh_put_##name(kh_##name##_t *h, khkey_t key) \ + khint_t kh_put_##name(mrb_state *mrb, kh_##name##_t *h, khkey_t key) \ { \ khint_t k; \ if (h->n_occupied >= h->upper_bound) { \ - kh_resize_##name(h, h->n_buckets*2); \ + kh_resize_##name(mrb, h, h->n_buckets*2); \ } \ - k = __hash_func(h->mrb,key) & (h->mask); \ + k = __hash_func(mrb,key) & (h->mask); \ while (!__ac_iseither(h->ed_flags, k)) { \ - if (__hash_equal(h->mrb,h->keys[k], key)) break; \ + if (__hash_equal(mrb,h->keys[k], key)) break; \ k = (k+h->inc) & (h->mask); \ } \ if (__ac_isempty(h->ed_flags, k)) { \ @@ -194,7 +192,7 @@ kh_fill_flags(uint8_t *p, uint8_t c, size_t len) } \ return k; \ } \ - void kh_del_##name(kh_##name##_t *h, khint_t x) \ + void kh_del_##name(mrb_state *mrb, kh_##name##_t *h, khint_t x) \ { \ h->ed_flags[x/4] |= __m_del[x%4]; \ h->size--; \ @@ -207,7 +205,7 @@ kh_fill_flags(uint8_t *p, uint8_t c, size_t len) h2 = kh_init_##name(mrb); \ for (k = kh_begin(h); k != kh_end(h); k++) { \ if (kh_exist(h, k)) { \ - k2 = kh_put_##name(h2, kh_key(h, k)); \ + k2 = kh_put_##name(mrb, h2, kh_key(h, k)); \ if(kh_is_map) kh_value(h2, k2) = kh_value(h, k); \ } \ } \ @@ -219,12 +217,12 @@ kh_fill_flags(uint8_t *p, uint8_t c, size_t len) #define kh_init_size(name,mrb,size) kh_init_##name##_size(mrb,size) #define kh_init(name,mrb) kh_init_##name(mrb) -#define kh_destroy(name, h) kh_destroy_##name(h) -#define kh_clear(name, h) kh_clear_##name(h) -#define kh_resize(name, h, s) kh_resize_##name(h, s) -#define kh_put(name, h, k) kh_put_##name(h, k) -#define kh_get(name, h, k) kh_get_##name(h, k) -#define kh_del(name, h, k) kh_del_##name(h, k) +#define kh_destroy(name, mrb, h) kh_destroy_##name(mrb, h) +#define kh_clear(name, mrb, h) kh_clear_##name(mrb, h) +#define kh_resize(name, mrb, h, s) kh_resize_##name(mrb, h, s) +#define kh_put(name, mrb, h, k) kh_put_##name(mrb, h, k) +#define kh_get(name, mrb, h, k) kh_get_##name(mrb, h, k) +#define kh_del(name, mrb, h, k) kh_del_##name(mrb, h, k) #define kh_copy(name, mrb, h) kh_copy_##name(mrb, h) #define kh_exist(h, x) (!__ac_iseither((h)->ed_flags, (x))) diff --git a/include/mruby/range.h b/include/mruby/range.h index 6030410ba..78ddf32a3 100644 --- a/include/mruby/range.h +++ b/include/mruby/range.h @@ -26,7 +26,7 @@ struct RRange { #define mrb_range_value(p) mrb_obj_value((void*)(p)) mrb_value mrb_range_new(mrb_state*, mrb_value, mrb_value, int); -mrb_int mrb_range_beg_len(mrb_state *mrb, mrb_value range, mrb_int *begp, mrb_int *lenp, mrb_int len); +mrb_bool mrb_range_beg_len(mrb_state *mrb, mrb_value range, mrb_int *begp, mrb_int *lenp, mrb_int len); #if defined(__cplusplus) } /* extern "C" { */ diff --git a/include/mruby/string.h b/include/mruby/string.h index 727d95677..fbc39368b 100644 --- a/include/mruby/string.h +++ b/include/mruby/string.h @@ -32,6 +32,9 @@ struct RString { #define RSTRING_CAPA(s) (RSTRING(s)->aux.capa) #define RSTRING_END(s) (RSTRING(s)->ptr + RSTRING(s)->len) +#define MRB_STR_SHARED 1 +#define MRB_STR_NOFREE 2 + void mrb_gc_free_str(mrb_state*, struct RString*); void mrb_str_modify(mrb_state*, struct RString*); mrb_value mrb_str_literal(mrb_state*, mrb_value); @@ -52,8 +55,8 @@ int mrb_str_offset(mrb_state *mrb, mrb_value str, int pos); mrb_value mrb_str_dup(mrb_state *mrb, mrb_value str); mrb_value mrb_str_intern(mrb_state *mrb, mrb_value self); mrb_value mrb_str_cat_cstr(mrb_state *, mrb_value, const char *); -mrb_value mrb_str_to_inum(mrb_state *mrb, mrb_value str, int base, int badcheck); -double mrb_str_to_dbl(mrb_state *mrb, mrb_value str, int badcheck); +mrb_value mrb_str_to_inum(mrb_state *mrb, mrb_value str, int base, mrb_bool badcheck); +double mrb_str_to_dbl(mrb_state *mrb, mrb_value str, mrb_bool badcheck); mrb_value mrb_str_to_str(mrb_state *mrb, mrb_value str); mrb_int mrb_str_hash(mrb_state *mrb, mrb_value str); mrb_value mrb_str_buf_append(mrb_state *mrb, mrb_value str, mrb_value str2); @@ -65,6 +68,7 @@ mrb_value mrb_str_append(mrb_state *mrb, mrb_value str, mrb_value str2); int mrb_str_cmp(mrb_state *mrb, mrb_value str1, mrb_value str2); char *mrb_str_to_cstr(mrb_state *mrb, mrb_value str); +mrb_value mrb_str_pool(mrb_state *mrb, mrb_value str); /* For backward compatibility */ static inline mrb_value diff --git a/include/mruby/value.h b/include/mruby/value.h index c48c9169e..13acd039e 100644 --- a/include/mruby/value.h +++ b/include/mruby/value.h @@ -155,7 +155,7 @@ typedef struct mrb_value { #define mrb_tt(o) (((o).value.ttt & 0xfc000)>>14) #define mrb_mktt(tt) (0xfff00000|((tt)<<14)) #define mrb_type(o) ((uint32_t)0xfff00000 < (o).value.ttt ? mrb_tt(o) : MRB_TT_FLOAT) -#define mrb_ptr(o) ((void*)((((intptr_t)0x3fffffffffff)&((intptr_t)((o).value.p)))<<2)) +#define mrb_ptr(o) ((void*)((((uintptr_t)0x3fffffffffff)&((uintptr_t)((o).value.p)))<<2)) #define mrb_float(o) (o).f #define MRB_SET_VALUE(o, tt, attr, v) do {\ @@ -166,7 +166,7 @@ typedef struct mrb_value { case MRB_TT_UNDEF:\ case MRB_TT_FIXNUM:\ case MRB_TT_SYMBOL: (o).attr = (v); break;\ - default: (o).value.i = 0; (o).value.p = (void*)((intptr_t)(o).value.p | (((intptr_t)(v))>>2)); break;\ + default: (o).value.i = 0; (o).value.p = (void*)((uintptr_t)(o).value.p | (((uintptr_t)(v))>>2)); break;\ }\ } while (0) @@ -183,6 +183,7 @@ mrb_float_value(struct mrb_state *mrb, mrb_float f) } return v; } +#define mrb_float_pool(mrb,f) mrb_float_value(mrb,f) #else @@ -215,6 +216,7 @@ enum mrb_vtype { #if defined(MRB_WORD_BOXING) +#include <limits.h> #define MRB_TT_HAS_BASIC MRB_TT_FLOAT enum mrb_special_consts { @@ -263,8 +265,8 @@ typedef union mrb_value { }\ } while (0) -extern mrb_value -mrb_float_value(struct mrb_state *mrb, mrb_float f); +mrb_value mrb_float_value(struct mrb_state *mrb, mrb_float f); +mrb_value mrb_float_pool(struct mrb_state *mrb, mrb_float f); #else /* No MRB_xxx_BOXING */ @@ -298,6 +300,7 @@ mrb_float_value(struct mrb_state *mrb, mrb_float f) MRB_SET_VALUE(v, MRB_TT_FLOAT, value.f, f); return v; } +#define mrb_float_pool(mrb,f) mrb_float_value(mrb,f) #endif /* no boxing */ @@ -312,6 +315,7 @@ mrb_float_value(struct mrb_state *mrb, mrb_float f) #define mrb_bool(o) ((o).w != MRB_Qnil && (o).w != MRB_Qfalse) #else + #define mrb_cptr(o) mrb_ptr(o) #define mrb_fixnum_p(o) (mrb_type(o) == MRB_TT_FIXNUM) #define mrb_undef_p(o) (mrb_type(o) == MRB_TT_UNDEF) diff --git a/include/mruby/version.h b/include/mruby/version.h new file mode 100644 index 000000000..9105229b9 --- /dev/null +++ b/include/mruby/version.h @@ -0,0 +1,27 @@ +#define MRUBY_RUBY_VERSION "1.9" +#define MRUBY_VERSION "v1.0.0" + +#define MRUBY_RELEASE_MAJOR 1 +#define MRUBY_RELEASE_MINOR 0 +#define MRUBY_RELEASE_TEENY 1 +#define MRUBY_RELEASE_NO 10001 +#define MRUBY_RELEASE_DATE "2014-01-10" +#define MRUBY_RELEASE_YEAR 2014 +#define MRUBY_RELEASE_MONTH 1 +#define MRUBY_RELEASE_DAY 10 + +#define MRUBY_BIRTH_YEAR 2010 + +#define MRUBY_AUTHOR "mruby developers" + +#define STRINGIZE0(expr) #expr +#define STRINGIZE(expr) STRINGIZE0(expr) + +#define MRUBY_DESCRIPTION \ + "mruby "MRUBY_VERSION \ + " ("MRUBY_RELEASE_DATE") " +#define MRUBY_COPYRIGHT \ + "mruby - Copyright (c) " \ + STRINGIZE(MRUBY_BIRTH_YEAR)"-" \ + STRINGIZE(MRUBY_RELEASE_YEAR)" " \ + MRUBY_AUTHOR |
