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: 布尔值,trueorfalseSTRING: 字符串类型,内部采用ICU4C框架的icu::UnicodeString类CHAR: 字符类型,底下是一个UChar32NUMBER: 数类型,目前对int和float做了简单支持SYMBOL: 符号类型,表示 pscm 代码中的一个符号PAIR: pscm中的list是由一个又一个PAIR嵌套起来表达的FUNCTION:C++函数类型,执行的是C++代码,暂不支持在这个函数内调用 pscm 的代码PROCEDURE: pscm 函数类型,该函数由 pscm 代码定义MACRO: 宏类型,目前还未支持了自定义的 lisp-style 宏CONTINUATION: 用于表达call/cc中的 continuation 概念,目前通过拷贝栈的方式实现了 continuation