Changeset 740


Ignore:
Timestamp:
May 21, 2003, 12:42:22 PM (18 years ago)
Author:
luba
Message:
  • create_expr(Expr&, int) method is modified to process terms of type word
File:
1 edited

Legend:

Unmodified
Added
Removed
  • to-imperative/trunk/runtime/rf_short_int.cc

    r723 r740  
    88#include "rf_expr.ih"
    99#include "rf_char.ih"
     10#include "rf_word.ih"
    1011
    1112namespace rftype
     
    3233Expr ShortInt::create_expr (Expr& _expr, int _flag)
    3334{
    34   // _flag == 1, if the number in _expr has "+"
    35   //_flag == -1, if the number in _expr has "-"
    36   //othewise _flag == 0
    37 
    3835  Term* p = _expr.get_first();
    3936  Term* q = _expr.get_last();
    40 
     37  int d = 0;
    4138  intptr_t n = 0;
    4239
     
    4542    if (n < 0) {
    4643      n = -n;
     44      d = -1;
    4745      _flag = -1;
    4846    }
    49     else
     47    else {
    5048      _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;
    5157  }
    5258
    53   for (p += _flag * _flag; p < q; p++) {
     59  for (p += _flag * d; p < q; p++) {
    5460    if (p->get_type() == type_short_int) {
    5561      intptr_t n_temp = ((ShortInt*)p)->to_int() / 10;
     
    6369      n = n * k + ((ShortInt*)p)->to_int();
    6470    }
    65     else
    6671    if (p->get_type() == type_char) {
    6772      n = n * 10 + (((Char*)p)->to_wchar_t() - 48);
    6873    }
     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    }
    6994  }
    70 
    7195  if (-1 == _flag) n = -n;
    7296
    7397  Expr e = Term::create_expr(1);
    74 
    7598  new(e.get_first()) ShortInt(n);
    7699  return e;
Note: See TracChangeset for help on using the changeset viewer.