(+ "123" "456")
This commit is contained in:
parent
e26eefc279
commit
ded2940768
27
eval.c
27
eval.c
@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user