Changeset 247


Ignore:
Timestamp:
Nov 25, 2002, 10:47:30 AM (18 years ago)
Author:
luba
Message:

* empty log message *

File:
1 edited

Legend:

Unmodified
Added
Removed
  • to-imperative/trunk/runtime/rf_int.hh

    r246 r247  
    2727
    2828inline rf_int::rf_int(const Expr& expr, bool is_positive, int i) {
     29  if (expr.get_len() - i > 10)
     30    goto Error;
    2931  Term* p = expr.get_last();
    3032  Term* q = expr.get_first() + i;
    3133  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--) {
    3637      n += (((rf_char*)p)->to_byte().n - ord('0'))*k;
    37       k *= 10;     
     38      k *= 10;
     39       
    3840    };
    3941  };
     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
    4056  if (!is_positive)
    4157     n = -n;
     58
     59Error: error ( Word2Expr(RF-INT) + "Size limit exceeded");
    4260
    4361};
Note: See TracChangeset for help on using the changeset viewer.