Ignore:
Timestamp:
Apr 17, 2011, 10:28:28 AM (11 years ago)
Author:
Sam Hocevar
Message:

lisp: implement LispNumber::Create.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • abuse/trunk/src/lisp/lisp.cpp

    r485 r486  
    442442}
    443443
    444 LispNumber *new_lisp_number(long num)
    445 {
    446   LispNumber *s=(LispNumber *)lmalloc(sizeof(LispNumber), current_space);
    447   s->type=L_NUMBER;
    448   s->num=num;
    449   return s;
     444LispNumber *LispNumber::Create(long num)
     445{
     446    LispNumber *s = (LispNumber *)lmalloc(sizeof(LispNumber), current_space);
     447    s->type = L_NUMBER;
     448    s->num = num;
     449    return s;
    450450}
    451451
     
    12121212  else if (isdigit(n[0]) || (n[0]=='-' && isdigit(n[1])))
    12131213  {
    1214     LispNumber *num=new_lisp_number(0);
     1214    LispNumber *num = LispNumber::Create(0);
    12151215    sscanf(n, "%ld", &num->num);
    12161216    ret=num;
     
    15251525      }
    15261526      if(t == L_C_FUNCTION)
    1527         ret=new_lisp_number(c_caller( ((LispSysFunction *)fun)->fun_number, first));
     1527        ret = LispNumber::Create(c_caller( ((LispSysFunction *)fun)->fun_number, first));
    15281528      else if (c_caller( ((LispSysFunction *)fun)->fun_number, first))
    15291529        ret=true_symbol;
     
    18121812      switch (item_type(v))
    18131813      {
    1814         case L_STRING : ret=new_lisp_number(strlen(lstring_value(v))); break;
    1815         case L_CONS_CELL : ret=new_lisp_number(list_length(v)); break;
     1814        case L_STRING : ret = LispNumber::Create(strlen(lstring_value(v))); break;
     1815        case L_CONS_CELL : ret = LispNumber::Create(list_length(v)); break;
    18161816        default :
    18171817        { lprint(v);
     
    18691869    arg_list=CDR(arg_list);
    18701870      }
    1871       ret=new_lisp_number(sum);
     1871      ret = LispNumber::Create(sum);
    18721872    }
    18731873    break;
     
    18961896      if (arg_list) first=eval(CAR(arg_list));
    18971897    } while (arg_list);
    1898     ret=new_lisp_number(sum);
     1898    ret = LispNumber::Create(sum);
    18991899      }
    19001900    }
     
    19201920    arg_list=CDR(arg_list);
    19211921      }
    1922       ret=new_lisp_number(sum);
     1922      ret = LispNumber::Create(sum);
    19231923    }
    19241924    break;
     
    19311931    arg_list=CDR(arg_list);
    19321932      }
    1933       ret=new_lisp_number(x);
     1933      ret = LispNumber::Create(x);
    19341934    }
    19351935    break;
     
    21832183      {
    21842184        case L_CHARACTER :
    2185         { ret=new_lisp_number(((LispChar *)i)->ch); } break;
     2185        { ret = LispNumber::Create(((LispChar *)i)->ch); } break;
    21862186        case L_STRING :
    2187         {  ret=new_lisp_number(*lstring_value(i)); } break;
     2187        {  ret = LispNumber::Create(*lstring_value(i)); } break;
    21882188        default :
    21892189        {
     
    24122412    } break;
    24132413    case SYS_FUNC_ABS:
    2414       ret=new_lisp_number(abs(lnumber_value(eval(CAR(arg_list))))); break;
     2414      ret = LispNumber::Create(abs(lnumber_value(eval(CAR(arg_list))))); break;
    24152415    case SYS_FUNC_MIN:
    24162416    {
    24172417      int x=lnumber_value(eval(CAR(arg_list))), y=lnumber_value(eval(CAR(CDR(arg_list))));
    2418       if (x<y) ret=new_lisp_number(x); else ret=new_lisp_number(y);
     2418      ret = LispNumber::Create(x < y ? x : y);
    24192419    } break;
    24202420    case SYS_FUNC_MAX:
    24212421    {
    24222422      int x=lnumber_value(eval(CAR(arg_list))), y=lnumber_value(eval(CAR(CDR(arg_list))));
    2423       if (x>y) ret=new_lisp_number(x); else ret=new_lisp_number(y);
     2423      ret = LispNumber::Create(x > y ? x : y);
    24242424    } break;
    24252425    case SYS_FUNC_BACKQUOTE:
     
    24512451      long y=(lnumber_value(eval(CAR(arg_list))));   arg_list=CDR(arg_list);
    24522452      long x=(lnumber_value(eval(CAR(arg_list))));
    2453       ret=new_lisp_number(lisp_atan2(y, x));
     2453      ret = LispNumber::Create(lisp_atan2(y, x));
    24542454    } break;
    24552455    case SYS_FUNC_ENUM:
     
    24652465    {
    24662466      case L_SYMBOL :
    2467       { ((LispSymbol *)sym)->value=new_lisp_number(x); } break;
     2467      { ((LispSymbol *)sym)->value = LispNumber::Create(x); } break;
    24682468      case L_CONS_CELL :
    24692469      {
     
    24782478#endif
    24792479        x=lnumber_value(eval(CAR(CDR(sym))));
    2480         ((LispSymbol *)sym)->value=new_lisp_number(x);
     2480        ((LispSymbol *)sym)->value = LispNumber::Create(x);
    24812481      } break;
    24822482      default :
     
    25062506      long y=lnumber_value(eval(CAR(arg_list)));
    25072507      if (y==0) { lbreak("mod : division by zero\n"); y=1; }
    2508       ret=new_lisp_number(x%y);
     2508      ret = LispNumber::Create(x%y);
    25092509    } break;
    25102510/*    case SYS_FUNC_WRITE_PROFILE:
     
    25852585                arg_list=CDR(arg_list);
    25862586      }
    2587       ret=new_lisp_number(first);
     2587      ret = LispNumber::Create(first);
    25882588    } break;
    25892589    case SYS_FUNC_BIT_OR:
     
    25952595                arg_list=CDR(arg_list);
    25962596      }
    2597       ret=new_lisp_number(first);
     2597      ret = LispNumber::Create(first);
    25982598    } break;
    25992599    case SYS_FUNC_BIT_XOR:
     
    26052605                arg_list=CDR(arg_list);
    26062606      }
    2607       ret=new_lisp_number(first);
     2607      ret = LispNumber::Create(first);
    26082608    } break;
    26092609    case SYS_FUNC_MAKE_ARRAY:
     
    26662666      char *find=strstr(haystack, needle);
    26672667      if (find)
    2668         ret=new_lisp_number(find-haystack);
     2668        ret = LispNumber::Create(find-haystack);
    26692669      else ret=NULL;
    26702670    } break;
     
    31533153        ((LispNumber *)value)->num = num;
    31543154    else
    3155         value = new_lisp_number(num);
     3155        value = LispNumber::Create(num);
    31563156}
    31573157
Note: See TracChangeset for help on using the changeset viewer.