*** empty log message ***
This commit is contained in:
parent
d75ec654c9
commit
ffe1527b0b
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: lisp.c,v 1.6 2005-02-05 05:43:55 bacon Exp $
|
* $Id: lisp.c,v 1.7 2005-02-07 15:10:41 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/lisp/lisp.h>
|
#include <xp/lisp/lisp.h>
|
||||||
@ -55,7 +55,7 @@ void xp_lisp_free (xp_lisp_t* lsp)
|
|||||||
free (lsp);
|
free (lsp);
|
||||||
}
|
}
|
||||||
|
|
||||||
int xp_lisp_error (xp_lisp_t* lsp, xp_lisp_char* buf, xp_size_t size)
|
int xp_lisp_error (xp_lisp_t* lsp, xp_char_t* buf, xp_size_t size)
|
||||||
{
|
{
|
||||||
if (buf != XP_NULL || size == 0) return lsp->error;
|
if (buf != XP_NULL || size == 0) return lsp->error;
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: lisp.h,v 1.2 2005-02-04 16:00:37 bacon Exp $
|
* $Id: lisp.h,v 1.3 2005-02-07 15:10:41 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _XP_LISP_LISP_H_
|
#ifndef _XP_LISP_LISP_H_
|
||||||
@ -15,7 +15,7 @@
|
|||||||
// NOTICE: the function of xp_lisp_creader_t must return -1 on error
|
// NOTICE: the function of xp_lisp_creader_t must return -1 on error
|
||||||
// and 0 on success. the first argument must be set to
|
// and 0 on success. the first argument must be set to
|
||||||
// XP_LISP_END_CHAR at the end of input.
|
// XP_LISP_END_CHAR at the end of input.
|
||||||
typedef int (*xp_lisp_creader_t) (xp_lisp_cint*, void*);
|
typedef int (*xp_lisp_creader_t) (xp_cint_t*, void*);
|
||||||
|
|
||||||
#define XP_LISP_ERR(lsp) ((lsp)->error)
|
#define XP_LISP_ERR(lsp) ((lsp)->error)
|
||||||
#define XP_LISP_ERR_NONE 0
|
#define XP_LISP_ERR_NONE 0
|
||||||
@ -43,7 +43,7 @@ struct xp_lisp_t
|
|||||||
int opt_undef_symbol;
|
int opt_undef_symbol;
|
||||||
|
|
||||||
/* for read */
|
/* for read */
|
||||||
xp_lisp_cint curc;
|
xp_cint_t curc;
|
||||||
xp_lisp_creader_t creader;
|
xp_lisp_creader_t creader;
|
||||||
void* creader_extra;
|
void* creader_extra;
|
||||||
int creader_just_set;
|
int creader_just_set;
|
||||||
@ -69,7 +69,7 @@ extern "C" {
|
|||||||
/* lsp.c */
|
/* lsp.c */
|
||||||
xp_lisp_t* xp_lisp_new (xp_size_t mem_ubound, xp_size_t mem_ubound_inc);
|
xp_lisp_t* xp_lisp_new (xp_size_t mem_ubound, xp_size_t mem_ubound_inc);
|
||||||
void xp_lisp_free (xp_lisp_t* lsp);
|
void xp_lisp_free (xp_lisp_t* lsp);
|
||||||
int xp_lisp_error (xp_lisp_t* lsp, xp_lisp_char* buf, xp_size_t size);
|
int xp_lisp_error (xp_lisp_t* lsp, xp_char_t* buf, xp_size_t size);
|
||||||
|
|
||||||
/* read.c */
|
/* read.c */
|
||||||
// TODO: move xp_lisp_set_creader to lsp.c
|
// TODO: move xp_lisp_set_creader to lsp.c
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: memory.c,v 1.7 2005-02-05 06:28:13 bacon Exp $
|
* $Id: memory.c,v 1.8 2005-02-07 15:10:41 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/lisp/memory.h>
|
#include <xp/lisp/memory.h>
|
||||||
@ -55,9 +55,9 @@ xp_lisp_mem_t* xp_lisp_mem_new (xp_size_t ubound, xp_size_t ubound_inc)
|
|||||||
// initialize common object pointers
|
// initialize common object pointers
|
||||||
mem->nil = xp_lisp_make_nil (mem);
|
mem->nil = xp_lisp_make_nil (mem);
|
||||||
mem->t = xp_lisp_make_true (mem);
|
mem->t = xp_lisp_make_true (mem);
|
||||||
mem->quote = xp_lisp_make_symbol (mem,XP_TEXT("quote"), 5);
|
mem->quote = xp_lisp_make_symbol (mem, XP_TEXT("quote"), 5);
|
||||||
mem->lambda = xp_lisp_make_symbol (mem,XP_TEXT("lambda"), 6);
|
mem->lambda = xp_lisp_make_symbol (mem, XP_TEXT("lambda"), 6);
|
||||||
mem->macro = xp_lisp_make_symbol (mem,XP_TEXT("macro"), 5);
|
mem->macro = xp_lisp_make_symbol (mem, XP_TEXT("macro"), 5);
|
||||||
|
|
||||||
if (mem->nil == XP_NULL ||
|
if (mem->nil == XP_NULL ||
|
||||||
mem->t == XP_NULL ||
|
mem->t == XP_NULL ||
|
||||||
@ -92,7 +92,7 @@ void xp_lisp_mem_free (xp_lisp_mem_t* mem)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int xp_lisp_add_prim (
|
static int xp_lisp_add_prim (
|
||||||
xp_lisp_mem_t* mem, const xp_lisp_char* name, xp_size_t len, xp_lisp_pimpl_t prim)
|
xp_lisp_mem_t* mem, const xp_char_t* name, xp_size_t len, xp_lisp_pimpl_t prim)
|
||||||
{
|
{
|
||||||
xp_lisp_obj_t* n, * p;
|
xp_lisp_obj_t* n, * p;
|
||||||
|
|
||||||
@ -407,7 +407,8 @@ xp_lisp_obj_t* xp_lisp_make_float (xp_lisp_mem_t* mem, xp_lisp_float value)
|
|||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
xp_lisp_obj_t* xp_lisp_make_symbol (xp_lisp_mem_t* mem, const xp_lisp_char* str, xp_size_t len)
|
xp_lisp_obj_t* xp_lisp_make_symbol (
|
||||||
|
xp_lisp_mem_t* mem, const xp_char_t* str, xp_size_t len)
|
||||||
{
|
{
|
||||||
xp_lisp_obj_t* obj;
|
xp_lisp_obj_t* obj;
|
||||||
|
|
||||||
@ -421,7 +422,7 @@ xp_lisp_obj_t* xp_lisp_make_symbol (xp_lisp_mem_t* mem, const xp_lisp_char* str,
|
|||||||
|
|
||||||
// no such symbol found. create a new one
|
// no such symbol found. create a new one
|
||||||
obj = xp_lisp_allocate (mem, XP_LISP_OBJ_SYMBOL,
|
obj = xp_lisp_allocate (mem, XP_LISP_OBJ_SYMBOL,
|
||||||
sizeof(xp_lisp_obj_symbol_t) + (len + 1) * sizeof(xp_lisp_char));
|
sizeof(xp_lisp_obj_symbol_t) + (len + 1) * sizeof(xp_char_t));
|
||||||
if (obj == XP_NULL) return XP_NULL;
|
if (obj == XP_NULL) return XP_NULL;
|
||||||
|
|
||||||
// fill in the symbol buffer
|
// fill in the symbol buffer
|
||||||
@ -430,13 +431,13 @@ xp_lisp_obj_t* xp_lisp_make_symbol (xp_lisp_mem_t* mem, const xp_lisp_char* str,
|
|||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
xp_lisp_obj_t* xp_lisp_make_string (xp_lisp_mem_t* mem, const xp_lisp_char* str, xp_size_t len)
|
xp_lisp_obj_t* xp_lisp_make_string (xp_lisp_mem_t* mem, const xp_char_t* str, xp_size_t len)
|
||||||
{
|
{
|
||||||
xp_lisp_obj_t* obj;
|
xp_lisp_obj_t* obj;
|
||||||
|
|
||||||
// allocate memory for the string
|
// allocate memory for the string
|
||||||
obj = xp_lisp_allocate (mem, XP_LISP_OBJ_STRING,
|
obj = xp_lisp_allocate (mem, XP_LISP_OBJ_STRING,
|
||||||
sizeof(xp_lisp_obj_string_t) + (len + 1) * sizeof(xp_lisp_char));
|
sizeof(xp_lisp_obj_string_t) + (len + 1) * sizeof(xp_char_t));
|
||||||
if (obj == XP_NULL) return XP_NULL;
|
if (obj == XP_NULL) return XP_NULL;
|
||||||
|
|
||||||
// fill in the string buffer
|
// fill in the string buffer
|
||||||
@ -559,9 +560,9 @@ int xp_lisp_probe_args (xp_lisp_mem_t* mem, xp_lisp_obj_t* obj, xp_size_t* len)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int xp_lisp_comp_symbol (xp_lisp_obj_t* obj, const xp_lisp_char* str)
|
int xp_lisp_comp_symbol (xp_lisp_obj_t* obj, const xp_char_t* str)
|
||||||
{
|
{
|
||||||
xp_lisp_char* p;
|
xp_char_t* p;
|
||||||
xp_size_t index, length;
|
xp_size_t index, length;
|
||||||
|
|
||||||
xp_assert (XP_LISP_TYPE(obj) == XP_LISP_OBJ_SYMBOL);
|
xp_assert (XP_LISP_TYPE(obj) == XP_LISP_OBJ_SYMBOL);
|
||||||
@ -579,9 +580,9 @@ int xp_lisp_comp_symbol (xp_lisp_obj_t* obj, const xp_lisp_char* str)
|
|||||||
return (*str == XP_CHAR('\0'))? 0: -1;
|
return (*str == XP_CHAR('\0'))? 0: -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int xp_lisp_comp_symbol2 (xp_lisp_obj_t* obj, const xp_lisp_char* str, xp_size_t len)
|
int xp_lisp_comp_symbol2 (xp_lisp_obj_t* obj, const xp_char_t* str, xp_size_t len)
|
||||||
{
|
{
|
||||||
xp_lisp_char* p;
|
xp_char_t* p;
|
||||||
xp_size_t index, length;
|
xp_size_t index, length;
|
||||||
|
|
||||||
xp_assert (XP_LISP_TYPE(obj) == XP_LISP_OBJ_SYMBOL);
|
xp_assert (XP_LISP_TYPE(obj) == XP_LISP_OBJ_SYMBOL);
|
||||||
@ -600,9 +601,9 @@ int xp_lisp_comp_symbol2 (xp_lisp_obj_t* obj, const xp_lisp_char* str, xp_size_t
|
|||||||
(length > len)? 1: 0;
|
(length > len)? 1: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int xp_lisp_comp_string (xp_lisp_obj_t* obj, const xp_lisp_char* str)
|
int xp_lisp_comp_string (xp_lisp_obj_t* obj, const xp_char_t* str)
|
||||||
{
|
{
|
||||||
xp_lisp_char* p;
|
xp_char_t* p;
|
||||||
xp_size_t index, length;
|
xp_size_t index, length;
|
||||||
|
|
||||||
xp_assert (XP_LISP_TYPE(obj) == XP_LISP_OBJ_STRING);
|
xp_assert (XP_LISP_TYPE(obj) == XP_LISP_OBJ_STRING);
|
||||||
@ -620,9 +621,9 @@ int xp_lisp_comp_string (xp_lisp_obj_t* obj, const xp_lisp_char* str)
|
|||||||
return (*str == XP_CHAR('\0'))? 0: -1;
|
return (*str == XP_CHAR('\0'))? 0: -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int xp_lisp_comp_string2 (xp_lisp_obj_t* obj, const xp_lisp_char* str, xp_size_t len)
|
int xp_lisp_comp_string2 (xp_lisp_obj_t* obj, const xp_char_t* str, xp_size_t len)
|
||||||
{
|
{
|
||||||
xp_lisp_char* p;
|
xp_char_t* p;
|
||||||
xp_size_t index, length;
|
xp_size_t index, length;
|
||||||
|
|
||||||
xp_assert (XP_LISP_TYPE(obj) == XP_LISP_OBJ_STRING);
|
xp_assert (XP_LISP_TYPE(obj) == XP_LISP_OBJ_STRING);
|
||||||
@ -641,14 +642,14 @@ int xp_lisp_comp_string2 (xp_lisp_obj_t* obj, const xp_lisp_char* str, xp_size_t
|
|||||||
(length > len)? 1: 0;
|
(length > len)? 1: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void xp_lisp_copy_string (xp_lisp_char* dst, const xp_lisp_char* str)
|
void xp_lisp_copy_string (xp_char_t* dst, const xp_char_t* str)
|
||||||
{
|
{
|
||||||
// the buffer pointed by dst should be big enough to hold str
|
// the buffer pointed by dst should be big enough to hold str
|
||||||
while (*str != XP_CHAR('\0')) *dst++ = *str++;
|
while (*str != XP_CHAR('\0')) *dst++ = *str++;
|
||||||
*dst = XP_CHAR('\0');
|
*dst = XP_CHAR('\0');
|
||||||
}
|
}
|
||||||
|
|
||||||
void xp_lisp_copy_string2 (xp_lisp_char* dst, const xp_lisp_char* str, xp_size_t len)
|
void xp_lisp_copy_string2 (xp_char_t* dst, const xp_char_t* str, xp_size_t len)
|
||||||
{
|
{
|
||||||
// the buffer pointed by dst should be big enough to hold str
|
// the buffer pointed by dst should be big enough to hold str
|
||||||
while (len > 0) {
|
while (len > 0) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: memory.h,v 1.2 2005-02-04 16:00:37 bacon Exp $
|
* $Id: memory.h,v 1.3 2005-02-07 15:10:41 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _XP_LISP_MEM_H_
|
#ifndef _XP_LISP_MEM_H_
|
||||||
@ -70,8 +70,8 @@ xp_lisp_obj_t* xp_lisp_make_nil (xp_lisp_mem_t* mem);
|
|||||||
xp_lisp_obj_t* xp_lisp_make_true (xp_lisp_mem_t* mem);
|
xp_lisp_obj_t* xp_lisp_make_true (xp_lisp_mem_t* mem);
|
||||||
xp_lisp_obj_t* xp_lisp_make_int (xp_lisp_mem_t* mem, xp_lisp_int value);
|
xp_lisp_obj_t* xp_lisp_make_int (xp_lisp_mem_t* mem, xp_lisp_int value);
|
||||||
xp_lisp_obj_t* xp_lisp_make_float (xp_lisp_mem_t* mem, xp_lisp_float value);
|
xp_lisp_obj_t* xp_lisp_make_float (xp_lisp_mem_t* mem, xp_lisp_float value);
|
||||||
xp_lisp_obj_t* xp_lisp_make_symbol (xp_lisp_mem_t* mem, const xp_lisp_char* str, xp_size_t len);
|
xp_lisp_obj_t* xp_lisp_make_symbol (xp_lisp_mem_t* mem, const xp_char_t* str, xp_size_t len);
|
||||||
xp_lisp_obj_t* xp_lisp_make_string (xp_lisp_mem_t* mem, const xp_lisp_char* str, xp_size_t len);
|
xp_lisp_obj_t* xp_lisp_make_string (xp_lisp_mem_t* mem, const xp_char_t* str, xp_size_t len);
|
||||||
xp_lisp_obj_t* xp_lisp_make_cons (xp_lisp_mem_t* mem, xp_lisp_obj_t* car, xp_lisp_obj_t* cdr);
|
xp_lisp_obj_t* xp_lisp_make_cons (xp_lisp_mem_t* mem, xp_lisp_obj_t* car, xp_lisp_obj_t* cdr);
|
||||||
xp_lisp_obj_t* xp_lisp_make_func (xp_lisp_mem_t* mem, xp_lisp_obj_t* formal, xp_lisp_obj_t* body);
|
xp_lisp_obj_t* xp_lisp_make_func (xp_lisp_mem_t* mem, xp_lisp_obj_t* formal, xp_lisp_obj_t* body);
|
||||||
xp_lisp_obj_t* xp_lisp_make_macro (xp_lisp_mem_t* mem, xp_lisp_obj_t* formal, xp_lisp_obj_t* body);
|
xp_lisp_obj_t* xp_lisp_make_macro (xp_lisp_mem_t* mem, xp_lisp_obj_t* formal, xp_lisp_obj_t* body);
|
||||||
@ -86,12 +86,12 @@ xp_size_t xp_lisp_cons_len (xp_lisp_mem_t* mem, xp_lisp_obj_t* obj);
|
|||||||
int xp_lisp_probe_args (xp_lisp_mem_t* mem, xp_lisp_obj_t* obj, xp_size_t* len);
|
int xp_lisp_probe_args (xp_lisp_mem_t* mem, xp_lisp_obj_t* obj, xp_size_t* len);
|
||||||
|
|
||||||
// symbol and string operations
|
// symbol and string operations
|
||||||
int xp_lisp_comp_symbol (xp_lisp_obj_t* obj, const xp_lisp_char* str);
|
int xp_lisp_comp_symbol (xp_lisp_obj_t* obj, const xp_char_t* str);
|
||||||
int xp_lisp_comp_symbol2 (xp_lisp_obj_t* obj, const xp_lisp_char* str, xp_size_t len);
|
int xp_lisp_comp_symbol2 (xp_lisp_obj_t* obj, const xp_char_t* str, xp_size_t len);
|
||||||
int xp_lisp_comp_string (xp_lisp_obj_t* obj, const xp_lisp_char* str);
|
int xp_lisp_comp_string (xp_lisp_obj_t* obj, const xp_char_t* str);
|
||||||
int xp_lisp_comp_string2 (xp_lisp_obj_t* obj, const xp_lisp_char* str, xp_size_t len);
|
int xp_lisp_comp_string2 (xp_lisp_obj_t* obj, const xp_char_t* str, xp_size_t len);
|
||||||
void xp_lisp_copy_string (xp_lisp_char* dst, const xp_lisp_char* str);
|
void xp_lisp_copy_string (xp_char_t* dst, const xp_char_t* str);
|
||||||
void xp_lisp_copy_string2 (xp_lisp_char* dst, const xp_lisp_char* str, xp_size_t len);
|
void xp_lisp_copy_string2 (xp_char_t* dst, const xp_char_t* str, xp_size_t len);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: object.h,v 1.2 2005-02-04 16:00:37 bacon Exp $
|
* $Id: object.h,v 1.3 2005-02-07 15:10:41 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _XP_LISP_OBJECT_H_
|
#ifndef _XP_LISP_OBJECT_H_
|
||||||
@ -63,7 +63,7 @@ struct xp_lisp_obj_symbol_t
|
|||||||
XP_LISP_OBJ_HEADER;
|
XP_LISP_OBJ_HEADER;
|
||||||
#ifdef __BORLANDC__
|
#ifdef __BORLANDC__
|
||||||
#else
|
#else
|
||||||
xp_lisp_char buffer[0];
|
xp_char_t buffer[0];
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -72,7 +72,7 @@ struct xp_lisp_obj_string_t
|
|||||||
XP_LISP_OBJ_HEADER;
|
XP_LISP_OBJ_HEADER;
|
||||||
#ifdef __BORLANDC__
|
#ifdef __BORLANDC__
|
||||||
#else
|
#else
|
||||||
xp_lisp_char buffer[0];
|
xp_char_t buffer[0];
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -127,18 +127,18 @@ typedef struct xp_lisp_obj_prim_t xp_lisp_obj_prim_t;
|
|||||||
#define XP_LISP_FVALUE(x) (((xp_lisp_obj_float_t*)x)->value)
|
#define XP_LISP_FVALUE(x) (((xp_lisp_obj_float_t*)x)->value)
|
||||||
|
|
||||||
#ifdef __BORLANDC__
|
#ifdef __BORLANDC__
|
||||||
#define XP_LISP_SYMVALUE(x) ((xp_lisp_char*)(((xp_lisp_obj_symbol_t*)x) + 1))
|
#define XP_LISP_SYMVALUE(x) ((xp_char_t*)(((xp_lisp_obj_symbol_t*)x) + 1))
|
||||||
#else
|
#else
|
||||||
#define XP_LISP_SYMVALUE(x) (((xp_lisp_obj_symbol_t*)x)->buffer)
|
#define XP_LISP_SYMVALUE(x) (((xp_lisp_obj_symbol_t*)x)->buffer)
|
||||||
#endif
|
#endif
|
||||||
#define XP_LISP_SYMLEN(x) ((((xp_lisp_obj_symbol_t*)x)->size - sizeof(xp_lisp_obj_t)) / sizeof(xp_lisp_char) - 1)
|
#define XP_LISP_SYMLEN(x) ((((xp_lisp_obj_symbol_t*)x)->size - sizeof(xp_lisp_obj_t)) / sizeof(xp_char_t) - 1)
|
||||||
|
|
||||||
#ifdef __BORLANDC__
|
#ifdef __BORLANDC__
|
||||||
#define XP_LISP_STRVALUE(x) ((xp_lisp_char*)(((xp_lisp_obj_string_t*)x) + 1))
|
#define XP_LISP_STRVALUE(x) ((xp_char_t*)(((xp_lisp_obj_string_t*)x) + 1))
|
||||||
#else
|
#else
|
||||||
#define XP_LISP_STRVALUE(x) (((xp_lisp_obj_string_t*)x)->buffer)
|
#define XP_LISP_STRVALUE(x) (((xp_lisp_obj_string_t*)x)->buffer)
|
||||||
#endif
|
#endif
|
||||||
#define XP_LISP_STRLEN(x) ((((xp_lisp_obj_string_t*)x)->size - sizeof(xp_lisp_obj_t)) / sizeof(xp_lisp_char) - 1)
|
#define XP_LISP_STRLEN(x) ((((xp_lisp_obj_string_t*)x)->size - sizeof(xp_lisp_obj_t)) / sizeof(xp_char_t) - 1)
|
||||||
|
|
||||||
#define XP_LISP_CAR(x) (((xp_lisp_obj_cons_t*)x)->car)
|
#define XP_LISP_CAR(x) (((xp_lisp_obj_cons_t*)x)->car)
|
||||||
#define XP_LISP_CDR(x) (((xp_lisp_obj_cons_t*)x)->cdr)
|
#define XP_LISP_CDR(x) (((xp_lisp_obj_cons_t*)x)->cdr)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: token.c,v 1.6 2005-02-05 05:43:55 bacon Exp $
|
* $Id: token.c,v 1.7 2005-02-07 15:10:41 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <xp/lisp/token.h>
|
#include <xp/lisp/token.h>
|
||||||
@ -15,7 +15,7 @@ xp_lisp_token_t* xp_lisp_token_new (xp_size_t capacity)
|
|||||||
token = (xp_lisp_token_t*)xp_malloc (sizeof(xp_lisp_token_t));
|
token = (xp_lisp_token_t*)xp_malloc (sizeof(xp_lisp_token_t));
|
||||||
if (token == XP_NULL) return XP_NULL;
|
if (token == XP_NULL) return XP_NULL;
|
||||||
|
|
||||||
token->buffer = (xp_lisp_char*)xp_malloc ((capacity + 1) * sizeof(xp_lisp_char));
|
token->buffer = (xp_char_t*)xp_malloc ((capacity + 1) * sizeof(xp_char_t));
|
||||||
if (token->buffer == XP_NULL) {
|
if (token->buffer == XP_NULL) {
|
||||||
xp_free (token);
|
xp_free (token);
|
||||||
return XP_NULL;
|
return XP_NULL;
|
||||||
@ -37,12 +37,12 @@ void xp_lisp_token_free (xp_lisp_token_t* token)
|
|||||||
xp_free (token);
|
xp_free (token);
|
||||||
}
|
}
|
||||||
|
|
||||||
int xp_lisp_token_addc (xp_lisp_token_t* token, xp_lisp_cint c)
|
int xp_lisp_token_addc (xp_lisp_token_t* token, xp_cint_t c)
|
||||||
{
|
{
|
||||||
if (token->size >= token->capacity) {
|
if (token->size >= token->capacity) {
|
||||||
// double the capacity.
|
// double the capacity.
|
||||||
xp_lisp_char* new_buffer = (xp_lisp_char*)realloc (
|
xp_char_t* new_buffer = (xp_char_t*)realloc (
|
||||||
token->buffer, (token->capacity * 2 + 1) * sizeof(xp_lisp_char));
|
token->buffer, (token->capacity * 2 + 1) * sizeof(xp_char_t));
|
||||||
if (new_buffer == XP_NULL) return -1;
|
if (new_buffer == XP_NULL) return -1;
|
||||||
token->buffer = new_buffer;
|
token->buffer = new_buffer;
|
||||||
token->capacity = token->capacity * 2;
|
token->capacity = token->capacity * 2;
|
||||||
@ -62,11 +62,11 @@ void xp_lisp_token_clear (xp_lisp_token_t* token)
|
|||||||
token->buffer[0] = XP_CHAR('\0');
|
token->buffer[0] = XP_CHAR('\0');
|
||||||
}
|
}
|
||||||
|
|
||||||
xp_lisp_char* xp_lisp_token_transfer (xp_lisp_token_t* token, xp_size_t capacity)
|
xp_char_t* xp_lisp_token_transfer (xp_lisp_token_t* token, xp_size_t capacity)
|
||||||
{
|
{
|
||||||
xp_lisp_char* old_buffer, * new_buffer;
|
xp_char_t* old_buffer, * new_buffer;
|
||||||
|
|
||||||
new_buffer = (xp_lisp_char*)xp_malloc((capacity + 1) * sizeof(xp_lisp_char));
|
new_buffer = (xp_char_t*)xp_malloc((capacity + 1) * sizeof(xp_char_t));
|
||||||
if (new_buffer == XP_NULL) return XP_NULL;
|
if (new_buffer == XP_NULL) return XP_NULL;
|
||||||
|
|
||||||
old_buffer = token->buffer;
|
old_buffer = token->buffer;
|
||||||
@ -78,9 +78,9 @@ xp_lisp_char* xp_lisp_token_transfer (xp_lisp_token_t* token, xp_size_t capacity
|
|||||||
return old_buffer;
|
return old_buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
int xp_lisp_token_compare (xp_lisp_token_t* token, const xp_lisp_char* str)
|
int xp_lisp_token_compare (xp_lisp_token_t* token, const xp_char_t* str)
|
||||||
{
|
{
|
||||||
xp_lisp_char* p = token->buffer;
|
xp_char_t* p = token->buffer;
|
||||||
xp_size_t index = 0;
|
xp_size_t index = 0;
|
||||||
|
|
||||||
while (index < token->size) {
|
while (index < token->size) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: token.h,v 1.3 2005-02-04 16:03:25 bacon Exp $
|
* $Id: token.h,v 1.4 2005-02-07 15:10:41 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _XP_LISP_TOKEN_H_
|
#ifndef _XP_LISP_TOKEN_H_
|
||||||
@ -16,7 +16,7 @@ struct xp_lisp_token_t
|
|||||||
|
|
||||||
xp_size_t capacity;
|
xp_size_t capacity;
|
||||||
xp_size_t size;
|
xp_size_t size;
|
||||||
xp_lisp_char* buffer;
|
xp_char_t* buffer;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct xp_lisp_token_t xp_lisp_token_t;
|
typedef struct xp_lisp_token_t xp_lisp_token_t;
|
||||||
@ -27,10 +27,10 @@ extern "C" {
|
|||||||
|
|
||||||
xp_lisp_token_t* xp_lisp_token_new (xp_size_t capacity);
|
xp_lisp_token_t* xp_lisp_token_new (xp_size_t capacity);
|
||||||
void xp_lisp_token_free (xp_lisp_token_t* token);
|
void xp_lisp_token_free (xp_lisp_token_t* token);
|
||||||
int xp_lisp_token_addc (xp_lisp_token_t* token, xp_lisp_cint c);
|
int xp_lisp_token_addc (xp_lisp_token_t* token, xp_cint_t c);
|
||||||
void xp_lisp_token_clear (xp_lisp_token_t* token);
|
void xp_lisp_token_clear (xp_lisp_token_t* token);
|
||||||
xp_lisp_char* xp_lisp_token_transfer (xp_lisp_token_t* token, xp_size_t capacity);
|
xp_char_t* xp_lisp_token_transfer (xp_lisp_token_t* token, xp_size_t capacity);
|
||||||
int xp_lisp_token_compare (xp_lisp_token_t* token, const xp_lisp_char* str);
|
int xp_lisp_token_compare (xp_lisp_token_t* token, const xp_char_t* str);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: types.h,v 1.3 2005-02-04 16:23:34 bacon Exp $
|
* $Id: types.h,v 1.4 2005-02-07 15:10:41 bacon Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _XP_LISP_TYPES_H_
|
#ifndef _XP_LISP_TYPES_H_
|
||||||
@ -8,7 +8,6 @@
|
|||||||
#include <xp/types.h>
|
#include <xp/types.h>
|
||||||
#include <xp/macros.h>
|
#include <xp/macros.h>
|
||||||
|
|
||||||
typedef xp_char_t xp_lisp_char;
|
|
||||||
typedef xp_cint_t xp_lisp_cint;
|
typedef xp_cint_t xp_lisp_cint;
|
||||||
typedef xp_long_t xp_lisp_int;
|
typedef xp_long_t xp_lisp_int;
|
||||||
typedef xp_real_t xp_lisp_float;
|
typedef xp_real_t xp_lisp_float;
|
||||||
|
@ -33,6 +33,8 @@ int to_int (const xp_char_t* str)
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include <locale.h>
|
||||||
|
|
||||||
int xp_main (int argc, xp_char_t* argv[])
|
int xp_main (int argc, xp_char_t* argv[])
|
||||||
{
|
{
|
||||||
xp_lisp_t* lisp;
|
xp_lisp_t* lisp;
|
||||||
@ -41,6 +43,9 @@ int xp_main (int argc, xp_char_t* argv[])
|
|||||||
#ifdef LINUX
|
#ifdef LINUX
|
||||||
mtrace ();
|
mtrace ();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
setlocale (LC_ALL, "");
|
||||||
|
|
||||||
if (argc != 3) {
|
if (argc != 3) {
|
||||||
xp_fprintf (xp_stderr, XP_TEXT("usage: %s mem_ubound mem_ubound_inc\n"), argv[0]);
|
xp_fprintf (xp_stderr, XP_TEXT("usage: %s mem_ubound mem_ubound_inc\n"), argv[0]);
|
||||||
return -1;
|
return -1;
|
||||||
|
Loading…
Reference in New Issue
Block a user