Changeset 439 for EcnlProtoTool/trunk/mruby-2.1.1/src/etc.c
- Timestamp:
- Jul 9, 2020, 8:51:43 AM (4 years ago)
- Location:
- EcnlProtoTool/trunk/mruby-2.1.1
- Files:
-
- 1 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/mruby-2.1.1/src/etc.c
r331 r439 1 1 /* 2 ** etc.c -2 ** etc.c 3 3 ** 4 4 ** See Copyright Notice in mruby.h … … 9 9 #include <mruby/data.h> 10 10 #include <mruby/class.h> 11 #include <mruby/re.h>12 #include <mruby/irep.h>13 11 14 12 MRB_API struct RData* … … 27 25 mrb_data_check_type(mrb_state *mrb, mrb_value obj, const mrb_data_type *type) 28 26 { 29 if ( mrb_type(obj) != MRB_TT_DATA) {27 if (!mrb_data_p(obj)) { 30 28 mrb_check_type(mrb, obj, MRB_TT_DATA); 31 29 } … … 34 32 35 33 if (t2) { 36 mrb_raisef(mrb, E_TYPE_ERROR, "wrong argument type % S (expected %S)",37 mrb_str_new_cstr(mrb, t2->struct_name), mrb_str_new_cstr(mrb, type->struct_name));34 mrb_raisef(mrb, E_TYPE_ERROR, "wrong argument type %s (expected %s)", 35 t2->struct_name, type->struct_name); 38 36 } 39 37 else { 40 struct RClass *c = mrb_class(mrb, obj); 41 42 mrb_raisef(mrb, E_TYPE_ERROR, "uninitialized %S (expected %S)", 43 mrb_obj_value(c), mrb_str_new_cstr(mrb, type->struct_name)); 38 mrb_raisef(mrb, E_TYPE_ERROR, "uninitialized %t (expected %s)", 39 obj, type->struct_name); 44 40 } 45 41 } … … 49 45 mrb_data_check_get_ptr(mrb_state *mrb, mrb_value obj, const mrb_data_type *type) 50 46 { 51 if ( mrb_type(obj) != MRB_TT_DATA) {47 if (!mrb_data_p(obj)) { 52 48 return NULL; 53 49 } … … 68 64 mrb_obj_to_sym(mrb_state *mrb, mrb_value name) 69 65 { 70 mrb_sym id; 71 72 switch (mrb_type(name)) { 73 default: 74 name = mrb_check_string_type(mrb, name); 75 if (mrb_nil_p(name)) { 76 name = mrb_inspect(mrb, name); 77 mrb_raisef(mrb, E_TYPE_ERROR, "%S is not a symbol", name); 78 } 79 /* fall through */ 80 case MRB_TT_STRING: 81 name = mrb_str_intern(mrb, name); 82 /* fall through */ 83 case MRB_TT_SYMBOL: 84 id = mrb_symbol(name); 85 } 86 return id; 66 if (mrb_symbol_p(name)) return mrb_symbol(name); 67 if (mrb_string_p(name)) return mrb_intern_str(mrb, name); 68 mrb_raisef(mrb, E_TYPE_ERROR, "%!v is not a symbol nor a string", name); 69 return 0; /* not reached */ 87 70 } 88 71 89 72 MRB_API mrb_int 73 #ifdef MRB_WITHOUT_FLOAT 74 mrb_fixnum_id(mrb_int f) 75 #else 90 76 mrb_float_id(mrb_float f) 77 #endif 91 78 { 92 79 const char *p = (const char*)&f; 93 80 int len = sizeof(f); 94 mrb_int id = 0; 95 81 uint32_t id = 0; 82 83 #ifndef MRB_WITHOUT_FLOAT 84 /* normalize -0.0 to 0.0 */ 85 if (f == 0) f = 0.0; 86 #endif 96 87 while (len--) { 97 88 id = id*65599 + *p; … … 100 91 id = id + (id>>5); 101 92 102 return id;93 return (mrb_int)id; 103 94 } 104 95 … … 124 115 return MakeID(mrb_symbol(obj)); 125 116 case MRB_TT_FIXNUM: 117 #ifdef MRB_WITHOUT_FLOAT 118 return MakeID(mrb_fixnum_id(mrb_fixnum(obj))); 119 #else 126 120 return MakeID2(mrb_float_id((mrb_float)mrb_fixnum(obj)), MRB_TT_FLOAT); 127 121 case MRB_TT_FLOAT: 128 122 return MakeID(mrb_float_id(mrb_float(obj))); 123 #endif 129 124 case MRB_TT_STRING: 130 125 case MRB_TT_OBJECT: … … 147 142 148 143 #ifdef MRB_WORD_BOXING 144 #ifndef MRB_WITHOUT_FLOAT 149 145 MRB_API mrb_value 150 146 mrb_word_boxing_float_value(mrb_state *mrb, mrb_float f) … … 154 150 v.value.p = mrb_obj_alloc(mrb, MRB_TT_FLOAT, mrb->float_class); 155 151 v.value.fp->f = f; 152 MRB_SET_FROZEN_FLAG(v.value.bp); 156 153 return v; 157 154 } … … 164 161 nf->c = mrb->float_class; 165 162 nf->f = f; 163 MRB_SET_FROZEN_FLAG(nf); 166 164 return mrb_obj_value(nf); 167 165 } 166 #endif /* MRB_WITHOUT_FLOAT */ 168 167 169 168 MRB_API mrb_value … … 177 176 } 178 177 #endif /* MRB_WORD_BOXING */ 179 180 MRB_API mrb_bool181 mrb_regexp_p(mrb_state *mrb, mrb_value v)182 {183 if (mrb->flags & MRB_STATE_NO_REGEXP) {184 return FALSE;185 }186 if ((mrb->flags & MRB_STATE_REGEXP) || mrb_class_defined(mrb, REGEXP_CLASS)) {187 mrb->flags |= MRB_STATE_REGEXP;188 return mrb_obj_is_kind_of(mrb, v, mrb_class_get(mrb, REGEXP_CLASS));189 }190 else {191 mrb->flags |= MRB_STATE_REGEXP;192 mrb->flags |= MRB_STATE_NO_REGEXP;193 }194 return FALSE;195 }196 178 197 179 #if defined _MSC_VER && _MSC_VER < 1900
Note:
See TracChangeset
for help on using the changeset viewer.