Changeset 247
- Timestamp:
- Nov 25, 2002, 10:47:30 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
to-imperative/trunk/runtime/rf_int.hh
r246 r247 27 27 28 28 inline rf_int::rf_int(const Expr& expr, bool is_positive, int i) { 29 if (expr.get_len() - i > 10) 30 goto Error; 29 31 Term* p = expr.get_last(); 30 32 Term* q = expr.get_first() + i; 31 33 k = 1; n = 0; 32 for (; p >= q; p--) { 33 if (n + (((rf_char*)p)->to_byte().n - ord('0'))*k) > INTPTR_MAX) 34 error ( Word2Expr(RF-INT) + "Size limit exceeded"); //обдумать позже, стоит ли так делать 35 else { 34 35 if (expr.get_len() - i < 10){ 36 for (; p >= q; p--) { 36 37 n += (((rf_char*)p)->to_byte().n - ord('0'))*k; 37 k *= 10; 38 k *= 10; 39 38 40 }; 39 41 }; 42 if (expr.get_len() - i == 10) { 43 for (; p > p - 9 ; p--) { 44 n += (((rf_char*)p)->to_byte().n - ord('0'))*k; 45 k *= 10; 46 47 }; 48 p++; 49 if (n += (((rf_char*)p)->to_byte().n - ord('0'))*k > INTPTR_MAX) 50 goto Error; 51 else 52 n += (((rf_char*)p)->to_byte().n - ord('0'))*k; 53 54 }; 55 40 56 if (!is_positive) 41 57 n = -n; 58 59 Error: error ( Word2Expr(RF-INT) + "Size limit exceeded"); 42 60 43 61 };
Note: See TracChangeset
for help on using the changeset viewer.