Changeset 740 for to-imperative/trunk/runtime/rf_short_int.cc
- Timestamp:
- May 21, 2003, 12:42:22 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
to-imperative/trunk/runtime/rf_short_int.cc
r723 r740 8 8 #include "rf_expr.ih" 9 9 #include "rf_char.ih" 10 #include "rf_word.ih" 10 11 11 12 namespace rftype … … 32 33 Expr ShortInt::create_expr (Expr& _expr, int _flag) 33 34 { 34 // _flag == 1, if the number in _expr has "+"35 //_flag == -1, if the number in _expr has "-"36 //othewise _flag == 037 38 35 Term* p = _expr.get_first(); 39 36 Term* q = _expr.get_last(); 40 37 int d = 0; 41 38 intptr_t n = 0; 42 39 … … 45 42 if (n < 0) { 46 43 n = -n; 44 d = -1; 47 45 _flag = -1; 48 46 } 49 else 47 else { 50 48 _flag = 1; 49 d = 1; 50 } 51 } 52 if (p->get_type() == type_word) { 53 d = 0; 54 } 55 if (p->get_type() == type_char) { 56 d = _flag; 51 57 } 52 58 53 for (p += _flag * _flag; p < q; p++) {59 for (p += _flag * d; p < q; p++) { 54 60 if (p->get_type() == type_short_int) { 55 61 intptr_t n_temp = ((ShortInt*)p)->to_int() / 10; … … 63 69 n = n * k + ((ShortInt*)p)->to_int(); 64 70 } 65 else66 71 if (p->get_type() == type_char) { 67 72 n = n * 10 + (((Char*)p)->to_wchar_t() - 48); 68 73 } 74 if (p->get_type() == type_word) { 75 size_t len = ((Word*)p)->get_len(); 76 size_t n_word = 0; 77 int k_word = 1; 78 int deg = 0; 79 if (_flag ) deg = len - 2; 80 else deg = len - 1; 81 82 for (int i = 0; i < deg; i++) 83 k_word *= 10; 84 85 Word::NumIterator i = *((Word*)p); 86 87 for (; i.in_bounds(); i++){ 88 // n_word += ((*i)-48) * k_word; 89 n_word += (*i) * k_word; 90 k_word /= 10; 91 } 92 n += n_word; 93 } 69 94 } 70 71 95 if (-1 == _flag) n = -n; 72 96 73 97 Expr e = Term::create_expr(1); 74 75 98 new(e.get_first()) ShortInt(n); 76 99 return e;
Note: See TracChangeset
for help on using the changeset viewer.