├── .gitignore ├── README.md ├── SUMMARY.md ├── docs ├── 勘误 │ └── 勘误.md ├── 第0章-一些可能令人迷惑的问题 │ ├── image │ │ ├── 1534921980309.png │ │ ├── 1534922397616.png │ │ ├── 1534990640244.png │ │ ├── 1535009933229.png │ │ ├── 1535010218133.png │ │ ├── 1535010280375.png │ │ ├── 1535011300122.png │ │ └── 1535011319375.png │ └── 第0章-一些可能令人迷惑的问题.md ├── 第10章-命令行及调试 │ └── 第10章-命令行及调试.md ├── 第1章-设计一种面向对象脚本语言 │ └── 第1章-设计一种面向对象脚本语言.md ├── 第2章-实现词法分析器 │ └── 第2章-实现词法分析器.md ├── 第3章-类与对象 │ └── 第3章-类与对象.md ├── 第4章-原生方法及基础实现 │ └── 第4章-原生方法及基础实现.md ├── 第5章-自上而下算符优先—TDOP │ └── 第5章-自上而下算符优先—TDOP.md ├── 第6章-实现语法分析与语义分析 │ └── 第6章-实现语法分析与语义分析.md ├── 第7章-虚拟机 │ └── 第7章-虚拟机.md ├── 第8章-内建类及其方法 │ └── 第8章-内建类及其方法.md └── 第9章-垃圾回收 │ └── 第9章-垃圾回收.md ├── image ├── 1534912827483.png ├── 1534913291571.png └── 1535422644606.png ├── reference └── 自制编程语言-样章.pdf └── src ├── c10 ├── a │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── employee.sp │ ├── gc │ │ ├── gc.c │ │ └── gc.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── manager.sp │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h └── b │ ├── cli │ ├── cli.c │ └── cli.h │ ├── compiler │ ├── compiler.c │ ├── compiler.h │ ├── debug.c │ └── debug.h │ ├── employee.sp │ ├── gc │ ├── gc.c │ └── gc.h │ ├── include │ ├── common.h │ ├── unicodeUtf8.c │ ├── unicodeUtf8.h │ ├── utils.c │ └── utils.h │ ├── makefile │ ├── makefile.debug │ ├── manager.sp │ ├── object │ ├── class.c │ ├── class.h │ ├── header_obj.c │ ├── header_obj.h │ ├── meta_obj.c │ ├── meta_obj.h │ ├── obj_fn.c │ ├── obj_fn.h │ ├── obj_list.c │ ├── obj_list.h │ ├── obj_map.c │ ├── obj_map.h │ ├── obj_range.c │ ├── obj_range.h │ ├── obj_string.c │ ├── obj_string.h │ ├── obj_thread.c │ └── obj_thread.h │ ├── parser │ ├── parser.c │ └── parser.h │ └── vm │ ├── core.c │ ├── core.h │ ├── core.script.inc │ ├── opcode.inc │ ├── vm.c │ └── vm.h ├── c2 ├── a │ └── include │ │ ├── common.h │ │ ├── utils.c │ │ └── utils.h ├── b │ ├── include │ │ ├── common.h │ │ ├── utils.c │ │ └── utils.h │ └── vm │ │ ├── vm.c │ │ └── vm.h ├── c │ ├── include │ │ ├── common.h │ │ ├── utils.c │ │ └── utils.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── vm.c │ │ └── vm.h ├── d │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── vm.c │ │ └── vm.h ├── e │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── vm.c │ │ └── vm.h └── f │ ├── cli │ ├── cli.c │ └── cli.h │ ├── include │ ├── common.h │ ├── unicodeUtf8.c │ ├── unicodeUtf8.h │ ├── utils.c │ └── utils.h │ ├── makefile │ ├── parser │ ├── parser.c │ ├── parser.h │ └── token.list │ ├── sample.sp │ └── vm │ ├── core.c │ ├── core.h │ ├── vm.c │ └── vm.h ├── c3 ├── a │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── object │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_string.c │ │ └── obj_string.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── vm.c │ │ └── vm.h ├── b │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_string.c │ │ └── obj_string.h │ ├── parser │ │ ├── parser.c │ │ ├── parser.h │ │ └── token.list │ ├── sample.sp │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── vm.c │ │ └── vm.h └── c │ ├── cli │ ├── cli.c │ └── cli.h │ ├── include │ ├── common.h │ ├── unicodeUtf8.c │ ├── unicodeUtf8.h │ ├── utils.c │ └── utils.h │ ├── object │ ├── class.c │ ├── class.h │ ├── header_obj.c │ ├── header_obj.h │ ├── meta_obj.c │ ├── meta_obj.h │ ├── obj_fn.c │ ├── obj_fn.h │ ├── obj_list.c │ ├── obj_list.h │ ├── obj_map.c │ ├── obj_map.h │ ├── obj_range.c │ ├── obj_range.h │ ├── obj_string.c │ ├── obj_string.h │ ├── obj_thread.c │ └── obj_thread.h │ ├── parser │ ├── parser.c │ └── parser.h │ └── vm │ ├── core.c │ ├── core.h │ ├── vm.c │ └── vm.h ├── c4 ├── a │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── vm.c │ │ └── vm.h ├── b │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── vm.c │ │ └── vm.h └── c │ ├── cli │ ├── cli.c │ └── cli.h │ ├── compiler │ ├── compiler.c │ └── compiler.h │ ├── include │ ├── common.h │ ├── unicodeUtf8.c │ ├── unicodeUtf8.h │ ├── utils.c │ └── utils.h │ ├── makefile │ ├── object │ ├── class.c │ ├── class.h │ ├── header_obj.c │ ├── header_obj.h │ ├── meta_obj.c │ ├── meta_obj.h │ ├── obj_fn.c │ ├── obj_fn.h │ ├── obj_list.c │ ├── obj_list.h │ ├── obj_map.c │ ├── obj_map.h │ ├── obj_range.c │ ├── obj_range.h │ ├── obj_string.c │ ├── obj_string.h │ ├── obj_thread.c │ └── obj_thread.h │ ├── parser │ ├── parser.c │ └── parser.h │ └── vm │ ├── core.c │ ├── core.h │ ├── vm.c │ └── vm.h ├── c6 ├── a │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── b │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── c │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── d │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── e │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── f │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── g │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── h │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── i │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── j │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── k │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── l │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── m │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── n │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── o │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── p │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── q │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── r │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── s │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h └── t │ ├── cli │ ├── cli.c │ └── cli.h │ ├── compiler │ ├── compiler.c │ └── compiler.h │ ├── include │ ├── common.h │ ├── unicodeUtf8.c │ ├── unicodeUtf8.h │ ├── utils.c │ └── utils.h │ ├── makefile │ ├── object │ ├── class.c │ ├── class.h │ ├── header_obj.c │ ├── header_obj.h │ ├── meta_obj.c │ ├── meta_obj.h │ ├── obj_fn.c │ ├── obj_fn.h │ ├── obj_list.c │ ├── obj_list.h │ ├── obj_map.c │ ├── obj_map.h │ ├── obj_range.c │ ├── obj_range.h │ ├── obj_string.c │ ├── obj_string.h │ ├── obj_thread.c │ └── obj_thread.h │ ├── parser │ ├── parser.c │ └── parser.h │ └── vm │ ├── core.c │ ├── core.h │ ├── core.script.inc │ ├── opcode.inc │ ├── vm.c │ └── vm.h ├── c7 ├── a │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── b │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── c │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── d │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h └── e │ ├── cli │ ├── cli.c │ └── cli.h │ ├── compiler │ ├── compiler.c │ └── compiler.h │ ├── include │ ├── common.h │ ├── unicodeUtf8.c │ ├── unicodeUtf8.h │ ├── utils.c │ └── utils.h │ ├── makefile │ ├── object │ ├── class.c │ ├── class.h │ ├── header_obj.c │ ├── header_obj.h │ ├── meta_obj.c │ ├── meta_obj.h │ ├── obj_fn.c │ ├── obj_fn.h │ ├── obj_list.c │ ├── obj_list.h │ ├── obj_map.c │ ├── obj_map.h │ ├── obj_range.c │ ├── obj_range.h │ ├── obj_string.c │ ├── obj_string.h │ ├── obj_thread.c │ └── obj_thread.h │ ├── parser │ ├── parser.c │ └── parser.h │ └── vm │ ├── core.c │ ├── core.h │ ├── core.script.inc │ ├── opcode.inc │ ├── vm.c │ └── vm.h ├── c8 ├── a │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── b │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── c │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── d │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── e │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── f │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── g │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── h │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── i │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h ├── j │ ├── cli │ │ ├── cli.c │ │ └── cli.h │ ├── compiler │ │ ├── compiler.c │ │ └── compiler.h │ ├── include │ │ ├── common.h │ │ ├── unicodeUtf8.c │ │ ├── unicodeUtf8.h │ │ ├── utils.c │ │ └── utils.h │ ├── makefile │ ├── object │ │ ├── class.c │ │ ├── class.h │ │ ├── header_obj.c │ │ ├── header_obj.h │ │ ├── meta_obj.c │ │ ├── meta_obj.h │ │ ├── obj_fn.c │ │ ├── obj_fn.h │ │ ├── obj_list.c │ │ ├── obj_list.h │ │ ├── obj_map.c │ │ ├── obj_map.h │ │ ├── obj_range.c │ │ ├── obj_range.h │ │ ├── obj_string.c │ │ ├── obj_string.h │ │ ├── obj_thread.c │ │ └── obj_thread.h │ ├── parser │ │ ├── parser.c │ │ └── parser.h │ └── vm │ │ ├── core.c │ │ ├── core.h │ │ ├── core.script.inc │ │ ├── opcode.inc │ │ ├── vm.c │ │ └── vm.h └── k │ ├── cli │ ├── cli.c │ └── cli.h │ ├── compiler │ ├── compiler.c │ └── compiler.h │ ├── employee.sp │ ├── include │ ├── common.h │ ├── unicodeUtf8.c │ ├── unicodeUtf8.h │ ├── utils.c │ └── utils.h │ ├── makefile │ ├── manager.sp │ ├── object │ ├── class.c │ ├── class.h │ ├── header_obj.c │ ├── header_obj.h │ ├── meta_obj.c │ ├── meta_obj.h │ ├── obj_fn.c │ ├── obj_fn.h │ ├── obj_list.c │ ├── obj_list.h │ ├── obj_map.c │ ├── obj_map.h │ ├── obj_range.c │ ├── obj_range.h │ ├── obj_string.c │ ├── obj_string.h │ ├── obj_thread.c │ └── obj_thread.h │ ├── parser │ ├── parser.c │ └── parser.h │ └── vm │ ├── core.c │ ├── core.h │ ├── core.script.inc │ ├── opcode.inc │ ├── vm.c │ └── vm.h ├── c9 └── a │ ├── cli │ ├── cli.c │ └── cli.h │ ├── compiler │ ├── compiler.c │ └── compiler.h │ ├── employee.sp │ ├── gc │ ├── gc.c │ └── gc.h │ ├── include │ ├── common.h │ ├── unicodeUtf8.c │ ├── unicodeUtf8.h │ ├── utils.c │ └── utils.h │ ├── makefile │ ├── manager.sp │ ├── object │ ├── class.c │ ├── class.h │ ├── header_obj.c │ ├── header_obj.h │ ├── meta_obj.c │ ├── meta_obj.h │ ├── obj_fn.c │ ├── obj_fn.h │ ├── obj_list.c │ ├── obj_list.h │ ├── obj_map.c │ ├── obj_map.h │ ├── obj_range.c │ ├── obj_range.h │ ├── obj_string.c │ ├── obj_string.h │ ├── obj_thread.c │ └── obj_thread.h │ ├── parser │ ├── parser.c │ └── parser.h │ └── vm │ ├── core.c │ ├── core.h │ ├── core.script.inc │ ├── opcode.inc │ ├── vm.c │ └── vm.h └── sparrow.tgz /.gitignore: -------------------------------------------------------------------------------- 1 | stepByStep 2 | *.o 3 | spr 4 | -------------------------------------------------------------------------------- /docs/勘误/勘误.md: -------------------------------------------------------------------------------- 1 | # 勘误 2 | 3 | ## 页码:12 行数:8 印次:1 4 | 5 | ``` 6 | 不见得磁盘IO是整个系统最慢的部分,解释器读取缓存文件难道不需要时间吗? 7 | ``` 8 | 这里少了句号,修改后 9 | ``` 10 | 不见得。磁盘IO是整个系统最慢的部分,解释器读取缓存文件难道不需要时间吗? 11 | ``` 12 | 13 | ## 页码:86 行数:27 印次:1 14 | 15 | ``` 16 | printf("%dL: %s [", parser.curToken.lineNo, tokenArray[parser.curToken.type]); 17 | ``` 18 | 应改成如下,不然会造成访问tokenArray越界 19 | ``` 20 | printf("%dL: %s [", parser.curToken.lineNo, tokenArray[parser.curToken.type-1]); 21 | ``` 22 | 23 | ## 页码:94 行数:37 印次:1 24 | 25 | ``` 26 | 22L:RIGHT_PAREN[]] 27 | ``` 28 | 这里很明显,右括号,改成如下代码 29 | ``` 30 | 22L:RIGHT_PAREN[)] 31 | ``` 32 | -------------------------------------------------------------------------------- /docs/第0章-一些可能令人迷惑的问题/image/1534921980309.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yifengyou/sparrow/033b149ac3390dcc882bea8819a6aedee1d66f79/docs/第0章-一些可能令人迷惑的问题/image/1534921980309.png -------------------------------------------------------------------------------- /docs/第0章-一些可能令人迷惑的问题/image/1534922397616.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yifengyou/sparrow/033b149ac3390dcc882bea8819a6aedee1d66f79/docs/第0章-一些可能令人迷惑的问题/image/1534922397616.png -------------------------------------------------------------------------------- /docs/第0章-一些可能令人迷惑的问题/image/1534990640244.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yifengyou/sparrow/033b149ac3390dcc882bea8819a6aedee1d66f79/docs/第0章-一些可能令人迷惑的问题/image/1534990640244.png -------------------------------------------------------------------------------- /docs/第0章-一些可能令人迷惑的问题/image/1535009933229.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yifengyou/sparrow/033b149ac3390dcc882bea8819a6aedee1d66f79/docs/第0章-一些可能令人迷惑的问题/image/1535009933229.png -------------------------------------------------------------------------------- /docs/第0章-一些可能令人迷惑的问题/image/1535010218133.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yifengyou/sparrow/033b149ac3390dcc882bea8819a6aedee1d66f79/docs/第0章-一些可能令人迷惑的问题/image/1535010218133.png -------------------------------------------------------------------------------- /docs/第0章-一些可能令人迷惑的问题/image/1535010280375.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yifengyou/sparrow/033b149ac3390dcc882bea8819a6aedee1d66f79/docs/第0章-一些可能令人迷惑的问题/image/1535010280375.png -------------------------------------------------------------------------------- /docs/第0章-一些可能令人迷惑的问题/image/1535011300122.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yifengyou/sparrow/033b149ac3390dcc882bea8819a6aedee1d66f79/docs/第0章-一些可能令人迷惑的问题/image/1535011300122.png -------------------------------------------------------------------------------- /docs/第0章-一些可能令人迷惑的问题/image/1535011319375.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yifengyou/sparrow/033b149ac3390dcc882bea8819a6aedee1d66f79/docs/第0章-一些可能令人迷惑的问题/image/1535011319375.png -------------------------------------------------------------------------------- /docs/第10章-命令行及调试/第10章-命令行及调试.md: -------------------------------------------------------------------------------- 1 | # 第10章-命令行及调试 2 | 3 | -------------------------------------------------------------------------------- /docs/第1章-设计一种面向对象脚本语言/第1章-设计一种面向对象脚本语言.md: -------------------------------------------------------------------------------- 1 | # 第1章-设计一种面向对象脚本语言 2 | 3 | -------------------------------------------------------------------------------- /docs/第2章-实现词法分析器/第2章-实现词法分析器.md: -------------------------------------------------------------------------------- 1 | # 第2章-实现词法分析器 2 | 3 | -------------------------------------------------------------------------------- /docs/第3章-类与对象/第3章-类与对象.md: -------------------------------------------------------------------------------- 1 | # 第3章-类与对象 2 | 3 | -------------------------------------------------------------------------------- /docs/第4章-原生方法及基础实现/第4章-原生方法及基础实现.md: -------------------------------------------------------------------------------- 1 | # 第4章-原生方法及基础实现 2 | 3 | -------------------------------------------------------------------------------- /docs/第5章-自上而下算符优先—TDOP/第5章-自上而下算符优先—TDOP.md: -------------------------------------------------------------------------------- 1 | # 第5章-自上而下算符优先—TDOP 2 | 3 | -------------------------------------------------------------------------------- /docs/第6章-实现语法分析与语义分析/第6章-实现语法分析与语义分析.md: -------------------------------------------------------------------------------- 1 | # 第6章-实现语法分析与语义分析 2 | 3 | -------------------------------------------------------------------------------- /docs/第7章-虚拟机/第7章-虚拟机.md: -------------------------------------------------------------------------------- 1 | # 第7章-虚拟机 2 | 3 | -------------------------------------------------------------------------------- /docs/第8章-内建类及其方法/第8章-内建类及其方法.md: -------------------------------------------------------------------------------- 1 | # 第8章-内建类及其方法 2 | 3 | -------------------------------------------------------------------------------- /docs/第9章-垃圾回收/第9章-垃圾回收.md: -------------------------------------------------------------------------------- 1 | # 第9章-垃圾回收 2 | 3 | -------------------------------------------------------------------------------- /image/1534912827483.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yifengyou/sparrow/033b149ac3390dcc882bea8819a6aedee1d66f79/image/1534912827483.png -------------------------------------------------------------------------------- /image/1534913291571.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yifengyou/sparrow/033b149ac3390dcc882bea8819a6aedee1d66f79/image/1534913291571.png -------------------------------------------------------------------------------- /image/1535422644606.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yifengyou/sparrow/033b149ac3390dcc882bea8819a6aedee1d66f79/image/1535422644606.png -------------------------------------------------------------------------------- /reference/自制编程语言-样章.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yifengyou/sparrow/033b149ac3390dcc882bea8819a6aedee1d66f79/reference/自制编程语言-样章.pdf -------------------------------------------------------------------------------- /src/c10/a/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c10/a/employee.sp: -------------------------------------------------------------------------------- 1 | class Employee { 2 | var name 3 | var gender 4 | var age 5 | var salary 6 | static var employeeNum = 0 7 | new(n, g, a, s) { 8 | name = n 9 | gender = g 10 | age = a 11 | salary = s 12 | employeeNum = employeeNum + 1 13 | } 14 | 15 | sayHi() { 16 | System.print("My name is " + 17 | name + ", I am a " + gender + 18 | ", " + age.toString + "years old") 19 | } 20 | 21 | salary { 22 | return salary 23 | } 24 | 25 | static employeeNum { 26 | return employeeNum 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/c10/a/gc/gc.h: -------------------------------------------------------------------------------- 1 | #ifndef _GC_GC_H 2 | #define _GC_GC_H 3 | #include "vm.h" 4 | void grayObject(VM* vm, ObjHeader* obj); 5 | void grayValue(VM* vm, Value value); 6 | void freeObject(VM* vm, ObjHeader* obj); 7 | void startGC(VM* vm); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c10/a/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c10/a/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c10/a/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c10/a/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c10/a/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c10/a/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c10/a/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c10/b/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c10/b/compiler/debug.h: -------------------------------------------------------------------------------- 1 | #ifdef DEBUG 2 | #ifndef _COMPILER_DEBUG_H 3 | #define _COMPILER_DEBUG_H 4 | #include "utils.h" 5 | #include "obj_fn.h" 6 | #include "obj_thread.h" 7 | 8 | void bindDebugFnName(VM* vm, FnDebug* fnDebug, 9 | const char* name, uint32_t length); 10 | void dumpValue(Value value); 11 | void dumpInstructions(VM* vm, ObjFn* fn); 12 | void dumpStack(ObjThread* thread); 13 | #endif 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c10/b/employee.sp: -------------------------------------------------------------------------------- 1 | class Employee { 2 | var name 3 | var gender 4 | var age 5 | var salary 6 | static var employeeNum = 0 7 | new(n, g, a, s) { 8 | name = n 9 | gender = g 10 | age = a 11 | salary = s 12 | employeeNum = employeeNum + 1 13 | } 14 | 15 | sayHi() { 16 | System.print("My name is " + 17 | name + ", I am a " + gender + 18 | ", " + age.toString + "years old") 19 | } 20 | 21 | salary { 22 | return salary 23 | } 24 | 25 | static employeeNum { 26 | return employeeNum 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/c10/b/gc/gc.h: -------------------------------------------------------------------------------- 1 | #ifndef _GC_GC_H 2 | #define _GC_GC_H 3 | #include "vm.h" 4 | void grayObject(VM* vm, ObjHeader* obj); 5 | void grayValue(VM* vm, Value value); 6 | void freeObject(VM* vm, ObjHeader* obj); 7 | void startGC(VM* vm); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c10/b/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c10/b/makefile.debug: -------------------------------------------------------------------------------- 1 | CC = gcc 2 | CFLAGS = -g -DDEBUG -lm -Wall -I object -I vm -I compiler -I parser -I include -I cli -I gc -W -Wstrict-prototypes -Wmissing-prototypes -Wsystem-headers 3 | TARGET = spr 4 | DIRS = object include cli compiler parser vm gc 5 | CFILES = $(foreach dir, $(DIRS),$(wildcard $(dir)/*.c)) 6 | OBJS = $(patsubst %.c,%.o,$(CFILES)) 7 | $(TARGET):$(OBJS) 8 | $(CC) -o $(TARGET) $(OBJS) $(CFLAGS) 9 | clean: 10 | -$(RM) $(TARGET) $(OBJS) 11 | r: clean $(TARGET) 12 | -------------------------------------------------------------------------------- /src/c10/b/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c10/b/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c10/b/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c10/b/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c10/b/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c10/b/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c2/b/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->curParser = NULL; 9 | } 10 | 11 | VM* newVM() { 12 | VM* vm = (VM*)malloc(sizeof(VM)); 13 | if (vm == NULL) { 14 | MEM_ERROR("allocate VM failed!"); 15 | } 16 | initVM(vm); 17 | return vm; 18 | } 19 | -------------------------------------------------------------------------------- /src/c2/b/vm/vm.h: -------------------------------------------------------------------------------- 1 | #ifndef _VM_VM_H 2 | #define _VM_VM_H 3 | #include "common.h" 4 | 5 | struct vm { 6 | uint32_t allocatedBytes; //累计已分配的内存量 7 | Parser* curParser; //当前词法分析器 8 | }; 9 | 10 | void initVM(VM* vm); 11 | VM* newVM(void); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c2/c/vm/core.h: -------------------------------------------------------------------------------- 1 | #ifndef _VM_CORE_H 2 | #define _VM_CORE_H 3 | extern char* rootDir; 4 | char* readFile(const char* sourceFile); 5 | #endif 6 | -------------------------------------------------------------------------------- /src/c2/c/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->curParser = NULL; 9 | } 10 | 11 | VM* newVM() { 12 | VM* vm = (VM*)malloc(sizeof(VM)); 13 | if (vm == NULL) { 14 | MEM_ERROR("allocate VM failed!"); 15 | } 16 | initVM(vm); 17 | return vm; 18 | } 19 | -------------------------------------------------------------------------------- /src/c2/c/vm/vm.h: -------------------------------------------------------------------------------- 1 | #ifndef _VM_VM_H 2 | #define _VM_VM_H 3 | #include "common.h" 4 | 5 | struct vm { 6 | uint32_t allocatedBytes; //累计已分配的内存量 7 | Parser* curParser; //当前词法分析器 8 | }; 9 | 10 | void initVM(VM* vm); 11 | VM* newVM(void); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c2/d/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c2/d/vm/core.h: -------------------------------------------------------------------------------- 1 | #ifndef _VM_CORE_H 2 | #define _VM_CORE_H 3 | extern char* rootDir; 4 | char* readFile(const char* sourceFile); 5 | #endif 6 | -------------------------------------------------------------------------------- /src/c2/d/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->curParser = NULL; 9 | } 10 | 11 | VM* newVM() { 12 | VM* vm = (VM*)malloc(sizeof(VM)); 13 | if (vm == NULL) { 14 | MEM_ERROR("allocate VM failed!"); 15 | } 16 | initVM(vm); 17 | return vm; 18 | } 19 | -------------------------------------------------------------------------------- /src/c2/d/vm/vm.h: -------------------------------------------------------------------------------- 1 | #ifndef _VM_VM_H 2 | #define _VM_VM_H 3 | #include "common.h" 4 | 5 | struct vm { 6 | uint32_t allocatedBytes; //累计已分配的内存量 7 | Parser* curParser; //当前词法分析器 8 | }; 9 | 10 | void initVM(VM* vm); 11 | VM* newVM(void); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c2/e/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c2/e/vm/core.h: -------------------------------------------------------------------------------- 1 | #ifndef _VM_CORE_H 2 | #define _VM_CORE_H 3 | extern char* rootDir; 4 | char* readFile(const char* sourceFile); 5 | #endif 6 | -------------------------------------------------------------------------------- /src/c2/e/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->curParser = NULL; 9 | } 10 | 11 | VM* newVM() { 12 | VM* vm = (VM*)malloc(sizeof(VM)); 13 | if (vm == NULL) { 14 | MEM_ERROR("allocate VM failed!"); 15 | } 16 | initVM(vm); 17 | return vm; 18 | } 19 | -------------------------------------------------------------------------------- /src/c2/e/vm/vm.h: -------------------------------------------------------------------------------- 1 | #ifndef _VM_VM_H 2 | #define _VM_VM_H 3 | #include "common.h" 4 | 5 | struct vm { 6 | uint32_t allocatedBytes; //累计已分配的内存量 7 | Parser* curParser; //当前词法分析器 8 | }; 9 | 10 | void initVM(VM* vm); 11 | VM* newVM(void); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c2/f/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c2/f/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c2/f/sample.sp: -------------------------------------------------------------------------------- 1 | import people for People 2 | fun fn() { 3 | var p = People.new("xiaoming", "male") 4 | p.sayHi() 5 | } 6 | 7 | class Family < People { 8 | var father 9 | var mother 10 | var child 11 | new(f, m, c) { 12 | father = f 13 | mother = m 14 | child = c 15 | super("wbf", "male") 16 | } 17 | } 18 | 19 | var f = Family.new("wbf", "ls", "shine") 20 | f.sayHi() 21 | 22 | fn() 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/c2/f/vm/core.h: -------------------------------------------------------------------------------- 1 | #ifndef _VM_CORE_H 2 | #define _VM_CORE_H 3 | extern char* rootDir; 4 | char* readFile(const char* sourceFile); 5 | #endif 6 | -------------------------------------------------------------------------------- /src/c2/f/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->curParser = NULL; 9 | } 10 | 11 | VM* newVM() { 12 | VM* vm = (VM*)malloc(sizeof(VM)); 13 | if (vm == NULL) { 14 | MEM_ERROR("allocate VM failed!"); 15 | } 16 | initVM(vm); 17 | return vm; 18 | } 19 | -------------------------------------------------------------------------------- /src/c2/f/vm/vm.h: -------------------------------------------------------------------------------- 1 | #ifndef _VM_VM_H 2 | #define _VM_VM_H 3 | #include "common.h" 4 | 5 | struct vm { 6 | uint32_t allocatedBytes; //累计已分配的内存量 7 | Parser* curParser; //当前词法分析器 8 | }; 9 | 10 | void initVM(VM* vm); 11 | VM* newVM(void); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c3/a/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c3/a/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c3/a/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c3/a/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c3/a/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c3/a/vm/core.h: -------------------------------------------------------------------------------- 1 | #ifndef _VM_CORE_H 2 | #define _VM_CORE_H 3 | extern char* rootDir; 4 | char* readFile(const char* sourceFile); 5 | #endif 6 | -------------------------------------------------------------------------------- /src/c3/a/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | //初始化虚拟机 5 | void initVM(VM* vm) { 6 | vm->allocatedBytes = 0; 7 | vm->allObjects = NULL; 8 | vm->curParser = NULL; 9 | } 10 | 11 | VM* newVM() { 12 | VM* vm = (VM*)malloc(sizeof(VM)); 13 | if (vm == NULL) { 14 | MEM_ERROR("allocate VM failed!"); 15 | } 16 | initVM(vm); 17 | return vm; 18 | } 19 | -------------------------------------------------------------------------------- /src/c3/a/vm/vm.h: -------------------------------------------------------------------------------- 1 | #ifndef _VM_VM_H 2 | #define _VM_VM_H 3 | #include "common.h" 4 | #include "class.h" 5 | #include "parser.h" 6 | 7 | struct vm { 8 | Class* stringClass; 9 | Class* fnClass; 10 | uint32_t allocatedBytes; //累计已分配的内存量 11 | ObjHeader* allObjects; //所有已分配对象链表 12 | Parser* curParser; //当前词法分析器 13 | }; 14 | 15 | void initVM(VM* vm); 16 | VM* newVM(void); 17 | #endif 18 | -------------------------------------------------------------------------------- /src/c3/b/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c3/b/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c3/b/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c3/b/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c3/b/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c3/b/sample.sp: -------------------------------------------------------------------------------- 1 | import people for People 2 | fun fn() { 3 | var p = People.new("xiaoming", "male", 20.0) 4 | p.sayHi() 5 | } 6 | 7 | class Family < People { 8 | var father 9 | var mother 10 | var child 11 | new(f, m, c) { 12 | father = f 13 | mother = m 14 | child = c 15 | super("wbf", "male", 60) 16 | } 17 | } 18 | 19 | var f = Family.new("wbf", "ls", "shine") 20 | f.sayHi() 21 | 22 | fn() 23 | -------------------------------------------------------------------------------- /src/c3/b/vm/core.h: -------------------------------------------------------------------------------- 1 | #ifndef _VM_CORE_H 2 | #define _VM_CORE_H 3 | extern char* rootDir; 4 | char* readFile(const char* sourceFile); 5 | #endif 6 | -------------------------------------------------------------------------------- /src/c3/b/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | //初始化虚拟机 5 | void initVM(VM* vm) { 6 | vm->allocatedBytes = 0; 7 | vm->allObjects = NULL; 8 | vm->curParser = NULL; 9 | } 10 | 11 | VM* newVM() { 12 | VM* vm = (VM*)malloc(sizeof(VM)); 13 | if (vm == NULL) { 14 | MEM_ERROR("allocate VM failed!"); 15 | } 16 | initVM(vm); 17 | return vm; 18 | } 19 | -------------------------------------------------------------------------------- /src/c3/b/vm/vm.h: -------------------------------------------------------------------------------- 1 | #ifndef _VM_VM_H 2 | #define _VM_VM_H 3 | #include "common.h" 4 | #include "class.h" 5 | #include "parser.h" 6 | 7 | struct vm { 8 | Class* stringClass; 9 | Class* fnClass; 10 | uint32_t allocatedBytes; //累计已分配的内存量 11 | ObjHeader* allObjects; //所有已分配对象链表 12 | Parser* curParser; //当前词法分析器 13 | }; 14 | 15 | void initVM(VM* vm); 16 | VM* newVM(void); 17 | #endif 18 | -------------------------------------------------------------------------------- /src/c3/c/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c3/c/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c3/c/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c3/c/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c3/c/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c3/c/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c3/c/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c3/c/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c3/c/vm/core.h: -------------------------------------------------------------------------------- 1 | #ifndef _VM_CORE_H 2 | #define _VM_CORE_H 3 | extern char* rootDir; 4 | char* readFile(const char* sourceFile); 5 | #endif 6 | -------------------------------------------------------------------------------- /src/c3/c/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | //初始化虚拟机 5 | void initVM(VM* vm) { 6 | vm->allocatedBytes = 0; 7 | vm->allObjects = NULL; 8 | vm->curParser = NULL; 9 | } 10 | 11 | VM* newVM() { 12 | VM* vm = (VM*)malloc(sizeof(VM)); 13 | if (vm == NULL) { 14 | MEM_ERROR("allocate VM failed!"); 15 | } 16 | initVM(vm); 17 | return vm; 18 | } 19 | -------------------------------------------------------------------------------- /src/c4/a/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c4/a/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c4/a/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c4/a/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c4/a/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c4/a/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c4/a/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c4/a/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c4/a/vm/core.h: -------------------------------------------------------------------------------- 1 | #ifndef _VM_CORE_H 2 | #define _VM_CORE_H 3 | #include "vm.h" 4 | extern char* rootDir; 5 | char* readFile(const char* sourceFile); 6 | VMResult executeModule(VM* vm, Value moduleName, const char* moduleCode); 7 | void buildCore(VM* vm); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c4/a/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include "vm.h" 2 | #include 3 | #include "core.h" 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->allObjects = NULL; 9 | vm->curParser = NULL; 10 | StringBufferInit(&vm->allMethodNames); 11 | vm->allModules = newObjMap(vm); 12 | vm->curParser = NULL; 13 | } 14 | 15 | VM* newVM() { 16 | VM* vm = (VM*)malloc(sizeof(VM)); 17 | if (vm == NULL) { 18 | MEM_ERROR("allocate VM failed!"); 19 | } 20 | initVM(vm); 21 | buildCore(vm); 22 | return vm; 23 | } 24 | -------------------------------------------------------------------------------- /src/c4/b/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c4/b/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c4/b/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c4/b/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c4/b/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c4/b/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c4/b/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c4/b/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c4/b/vm/core.h: -------------------------------------------------------------------------------- 1 | #ifndef _VM_CORE_H 2 | #define _VM_CORE_H 3 | #include "vm.h" 4 | extern char* rootDir; 5 | char* readFile(const char* sourceFile); 6 | VMResult executeModule(VM* vm, Value moduleName, const char* moduleCode); 7 | int getIndexFromSymbolTable(SymbolTable* table, const char* symbol, uint32_t length); 8 | int addSymbol(VM* vm, SymbolTable* table, const char* symbol, uint32_t length); 9 | void buildCore(VM* vm); 10 | void bindMethod(VM* vm, Class* class, uint32_t index, Method method); 11 | void bindSuperClass(VM* vm, Class* subClass, Class* superClass); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c4/b/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include "vm.h" 2 | #include 3 | #include "core.h" 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->allObjects = NULL; 9 | vm->curParser = NULL; 10 | StringBufferInit(&vm->allMethodNames); 11 | vm->allModules = newObjMap(vm); 12 | vm->curParser = NULL; 13 | } 14 | 15 | VM* newVM() { 16 | VM* vm = (VM*)malloc(sizeof(VM)); 17 | if (vm == NULL) { 18 | MEM_ERROR("allocate VM failed!"); 19 | } 20 | initVM(vm); 21 | buildCore(vm); 22 | return vm; 23 | } 24 | -------------------------------------------------------------------------------- /src/c4/c/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c4/c/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c4/c/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c4/c/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c4/c/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c4/c/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c4/c/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c4/c/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c4/c/vm/core.h: -------------------------------------------------------------------------------- 1 | #ifndef _VM_CORE_H 2 | #define _VM_CORE_H 3 | #include "vm.h" 4 | extern char* rootDir; 5 | char* readFile(const char* sourceFile); 6 | VMResult executeModule(VM* vm, Value moduleName, const char* moduleCode); 7 | int getIndexFromSymbolTable(SymbolTable* table, const char* symbol, uint32_t length); 8 | int addSymbol(VM* vm, SymbolTable* table, const char* symbol, uint32_t length); 9 | void buildCore(VM* vm); 10 | void bindMethod(VM* vm, Class* class, uint32_t index, Method method); 11 | void bindSuperClass(VM* vm, Class* subClass, Class* superClass); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c4/c/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include "vm.h" 2 | #include 3 | #include "core.h" 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->allObjects = NULL; 9 | vm->curParser = NULL; 10 | StringBufferInit(&vm->allMethodNames); 11 | vm->allModules = newObjMap(vm); 12 | vm->curParser = NULL; 13 | } 14 | 15 | VM* newVM() { 16 | VM* vm = (VM*)malloc(sizeof(VM)); 17 | if (vm == NULL) { 18 | MEM_ERROR("allocate VM failed!"); 19 | } 20 | initVM(vm); 21 | buildCore(vm); 22 | return vm; 23 | } 24 | -------------------------------------------------------------------------------- /src/c6/a/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c6/a/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c6/a/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c6/a/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c6/a/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/a/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c6/a/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c6/a/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/a/vm/core.h: -------------------------------------------------------------------------------- 1 | #ifndef _VM_CORE_H 2 | #define _VM_CORE_H 3 | #include "vm.h" 4 | extern char* rootDir; 5 | char* readFile(const char* sourceFile); 6 | VMResult executeModule(VM* vm, Value moduleName, const char* moduleCode); 7 | int getIndexFromSymbolTable(SymbolTable* table, const char* symbol, uint32_t length); 8 | int addSymbol(VM* vm, SymbolTable* table, const char* symbol, uint32_t length); 9 | void buildCore(VM* vm); 10 | void bindMethod(VM* vm, Class* class, uint32_t index, Method method); 11 | void bindSuperClass(VM* vm, Class* subClass, Class* superClass); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c6/a/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include "vm.h" 2 | #include 3 | #include "core.h" 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->allObjects = NULL; 9 | vm->curParser = NULL; 10 | StringBufferInit(&vm->allMethodNames); 11 | vm->allModules = newObjMap(vm); 12 | vm->curParser = NULL; 13 | } 14 | 15 | VM* newVM() { 16 | VM* vm = (VM*)malloc(sizeof(VM)); 17 | if (vm == NULL) { 18 | MEM_ERROR("allocate VM failed!"); 19 | } 20 | initVM(vm); 21 | buildCore(vm); 22 | return vm; 23 | } 24 | -------------------------------------------------------------------------------- /src/c6/b/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c6/b/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c6/b/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c6/b/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c6/b/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/b/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c6/b/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c6/b/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/b/vm/core.h: -------------------------------------------------------------------------------- 1 | #ifndef _VM_CORE_H 2 | #define _VM_CORE_H 3 | #include "vm.h" 4 | extern char* rootDir; 5 | char* readFile(const char* sourceFile); 6 | VMResult executeModule(VM* vm, Value moduleName, const char* moduleCode); 7 | int getIndexFromSymbolTable(SymbolTable* table, const char* symbol, uint32_t length); 8 | int addSymbol(VM* vm, SymbolTable* table, const char* symbol, uint32_t length); 9 | void buildCore(VM* vm); 10 | void bindMethod(VM* vm, Class* class, uint32_t index, Method method); 11 | void bindSuperClass(VM* vm, Class* subClass, Class* superClass); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c6/b/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include "vm.h" 2 | #include 3 | #include "core.h" 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->allObjects = NULL; 9 | vm->curParser = NULL; 10 | StringBufferInit(&vm->allMethodNames); 11 | vm->allModules = newObjMap(vm); 12 | vm->curParser = NULL; 13 | } 14 | 15 | VM* newVM() { 16 | VM* vm = (VM*)malloc(sizeof(VM)); 17 | if (vm == NULL) { 18 | MEM_ERROR("allocate VM failed!"); 19 | } 20 | initVM(vm); 21 | buildCore(vm); 22 | return vm; 23 | } 24 | -------------------------------------------------------------------------------- /src/c6/c/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c6/c/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c6/c/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c6/c/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c6/c/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/c/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c6/c/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c6/c/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/c/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include "vm.h" 2 | #include 3 | #include "core.h" 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->allObjects = NULL; 9 | vm->curParser = NULL; 10 | StringBufferInit(&vm->allMethodNames); 11 | vm->allModules = newObjMap(vm); 12 | vm->curParser = NULL; 13 | } 14 | 15 | VM* newVM() { 16 | VM* vm = (VM*)malloc(sizeof(VM)); 17 | if (vm == NULL) { 18 | MEM_ERROR("allocate VM failed!"); 19 | } 20 | initVM(vm); 21 | buildCore(vm); 22 | return vm; 23 | } 24 | -------------------------------------------------------------------------------- /src/c6/d/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c6/d/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c6/d/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c6/d/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c6/d/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/d/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c6/d/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c6/d/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/d/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include "vm.h" 2 | #include 3 | #include "core.h" 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->allObjects = NULL; 9 | vm->curParser = NULL; 10 | StringBufferInit(&vm->allMethodNames); 11 | vm->allModules = newObjMap(vm); 12 | vm->curParser = NULL; 13 | } 14 | 15 | VM* newVM() { 16 | VM* vm = (VM*)malloc(sizeof(VM)); 17 | if (vm == NULL) { 18 | MEM_ERROR("allocate VM failed!"); 19 | } 20 | initVM(vm); 21 | buildCore(vm); 22 | return vm; 23 | } 24 | -------------------------------------------------------------------------------- /src/c6/e/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c6/e/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c6/e/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c6/e/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c6/e/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/e/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c6/e/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c6/e/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/e/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include "vm.h" 2 | #include 3 | #include "core.h" 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->allObjects = NULL; 9 | vm->curParser = NULL; 10 | StringBufferInit(&vm->allMethodNames); 11 | vm->allModules = newObjMap(vm); 12 | vm->curParser = NULL; 13 | } 14 | 15 | VM* newVM() { 16 | VM* vm = (VM*)malloc(sizeof(VM)); 17 | if (vm == NULL) { 18 | MEM_ERROR("allocate VM failed!"); 19 | } 20 | initVM(vm); 21 | buildCore(vm); 22 | return vm; 23 | } 24 | -------------------------------------------------------------------------------- /src/c6/f/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c6/f/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c6/f/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c6/f/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c6/f/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/f/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c6/f/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c6/f/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/f/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include "vm.h" 2 | #include 3 | #include "core.h" 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->allObjects = NULL; 9 | vm->curParser = NULL; 10 | StringBufferInit(&vm->allMethodNames); 11 | vm->allModules = newObjMap(vm); 12 | vm->curParser = NULL; 13 | } 14 | 15 | VM* newVM() { 16 | VM* vm = (VM*)malloc(sizeof(VM)); 17 | if (vm == NULL) { 18 | MEM_ERROR("allocate VM failed!"); 19 | } 20 | initVM(vm); 21 | buildCore(vm); 22 | return vm; 23 | } 24 | -------------------------------------------------------------------------------- /src/c6/g/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c6/g/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c6/g/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c6/g/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c6/g/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/g/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c6/g/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c6/g/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/g/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include "vm.h" 2 | #include 3 | #include "core.h" 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->allObjects = NULL; 9 | vm->curParser = NULL; 10 | StringBufferInit(&vm->allMethodNames); 11 | vm->allModules = newObjMap(vm); 12 | vm->curParser = NULL; 13 | } 14 | 15 | VM* newVM() { 16 | VM* vm = (VM*)malloc(sizeof(VM)); 17 | if (vm == NULL) { 18 | MEM_ERROR("allocate VM failed!"); 19 | } 20 | initVM(vm); 21 | buildCore(vm); 22 | return vm; 23 | } 24 | -------------------------------------------------------------------------------- /src/c6/h/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c6/h/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c6/h/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c6/h/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c6/h/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/h/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c6/h/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c6/h/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/h/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include "vm.h" 2 | #include 3 | #include "core.h" 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->allObjects = NULL; 9 | vm->curParser = NULL; 10 | StringBufferInit(&vm->allMethodNames); 11 | vm->allModules = newObjMap(vm); 12 | vm->curParser = NULL; 13 | } 14 | 15 | VM* newVM() { 16 | VM* vm = (VM*)malloc(sizeof(VM)); 17 | if (vm == NULL) { 18 | MEM_ERROR("allocate VM failed!"); 19 | } 20 | initVM(vm); 21 | buildCore(vm); 22 | return vm; 23 | } 24 | -------------------------------------------------------------------------------- /src/c6/i/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c6/i/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c6/i/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c6/i/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c6/i/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/i/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c6/i/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c6/i/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/i/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include "vm.h" 2 | #include 3 | #include "core.h" 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->allObjects = NULL; 9 | vm->curParser = NULL; 10 | StringBufferInit(&vm->allMethodNames); 11 | vm->allModules = newObjMap(vm); 12 | vm->curParser = NULL; 13 | } 14 | 15 | VM* newVM() { 16 | VM* vm = (VM*)malloc(sizeof(VM)); 17 | if (vm == NULL) { 18 | MEM_ERROR("allocate VM failed!"); 19 | } 20 | initVM(vm); 21 | buildCore(vm); 22 | return vm; 23 | } 24 | -------------------------------------------------------------------------------- /src/c6/j/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c6/j/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c6/j/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c6/j/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c6/j/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/j/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c6/j/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c6/j/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/j/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include "vm.h" 2 | #include 3 | #include "core.h" 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->allObjects = NULL; 9 | vm->curParser = NULL; 10 | StringBufferInit(&vm->allMethodNames); 11 | vm->allModules = newObjMap(vm); 12 | vm->curParser = NULL; 13 | } 14 | 15 | VM* newVM() { 16 | VM* vm = (VM*)malloc(sizeof(VM)); 17 | if (vm == NULL) { 18 | MEM_ERROR("allocate VM failed!"); 19 | } 20 | initVM(vm); 21 | buildCore(vm); 22 | return vm; 23 | } 24 | -------------------------------------------------------------------------------- /src/c6/k/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c6/k/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c6/k/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c6/k/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c6/k/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/k/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c6/k/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c6/k/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/k/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include "vm.h" 2 | #include 3 | #include "core.h" 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->allObjects = NULL; 9 | vm->curParser = NULL; 10 | StringBufferInit(&vm->allMethodNames); 11 | vm->allModules = newObjMap(vm); 12 | vm->curParser = NULL; 13 | } 14 | 15 | VM* newVM() { 16 | VM* vm = (VM*)malloc(sizeof(VM)); 17 | if (vm == NULL) { 18 | MEM_ERROR("allocate VM failed!"); 19 | } 20 | initVM(vm); 21 | buildCore(vm); 22 | return vm; 23 | } 24 | -------------------------------------------------------------------------------- /src/c6/l/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c6/l/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c6/l/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c6/l/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c6/l/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/l/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c6/l/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c6/l/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/l/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include "vm.h" 2 | #include 3 | #include "core.h" 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->allObjects = NULL; 9 | vm->curParser = NULL; 10 | StringBufferInit(&vm->allMethodNames); 11 | vm->allModules = newObjMap(vm); 12 | vm->curParser = NULL; 13 | } 14 | 15 | VM* newVM() { 16 | VM* vm = (VM*)malloc(sizeof(VM)); 17 | if (vm == NULL) { 18 | MEM_ERROR("allocate VM failed!"); 19 | } 20 | initVM(vm); 21 | buildCore(vm); 22 | return vm; 23 | } 24 | -------------------------------------------------------------------------------- /src/c6/m/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c6/m/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c6/m/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c6/m/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c6/m/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/m/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c6/m/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c6/m/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/m/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include "vm.h" 2 | #include 3 | #include "core.h" 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->allObjects = NULL; 9 | vm->curParser = NULL; 10 | StringBufferInit(&vm->allMethodNames); 11 | vm->allModules = newObjMap(vm); 12 | vm->curParser = NULL; 13 | } 14 | 15 | VM* newVM() { 16 | VM* vm = (VM*)malloc(sizeof(VM)); 17 | if (vm == NULL) { 18 | MEM_ERROR("allocate VM failed!"); 19 | } 20 | initVM(vm); 21 | buildCore(vm); 22 | return vm; 23 | } 24 | -------------------------------------------------------------------------------- /src/c6/n/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c6/n/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c6/n/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c6/n/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c6/n/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/n/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c6/n/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c6/n/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/n/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include "vm.h" 2 | #include 3 | #include "core.h" 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->allObjects = NULL; 9 | vm->curParser = NULL; 10 | StringBufferInit(&vm->allMethodNames); 11 | vm->allModules = newObjMap(vm); 12 | vm->curParser = NULL; 13 | } 14 | 15 | VM* newVM() { 16 | VM* vm = (VM*)malloc(sizeof(VM)); 17 | if (vm == NULL) { 18 | MEM_ERROR("allocate VM failed!"); 19 | } 20 | initVM(vm); 21 | buildCore(vm); 22 | return vm; 23 | } 24 | -------------------------------------------------------------------------------- /src/c6/o/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c6/o/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c6/o/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c6/o/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c6/o/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/o/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c6/o/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c6/o/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/o/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include "vm.h" 2 | #include 3 | #include "core.h" 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->allObjects = NULL; 9 | vm->curParser = NULL; 10 | StringBufferInit(&vm->allMethodNames); 11 | vm->allModules = newObjMap(vm); 12 | vm->curParser = NULL; 13 | } 14 | 15 | VM* newVM() { 16 | VM* vm = (VM*)malloc(sizeof(VM)); 17 | if (vm == NULL) { 18 | MEM_ERROR("allocate VM failed!"); 19 | } 20 | initVM(vm); 21 | buildCore(vm); 22 | return vm; 23 | } 24 | -------------------------------------------------------------------------------- /src/c6/p/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c6/p/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c6/p/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c6/p/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c6/p/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/p/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c6/p/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c6/p/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/p/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include "vm.h" 2 | #include 3 | #include "core.h" 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->allObjects = NULL; 9 | vm->curParser = NULL; 10 | StringBufferInit(&vm->allMethodNames); 11 | vm->allModules = newObjMap(vm); 12 | vm->curParser = NULL; 13 | } 14 | 15 | VM* newVM() { 16 | VM* vm = (VM*)malloc(sizeof(VM)); 17 | if (vm == NULL) { 18 | MEM_ERROR("allocate VM failed!"); 19 | } 20 | initVM(vm); 21 | buildCore(vm); 22 | return vm; 23 | } 24 | -------------------------------------------------------------------------------- /src/c6/q/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c6/q/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c6/q/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c6/q/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c6/q/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/q/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c6/q/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c6/q/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/q/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include "vm.h" 2 | #include 3 | #include "core.h" 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->allObjects = NULL; 9 | vm->curParser = NULL; 10 | StringBufferInit(&vm->allMethodNames); 11 | vm->allModules = newObjMap(vm); 12 | vm->curParser = NULL; 13 | } 14 | 15 | VM* newVM() { 16 | VM* vm = (VM*)malloc(sizeof(VM)); 17 | if (vm == NULL) { 18 | MEM_ERROR("allocate VM failed!"); 19 | } 20 | initVM(vm); 21 | buildCore(vm); 22 | return vm; 23 | } 24 | -------------------------------------------------------------------------------- /src/c6/r/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c6/r/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c6/r/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c6/r/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c6/r/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/r/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c6/r/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c6/r/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/r/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include "vm.h" 2 | #include 3 | #include "core.h" 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->allObjects = NULL; 9 | vm->curParser = NULL; 10 | StringBufferInit(&vm->allMethodNames); 11 | vm->allModules = newObjMap(vm); 12 | vm->curParser = NULL; 13 | } 14 | 15 | VM* newVM() { 16 | VM* vm = (VM*)malloc(sizeof(VM)); 17 | if (vm == NULL) { 18 | MEM_ERROR("allocate VM failed!"); 19 | } 20 | initVM(vm); 21 | buildCore(vm); 22 | return vm; 23 | } 24 | -------------------------------------------------------------------------------- /src/c6/s/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c6/s/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c6/s/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c6/s/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c6/s/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/s/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c6/s/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c6/s/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/s/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include "vm.h" 2 | #include 3 | #include "core.h" 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->allObjects = NULL; 9 | vm->curParser = NULL; 10 | StringBufferInit(&vm->allMethodNames); 11 | vm->allModules = newObjMap(vm); 12 | vm->curParser = NULL; 13 | } 14 | 15 | VM* newVM() { 16 | VM* vm = (VM*)malloc(sizeof(VM)); 17 | if (vm == NULL) { 18 | MEM_ERROR("allocate VM failed!"); 19 | } 20 | initVM(vm); 21 | buildCore(vm); 22 | return vm; 23 | } 24 | -------------------------------------------------------------------------------- /src/c6/t/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c6/t/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c6/t/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c6/t/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c6/t/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/t/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c6/t/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c6/t/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c6/t/vm/vm.c: -------------------------------------------------------------------------------- 1 | #include "vm.h" 2 | #include 3 | #include "core.h" 4 | 5 | //初始化虚拟机 6 | void initVM(VM* vm) { 7 | vm->allocatedBytes = 0; 8 | vm->allObjects = NULL; 9 | vm->curParser = NULL; 10 | StringBufferInit(&vm->allMethodNames); 11 | vm->allModules = newObjMap(vm); 12 | vm->curParser = NULL; 13 | } 14 | 15 | VM* newVM() { 16 | VM* vm = (VM*)malloc(sizeof(VM)); 17 | if (vm == NULL) { 18 | MEM_ERROR("allocate VM failed!"); 19 | } 20 | initVM(vm); 21 | buildCore(vm); 22 | return vm; 23 | } 24 | -------------------------------------------------------------------------------- /src/c7/a/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c7/a/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c7/a/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c7/a/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c7/a/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c7/a/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c7/a/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c7/a/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c7/b/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c7/b/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c7/b/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c7/b/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c7/b/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c7/b/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c7/b/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c7/b/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c7/c/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c7/c/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c7/c/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c7/c/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c7/c/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c7/c/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c7/c/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c7/c/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c7/d/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c7/d/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c7/d/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c7/d/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c7/d/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c7/d/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c7/d/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c7/d/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c7/e/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c7/e/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c7/e/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c7/e/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c7/e/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c7/e/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c7/e/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c7/e/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c8/a/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c8/a/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c8/a/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c8/a/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c8/a/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c8/a/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c8/a/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c8/a/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c8/b/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c8/b/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c8/b/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c8/b/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c8/b/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c8/b/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c8/b/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c8/b/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c8/c/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c8/c/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c8/c/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c8/c/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c8/c/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c8/c/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c8/c/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c8/c/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c8/d/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c8/d/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c8/d/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c8/d/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c8/d/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c8/d/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c8/d/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c8/d/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c8/e/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c8/e/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c8/e/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c8/e/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c8/e/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c8/e/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c8/e/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c8/e/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c8/f/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c8/f/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c8/f/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c8/f/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c8/f/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c8/f/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c8/f/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c8/f/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c8/g/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c8/g/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c8/g/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c8/g/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c8/g/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c8/g/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c8/g/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c8/g/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c8/h/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c8/h/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c8/h/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c8/h/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c8/h/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c8/h/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c8/h/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c8/h/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c8/i/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c8/i/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c8/i/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c8/i/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c8/i/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c8/i/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c8/i/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c8/i/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c8/j/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c8/j/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c8/j/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c8/j/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c8/j/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c8/j/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c8/j/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c8/j/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c8/k/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c8/k/employee.sp: -------------------------------------------------------------------------------- 1 | class Employee { 2 | var name 3 | var gender 4 | var age 5 | var salary 6 | static var employeeNum = 0 7 | new(n, g, a, s) { 8 | name = n 9 | gender = g 10 | age = a 11 | salary = s 12 | employeeNum = employeeNum + 1 13 | } 14 | 15 | sayHi() { 16 | System.print("My name is " + 17 | name + ", I am a " + gender + 18 | ", " + age.toString + "years old") 19 | } 20 | 21 | salary { 22 | return salary 23 | } 24 | 25 | static employeeNum { 26 | return employeeNum 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/c8/k/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c8/k/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c8/k/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c8/k/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c8/k/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c8/k/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c8/k/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c9/a/cli/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef _CLI_CLI_H 2 | #define _CLI_CLI_H 3 | 4 | #define VERSION 0.1.0 5 | #define MAX_LINE_LEN 1024 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /src/c9/a/employee.sp: -------------------------------------------------------------------------------- 1 | class Employee { 2 | var name 3 | var gender 4 | var age 5 | var salary 6 | static var employeeNum = 0 7 | new(n, g, a, s) { 8 | name = n 9 | gender = g 10 | age = a 11 | salary = s 12 | employeeNum = employeeNum + 1 13 | } 14 | 15 | sayHi() { 16 | System.print("My name is " + 17 | name + ", I am a " + gender + 18 | ", " + age.toString + "years old") 19 | } 20 | 21 | salary { 22 | return salary 23 | } 24 | 25 | static employeeNum { 26 | return employeeNum 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/c9/a/gc/gc.h: -------------------------------------------------------------------------------- 1 | #ifndef _GC_GC_H 2 | #define _GC_GC_H 3 | #include "vm.h" 4 | void grayObject(VM* vm, ObjHeader* obj); 5 | void grayValue(VM* vm, Value value); 6 | void freeObject(VM* vm, ObjHeader* obj); 7 | void startGC(VM* vm); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c9/a/include/unicodeUtf8.h: -------------------------------------------------------------------------------- 1 | #ifndef _INCLUDE_UTF8_H 2 | #define _INCLUDE_UTF8_H 3 | #include 4 | uint32_t getByteNumOfEncodeUtf8(int value); 5 | uint32_t getByteNumOfDecodeUtf8(uint8_t byte); 6 | uint8_t encodeUtf8(uint8_t* buf, int value); 7 | int decodeUtf8(const uint8_t* bytePtr, uint32_t length); 8 | #endif 9 | -------------------------------------------------------------------------------- /src/c9/a/object/header_obj.c: -------------------------------------------------------------------------------- 1 | #include "header_obj.h" 2 | #include "class.h" 3 | #include "vm.h" 4 | 5 | DEFINE_BUFFER_METHOD(Value) 6 | 7 | //初始化对象头 8 | void initObjHeader(VM* vm, ObjHeader* objHeader, ObjType objType, Class* class) { 9 | objHeader->type = objType; 10 | objHeader->isDark = false; 11 | objHeader->class = class; //设置meta类 12 | objHeader->next = vm->allObjects; 13 | vm->allObjects = objHeader; 14 | } 15 | -------------------------------------------------------------------------------- /src/c9/a/object/meta_obj.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_METAOBJ_H 2 | #define _OBJECT_METAOBJ_H 3 | #include "obj_string.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | SymbolTable moduleVarName; //模块中的模块变量名 8 | ValueBuffer moduleVarValue; //模块中的模块变量值 9 | ObjString* name; //模块名 10 | } ObjModule; //模块对象 11 | 12 | typedef struct { 13 | ObjHeader objHeader; 14 | //具体的字段 15 | Value fields[0]; 16 | } ObjInstance; //对象实例 17 | 18 | ObjModule* newObjModule(VM* vm, const char* modName); 19 | ObjInstance* newObjInstance(VM* vm, Class* class); 20 | #endif 21 | -------------------------------------------------------------------------------- /src/c9/a/object/obj_list.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_LIST_H 2 | #define _OBJECT_LIST_H 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | typedef struct { 7 | ObjHeader objHeader; 8 | ValueBuffer elements; //list中的元素 9 | } ObjList; //list对象 10 | 11 | ObjList* newObjList(VM* vm, uint32_t elementNum); 12 | Value removeElement(VM* vm, ObjList* objList, uint32_t index); 13 | void insertElement(VM* vm, ObjList* objList, uint32_t index, Value value); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/c9/a/object/obj_range.c: -------------------------------------------------------------------------------- 1 | #include "obj_range.h" 2 | #include "utils.h" 3 | #include "class.h" 4 | #include "vm.h" 5 | 6 | //新建range对象 7 | ObjRange* newObjRange(VM* vm, int from, int to) { 8 | ObjRange* objRange = ALLOCATE(vm, ObjRange); 9 | initObjHeader(vm, &objRange->objHeader, OT_RANGE, vm->rangeClass); 10 | objRange->from = from; 11 | objRange->to = to; 12 | return objRange; 13 | } 14 | -------------------------------------------------------------------------------- /src/c9/a/object/obj_range.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_RANGE_H 2 | #define _OBJECT_RANGE_H 3 | #include "class.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | int from; //范围的起始 8 | int to; //范围的结束 9 | } ObjRange; //range对象 10 | 11 | ObjRange* newObjRange(VM* vm, int from, int to); 12 | #endif 13 | -------------------------------------------------------------------------------- /src/c9/a/object/obj_string.h: -------------------------------------------------------------------------------- 1 | #ifndef _OBJECT_STRING_H 2 | #define _OBJECT_STRING_H 3 | #include "header_obj.h" 4 | 5 | typedef struct { 6 | ObjHeader objHeader; 7 | uint32_t hashCode; //字符串的哈希值 8 | CharValue value; 9 | } ObjString; 10 | 11 | uint32_t hashString(char* str, uint32_t length); 12 | void hashObjString(ObjString* objString); 13 | ObjString* newObjString(VM* vm, const char* str, uint32_t length); 14 | #endif 15 | -------------------------------------------------------------------------------- /src/sparrow.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yifengyou/sparrow/033b149ac3390dcc882bea8819a6aedee1d66f79/src/sparrow.tgz --------------------------------------------------------------------------------