Cell
Cell
在pscm中表达scheme object的概念。 所有在pscm代码中出现的事物都是用 Cell
来表示的。
cpp
class Cell {
Tag tag_ = Tag::NONE;
void *data_ = nullptr;
};
Cell
由 Tag
和 data
两个部分组成。 Tag
表明具体的数据类型,data
指向这个具体数据的地址。
⚠️:关于 Cell
是用指针还是用值,这个是暂时没有想清楚的,所以暂时不管。
目前 Cell
中存储的数据类型有
NONE
: 默认值,对应scheme中的 unspecifiedEXCEPTION
: 暂时用来存放C++代码中出现的异常NIL
: 空列表BOOL
: 布尔值,true
orfalse
STRING
: 字符串类型,内部采用ICU4C框架的icu::UnicodeString
类CHAR
: 字符类型,底下是一个UChar32
NUMBER
: 数类型,目前对int
和float
做了简单支持SYMBOL
: 符号类型,表示 pscm 代码中的一个符号PAIR
: pscm中的list是由一个又一个PAIR
嵌套起来表达的FUNCTION
:C++
函数类型,执行的是C++
代码,暂不支持在这个函数内调用 pscm 的代码PROCEDURE
: pscm 函数类型,该函数由 pscm 代码定义MACRO
: 宏类型,目前还未支持了自定义的 lisp-style 宏CONTINUATION
: 用于表达call/cc
中的 continuation 概念,目前通过拷贝栈的方式实现了 continuation