Merge pull request #323 from dcurrie/str-to-num-no-err
Fix issue #322 string->number should never signal error
This commit is contained in:
		
						commit
						7019f81aaf
					
				|  | @ -216,12 +216,19 @@ pic_number_string_to_number(pic_state *pic) | ||||||
|       : pic_float_value(num); |       : pic_float_value(num); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   flo = pic_read_cstr(pic, str); |   pic_try { | ||||||
|  |     flo = pic_read_cstr(pic, str); | ||||||
|  |   } | ||||||
|  |   pic_catch { | ||||||
|  |     /* swallow error */ | ||||||
|  |     flo = pic_false_value(); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   if (pic_int_p(flo) || pic_float_p(flo)) { |   if (pic_int_p(flo) || pic_float_p(flo)) { | ||||||
|     return flo; |     return flo; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   pic_errorf(pic, "invalid string given: %s", str); |   return pic_false_value(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void | void | ||||||
|  |  | ||||||
|  | @ -283,6 +283,10 @@ read_unsigned(pic_state *pic, struct pic_port *port, int c) | ||||||
|   if (idx >= ATOF_BUF_SIZE) |   if (idx >= ATOF_BUF_SIZE) | ||||||
|     read_error(pic, "number too large",  |     read_error(pic, "number too large",  | ||||||
|                     pic_obj_value(pic_make_str(pic, (const char *)buf, ATOF_BUF_SIZE))); |                     pic_obj_value(pic_make_str(pic, (const char *)buf, ATOF_BUF_SIZE))); | ||||||
|  | 
 | ||||||
|  |   if (! isdelim(c)) | ||||||
|  |     read_error(pic, "non-delimiter character given after number", pic_list1(pic, pic_char_value(c))); | ||||||
|  | 
 | ||||||
|   buf[idx] = 0; |   buf[idx] = 0; | ||||||
|   flt = PIC_CSTRING_TO_DOUBLE(buf); |   flt = PIC_CSTRING_TO_DOUBLE(buf); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -0,0 +1,26 @@ | ||||||
|  | (import (scheme base) | ||||||
|  |         (picrin test)) | ||||||
|  | 
 | ||||||
|  | (test-begin) | ||||||
|  | 
 | ||||||
|  | (test #f (string->number "12e43r")) | ||||||
|  | 
 | ||||||
|  | (test #f (string->number "12e+43r")) | ||||||
|  | 
 | ||||||
|  | (test #f (string->number "12e+43e54")) | ||||||
|  | 
 | ||||||
|  | (test #f (string->number "12e+")) | ||||||
|  | 
 | ||||||
|  | (test #f (string->number "12e")) | ||||||
|  | 
 | ||||||
|  | (test #f (string->number "+12e")) | ||||||
|  | 
 | ||||||
|  | (test #f (string->number "-12e")) | ||||||
|  | 
 | ||||||
|  | (test -12 (string->number "-12")) | ||||||
|  | 
 | ||||||
|  | (test -12.0 (string->number "-12.0")) | ||||||
|  | 
 | ||||||
|  | (test #f (string->number "-12.0e-5t")) | ||||||
|  | 
 | ||||||
|  | (test-end) | ||||||
		Loading…
	
		Reference in New Issue
	
	 Yuichi Nishiwaki
						Yuichi Nishiwaki