started writing qse_scm_eval()
This commit is contained in:
parent
5b60fd18f6
commit
2c48b27f9a
@ -232,18 +232,27 @@ void qse_scm_detachio (
|
||||
qse_scm_t* scm /**< scheme */
|
||||
);
|
||||
|
||||
/**
|
||||
* The qse_scm_read() function reads a textual expression into an entity.
|
||||
*/
|
||||
qse_scm_ent_t* qse_scm_read (
|
||||
qse_scm_t* scm /**< scheme */
|
||||
);
|
||||
|
||||
/**
|
||||
* The qse_scm_eval() function evaluates an entity.
|
||||
*/
|
||||
qse_scm_ent_t* qse_scm_eval (
|
||||
qse_scm_t* scm, /**< scheme */
|
||||
qse_scm_ent_t* obj
|
||||
qse_scm_ent_t* obj /**< entity */
|
||||
);
|
||||
|
||||
/**
|
||||
* The qse_scm_print() function prints an entity.
|
||||
*/
|
||||
int qse_scm_print (
|
||||
qse_scm_t* scm, /**< scheme */
|
||||
const qse_scm_ent_t* obj
|
||||
const qse_scm_ent_t* obj /**< entity */
|
||||
);
|
||||
|
||||
/**
|
||||
@ -253,22 +262,6 @@ void qse_scm_gc (
|
||||
qse_scm_t* scm /**< scheme */
|
||||
);
|
||||
|
||||
|
||||
int qse_scm_addprim (
|
||||
qse_scm_t* scm,
|
||||
const qse_char_t* name,
|
||||
qse_size_t name_len,
|
||||
qse_scm_prim_t prim,
|
||||
qse_size_t min_args,
|
||||
qse_size_t max_args
|
||||
);
|
||||
|
||||
int qse_scm_removeprim (
|
||||
qse_scm_t* scm,
|
||||
const qse_char_t* name
|
||||
);
|
||||
|
||||
|
||||
qse_scm_ent_t* qse_scm_makepairent (
|
||||
qse_scm_t* scm,
|
||||
qse_scm_ent_t* car,
|
||||
|
89
qse/lib/scm/eval.c
Normal file
89
qse/lib/scm/eval.c
Normal file
@ -0,0 +1,89 @@
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
This file is part of QSE.
|
||||
|
||||
QSE is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as
|
||||
published by the Free Software Foundation, either version 3 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
QSE is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with QSE. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "scm.h"
|
||||
|
||||
static qse_scm_ent_t* apply (qse_scm_t* scm)
|
||||
{
|
||||
if (TYPE(scm->reg.cod) == QSE_SCM_ENT_PROC)
|
||||
{
|
||||
/* builtin-procedure */
|
||||
}
|
||||
#if 0
|
||||
else if (TYPE(scm->reg.cod) == QSE_SCM_ENT_CLO)
|
||||
{
|
||||
/* closure */
|
||||
}
|
||||
else if (TYPE(scm->reg.cod) == QSE_SCM_ENT_CON)
|
||||
{
|
||||
/* continuation */
|
||||
}
|
||||
#endif
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
static qse_scm_ent_t* eval_args (qse_scm_t* scm)
|
||||
{
|
||||
args = cons (value, args);
|
||||
if (TYPE(scm->reg.cod))
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
static qse_scm_ent_t* eval_entity (qse_scm_t* scm)
|
||||
{
|
||||
|
||||
if (IS_SMALLINT(scm->reg.cod))
|
||||
{
|
||||
}
|
||||
else if (TYPE(scm->reg.cod) == QSE_SCM_ENT_SYM)
|
||||
{
|
||||
}
|
||||
else if (TYPE(scm->reg.cod) == QSE_SCM_ENT_PAIR)
|
||||
{
|
||||
car = PAIR_CAR(scm->reg.cod);
|
||||
if (SYNT(car))
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
push E1_ARG.... NIL, PAIR_CDR(code)
|
||||
scm->reg.cod = car;
|
||||
goback to eval...
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
qse_scm_ent_t* qse_scm_eval (qse_scm_t* scm, qse_scm_ent_t* obj)
|
||||
{
|
||||
scm->reg.dmp = scm->nil;
|
||||
scm->reg.env = scm->gloenv;
|
||||
scm->reg.cod = obj;
|
||||
|
||||
return eval_entity (scm);
|
||||
}
|
Loading…
Reference in New Issue
Block a user