Changeset 1175


Ignore:
Timestamp:
Aug 13, 2003, 2:32:33 AM (17 years ago)
Author:
orlov
Message:
  • Invalid arguments handling is fixed.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • to-imperative/trunk/library/Dos/arg.cc

    r1150 r1175  
    66#include <rf_core.hh>
    77#include <stdlib.h>
     8#include <limits.h>
    89
    910namespace refal
     
    1819  if (s_Num.get_len() == 1 ) {
    1920    Term* p = s_Num.get_first();
    20     intptr_t n;
    21     if (p->get_type() == type_int32 || p->get_type() == type_int) {
    22       if (p->get_type() == type_int32) {
    23         n = static_cast<Int32*>(p)->to_int();
     21    int n;
     22    if (p->get_type() == type_int32) {
     23      n = static_cast<Int32*>(p)->to_int();
     24      if (n < 0) RF_LIB_ERROR ("Invalid Argument");
     25    } else
     26    if (p->get_type() == type_int) {
     27      rftype::Integer* num = p->cast_to<rftype::Integer>(type_int);
     28      if (num != null && num->cmp(0) >= 0 && num->cmp(INT_MAX) <= 0) {
     29        n = num->to_int();
    2430      } else {
    25         rftype::Integer* num = p->cast_to<rftype::Integer>(type_int);
    26         if (num != null) {
    27           n = num->to_int();
    28         } else {
    29           RF_LIB_ERROR ("Invalid Argument");
    30         }
     31        RF_LIB_ERROR ("Invalid Argument");
    3132      }
    32       if (n >= 0 && n < argc) {
    33         e_Arg = Char::create_expr(argv[n]);
    34         return true;
    35       } else {
    36         e_Arg = empty;
    37       }
    38       return true;
     33    } else {
     34      RF_LIB_ERROR ("Invalid Argument");
    3935    }
     36    if (n < argc) {
     37      e_Arg = Char::create_expr(argv[n]);
     38    } else {
     39      e_Arg = empty;
     40    }
     41    return true;
    4042  }
    4143  RF_LIB_ERROR ("Invalid Argument");
Note: See TracChangeset for help on using the changeset viewer.