- 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/mrbgems/mruby-kernel-ext/src/kernel.c
r331 r439 21 21 break; 22 22 case 1: 23 if (mrb_ type(v) == MRB_TT_RANGE) {23 if (mrb_range_p(v)) { 24 24 mrb_int beg, len; 25 if (mrb_range_beg_len(mrb, v, &beg, &len, bt_len, TRUE) == 1) {25 if (mrb_range_beg_len(mrb, v, &beg, &len, bt_len, TRUE) == MRB_RANGE_OK) { 26 26 lev = beg; 27 27 n = len; … … 32 32 } 33 33 else { 34 v = mrb_to_int(mrb, v); 35 lev = mrb_fixnum(v); 34 lev = mrb_int(mrb, v); 36 35 if (lev < 0) { 37 mrb_raisef(mrb, E_ARGUMENT_ERROR, "negative level (% S)", v);36 mrb_raisef(mrb, E_ARGUMENT_ERROR, "negative level (%v)", v); 38 37 } 39 38 n = bt_len - lev; … … 41 40 break; 42 41 case 2: 43 lev = mrb_ fixnum(mrb_to_int(mrb, v));44 n = mrb_ fixnum(mrb_to_int(mrb, length));42 lev = mrb_int(mrb, v); 43 n = mrb_int(mrb, length); 45 44 if (lev < 0) { 46 mrb_raisef(mrb, E_ARGUMENT_ERROR, "negative level (% S)", v);45 mrb_raisef(mrb, E_ARGUMENT_ERROR, "negative level (%v)", v); 47 46 } 48 47 if (n < 0) { 49 mrb_raisef(mrb, E_ARGUMENT_ERROR, "negative size (% S)", length);48 mrb_raisef(mrb, E_ARGUMENT_ERROR, "negative size (%v)", length); 50 49 } 51 50 break; … … 94 93 * In any case, strings should be strictly conformed to numeric 95 94 * representation. This behavior is different from that of 96 * <code>String#to_i</code>. Non string values will be converted using 97 * <code>to_int</code>, and <code>to_i</code>. Passing <code>nil</code> 98 * raises a TypeError. 95 * <code>String#to_i</code>. Non string values will be treated as integers. 96 * Passing <code>nil</code> raises a TypeError. 99 97 * 100 98 * Integer(123.999) #=> 123 … … 115 113 } 116 114 115 #ifndef MRB_WITHOUT_FLOAT 117 116 /* 118 117 * call-seq: … … 135 134 return mrb_Float(mrb, arg); 136 135 } 136 #endif 137 137 138 138 /* … … 141 141 * 142 142 * Returns <i>arg</i> as an <code>String</code>. 143 * 144 * First tries to call its <code>to_str</code> method, then its to_s method. 143 * converted using <code>to_s</code> method. 145 144 * 146 145 * String(self) #=> "main" … … 154 153 155 154 mrb_get_args(mrb, "o", &arg); 156 tmp = mrb_check_convert_type(mrb, arg, MRB_TT_STRING, "String", "to_str"); 157 if (mrb_nil_p(tmp)) { 158 tmp = mrb_check_convert_type(mrb, arg, MRB_TT_STRING, "String", "to_s"); 159 } 155 tmp = mrb_convert_type(mrb, arg, MRB_TT_STRING, "String", "to_s"); 160 156 return tmp; 161 157 } … … 165 161 * Array(arg) -> array 166 162 * 167 * Returns +arg+ as an Array. 168 * 169 * First tries to call Array#to_ary on +arg+, then Array#to_a. 163 * Returns +arg+ as an Array using to_a method. 170 164 * 171 165 * Array(1..5) #=> [1, 2, 3, 4, 5] … … 178 172 179 173 mrb_get_args(mrb, "o", &arg); 180 tmp = mrb_check_convert_type(mrb, arg, MRB_TT_ARRAY, "Array", "to_ary"); 181 if (mrb_nil_p(tmp)) { 182 tmp = mrb_check_convert_type(mrb, arg, MRB_TT_ARRAY, "Array", "to_a"); 183 } 174 tmp = mrb_check_convert_type(mrb, arg, MRB_TT_ARRAY, "Array", "to_a"); 184 175 if (mrb_nil_p(tmp)) { 185 176 return mrb_ary_new_from_values(mrb, 1, &arg); … … 193 184 * Hash(arg) -> hash 194 185 * 195 * Converts <i>arg</i> to a <code>Hash</code> by calling196 * <i>arg</i><code>.to_hash</code>. Returns an empty <code>Hash</code> when197 * <i>arg</i> is <tt>nil</tt>or <tt>[]</tt>.186 * Returns a <code>Hash</code> if <i>arg</i> is a <code>Hash</code>. 187 * Returns an empty <code>Hash</code> when <i>arg</i> is <tt>nil</tt> 188 * or <tt>[]</tt>. 198 189 * 199 190 * Hash([]) #=> {} … … 206 197 mrb_f_hash(mrb_state *mrb, mrb_value self) 207 198 { 208 mrb_value arg , tmp;209 210 mrb_get_args(mrb, "o", &arg); 211 if (mrb_nil_p(arg) ) {199 mrb_value arg; 200 201 mrb_get_args(mrb, "o", &arg); 202 if (mrb_nil_p(arg) || (mrb_array_p(arg) && RARRAY_LEN(arg) == 0)) { 212 203 return mrb_hash_new(mrb); 213 204 } 214 tmp = mrb_check_convert_type(mrb, arg, MRB_TT_HASH, "Hash", "to_hash"); 215 if (mrb_nil_p(tmp)) { 216 if (mrb_array_p(arg) && RARRAY_LEN(arg) == 0) { 217 return mrb_hash_new(mrb); 218 } 219 mrb_raisef(mrb, E_TYPE_ERROR, "can't convert %S into Hash", 220 mrb_str_new_cstr(mrb, mrb_obj_classname(mrb, arg))); 221 } 222 return tmp; 205 return mrb_ensure_hash_type(mrb, arg); 223 206 } 224 207 … … 231 214 mrb_define_module_function(mrb, krn, "caller", mrb_f_caller, MRB_ARGS_OPT(2)); 232 215 mrb_define_method(mrb, krn, "__method__", mrb_f_method, MRB_ARGS_NONE()); 233 mrb_define_module_function(mrb, krn, "Integer", mrb_f_integer, MRB_ARGS_ANY()); 216 mrb_define_module_function(mrb, krn, "Integer", mrb_f_integer, MRB_ARGS_ARG(1,1)); 217 #ifndef MRB_WITHOUT_FLOAT 234 218 mrb_define_module_function(mrb, krn, "Float", mrb_f_float, MRB_ARGS_REQ(1)); 219 #endif 235 220 mrb_define_module_function(mrb, krn, "String", mrb_f_string, MRB_ARGS_REQ(1)); 236 221 mrb_define_module_function(mrb, krn, "Array", mrb_f_array, MRB_ARGS_REQ(1));
Note:
See TracChangeset
for help on using the changeset viewer.