diff --git a/version3.0/nasal.h b/version3.0/nasal.h index 1fb3418..004ca77 100644 --- a/version3.0/nasal.h +++ b/version3.0/nasal.h @@ -1,6 +1,7 @@ #ifndef __NASAL_H__ #define __NASAL_H__ +#include #include #include #include @@ -21,5 +22,7 @@ #include "nasal_lexer.h" #include "nasal_ast.h" #include "nasal_parse.h" +#include "nasal_vm.h" +#include "nasal_gc.h" #endif \ No newline at end of file diff --git a/version3.0/nasal_gc.h b/version3.0/nasal_gc.h new file mode 100644 index 0000000..dfd94ea --- /dev/null +++ b/version3.0/nasal_gc.h @@ -0,0 +1,97 @@ +#ifndef __NASAL_GC_H__ +#define __NASAL_GC_H__ + +#define GC_BLK_SIZE 128 + +class nasal_number; +class nasal_string; +class nasal_vector; +class nasal_hash; +class nasal_function; +class nasal_closure; + +class nasal_scalar +{ +private: + int type; + void* scalar_ptr; +public: + nasal_scalar() + { + type=0; + scalar_ptr=(void*)NULL; + return; + } +}; + +struct gc_unit +{ + bool collected; + char ref_cnt; + nasal_scalar elem; + gc_unit() + { + collected=true; + ref_cnt=0; + return; + } +}; + +class nasal_gc +{ +private: + std::queue free_space; + std::vector memory; +public: + nasal_gc(); + ~nasal_gc(); + int gc_alloc(); + int add_ref(int); + int del_ref(int); +}; + +nasal_gc::nasal_gc() +{ + memory.clear(); + return; +} + +nasal_gc::~nasal_gc() +{ + int size=memory.size(); + for(int i=0;i> [gc] add_ref:unexpected memory \'"< free_space; + std::vector memory; +public: + nasal_vm(); + ~nasal_vm(); + int nas_alloc(); + int nas_free(int); + int nas_store(int,int); +}; + +nasal_vm::nasal_vm() +{ + memory.clear(); + return; +} + +nasal_vm::~nasal_vm() +{ + int size=memory.size(); + for(int i=0;i> [vm] nas_free:unexpected memory \'"<> [vm] nas_store:unexpected memory \'"<