内置对象

3. 内置对象

list对象

typedef struct objlist {
ObjHeader objHeader;
ValueBuffer elements;
} ObjList;
newObjList
removeElement
insertElement

range对象

typedef struct objrange {
ObjHeader objHeader;
int from;
int to;
} ObjRange;

map对象

typedef struct Entry {
Value key;
Value value;
} Entry; // entry是分配在堆中的, 因为ObjMap中Entries是可变的
typedef struct ObjMap {
ObjHeader objHeader;
int capacity;
int count;
Entry *entries;
} ObjMap;
方法
mapSet
注意: 在mapSet过程中, 可能容量会不够, 所以需要扩容, 但是与List扩容方式不同, 因为存储元素不是连续的, 需要先分配一个新的entries, 接着为新的entries的key和value赋新值, 接着遍历老的entries, 将key为undefined类型的value赋值到新的entries中
mapGet
clearMap
注意: 这里的clear是清空entries中的key与value的type, 同时去掉ObjHeader(考虑到GC回收), 而不是回收entries或者map
removeMap

thread对象

typedef struct ObjThread {
ObjHeader objHeader;
Value *stack; // 线程栈的栈底
Value *esp; // 线程栈的栈顶
Frame *frames; // 数组, 初始一个线程有4个
uint32_t unused_frame; // 最新可用frame
uint32_t frame_capacity; // 该线程对象的Frame容量
ObjUpvalue *openUpvalue; // 用于缓存
ObjHeader *caller; // 调用该线程的程序
Value errorObj; // 导致运行时错误的对象会放在此处, 否则为空, 存放的报错信息, 可想而知是ObjString对象
} ObjThread;
prepareThread(ObjThread, ObjClosure, Value *stackStart) -> 主要是初始化该线程对象中最新的Frame, 将ObjClosure和stackStart赋给Frame, 接下来可能要通过Frame进行函数调用了

算法

  • hashObj, 主要是从对象中提取出数字或者字符串进行hash即可
posted @   gogogo11  阅读(174)  评论(0编辑  收藏  举报
编辑推荐:
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
阅读排行:
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· 软件产品开发中常见的10个问题及处理方法
· Vite CVE-2025-30208 安全漏洞
· MQ 如何保证数据一致性?
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
点击右上角即可分享
微信分享提示