(+ "123" "456")

This commit is contained in:
Hojun Choi 2024-09-02 17:41:19 +09:00
parent e26eefc279
commit ded2940768

27
eval.c
View File

@ -120,10 +120,10 @@ fncons(Object *env, Object *list)
} }
Object* Object*
fnplus(Object *env, Object *list) plusint(Object *env, Object *p)
{ {
long sum = 0; long sum = 0;
for(Object *p=evallist(env, list); p!=&Nil; p=p->cdr){ for(;p!=&Nil; p=p->cdr){
if(p->car->type != OINT) if(p->car->type != OINT)
error("+ take only number"); error("+ take only number");
sum += p->car->num; sum += p->car->num;
@ -131,6 +131,29 @@ fnplus(Object *env, Object *list)
return newint(gc, sum); return newint(gc, sum);
} }
Object*
plusstr(Object *env, Object *p)
{
Object *str = newstr(gc, 16);
for(;p!=&Nil; p=p->cdr){
if(p->car->type != OSTRING)
error("+ take only number");
strputs(str, p->car->beg);
}
return str;
}
Object*
fnplus(Object *env, Object *list)
{
Object *p=evallist(env, list);
switch(p->car->type){
default: error("+ take only [STRING, INT]");
case OSTRING: return plusstr(env ,p);
case OINT: return plusint(env, p);
}
}
static Object* static Object*
evallist(Object *env, Object *list) evallist(Object *env, Object *list)
{ {