From 7b35d77f44884f0d57bb3eafb6d92c24b3cfb165 Mon Sep 17 00:00:00 2001 From: Valk Richard Li <48872266+ValKmjolnir@users.noreply.github.com> Date: Mon, 27 Jul 2020 21:13:52 -0700 Subject: [PATCH] update --- version3.0/nasal_gc.h | 126 +++++++++++++++++++++++++++++++++++++++--- version3.0/nasal_vm.h | 72 +----------------------- 2 files changed, 118 insertions(+), 80 deletions(-) diff --git a/version3.0/nasal_gc.h b/version3.0/nasal_gc.h index 5a6c90c..0b19364 100644 --- a/version3.0/nasal_gc.h +++ b/version3.0/nasal_gc.h @@ -1,7 +1,8 @@ #ifndef __NASAL_GC_H__ #define __NASAL_GC_H__ -#define GC_BLK_SIZE 128 +#define MEM_BLK_SIZE 128 +#define GC_BLK_SIZE 128 class nasal_vector { @@ -14,6 +15,19 @@ public: elems.clear(); return; } + void add_elem(int memory_address) + { + elems.push_back(memory_address); + return; + } + int del_elem(int index) + { + if(index>=elems.size()) + return -1; + int ret=elems[index]; + elems.pop_back(); + return ret; + } }; class nasal_hash { @@ -26,6 +40,16 @@ public: elems.clear(); return; } + void add_elem(std::string key,int memory_address) + { + elems[key]=memory_address; + return; + } + void del_elem(std::string key) + { + elems.erase(key); + return; + } }; class nasal_function { @@ -106,6 +130,7 @@ public: // unary - ! }; +/* gc_unit is the basic unit of garbage_collector*/ struct gc_unit { bool collected; @@ -119,26 +144,27 @@ struct gc_unit } }; -class nasal_gc +/* garbage_collector uses FIFO to manage value space*/ +class nasal_garbage_collector { private: std::queue free_space; std::vector memory; public: - nasal_gc(); - ~nasal_gc(); + nasal_garbage_collector(); + ~nasal_garbage_collector(); int gc_alloc(); int add_ref(int); int del_ref(int); }; -nasal_gc::nasal_gc() +nasal_garbage_collector::nasal_garbage_collector() { memory.clear(); return; } -nasal_gc::~nasal_gc() +nasal_garbage_collector::~nasal_garbage_collector() { int size=memory.size(); for(int i=0;i free_space; + std::vector memory; +public: + nasal_vm_memory_manager(); + ~nasal_vm_memory_manager(); + int nas_alloc(); + int nas_free(int); + int nas_store(int,int); +}; + +nasal_vm_memory_manager::nasal_vm_memory_manager() +{ + memory.clear(); + return; +} + +nasal_vm_memory_manager::~nasal_vm_memory_manager() +{ + int size=memory.size(); + for(int i=0;i> [vm] nas_free:unexpected memory \'"<> [vm] nas_store:unexpected memory \'"< free_space; - std::vector memory; -public: - nasal_vm_memory_manager(); - ~nasal_vm_memory_manager(); - int nas_alloc(); - int nas_free(int); - int nas_store(int,int); -}; - -nasal_vm_memory_manager::nasal_vm_memory_manager() -{ - memory.clear(); - return; -} - -nasal_vm_memory_manager::~nasal_vm_memory_manager() -{ - int size=memory.size(); - for(int i=0;i> [vm] nas_free:unexpected memory \'"<> [vm] nas_store:unexpected memory \'"<