From 4f4c53c8228568655ce297feb971ee8d1685e24c Mon Sep 17 00:00:00 2001 From: Phil Dawes Date: Mon, 17 Aug 2009 21:37:07 +0100 Subject: [PATCH] moved words functions to vm --- vm/vm.hpp | 8 ++++++++ vm/words.cpp | 42 ++++++++++++++++++++++++++++++++++++------ 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/vm/vm.hpp b/vm/vm.hpp index 5ddfd5cd4a..c1dc417f83 100644 --- a/vm/vm.hpp +++ b/vm/vm.hpp @@ -236,6 +236,14 @@ struct factorvm { tuple *allot_tuple(cell layout_); inline void vmprim_tuple(); inline void vmprim_tuple_boa(); + + //words + word *allot_word(cell vocab_, cell name_); + inline void vmprim_word(); + inline void vmprim_word_xt(); + void update_word_xt(cell w_); + inline void vmprim_optimized_p(); + inline void vmprim_wrapper(); // next method here: diff --git a/vm/words.cpp b/vm/words.cpp index fa090c9cea..644db46896 100644 --- a/vm/words.cpp +++ b/vm/words.cpp @@ -3,7 +3,7 @@ namespace factor { -word *allot_word(cell vocab_, cell name_) +word *factorvm::allot_word(cell vocab_, cell name_) { gc_root vocab(vocab_); gc_root name(name_); @@ -31,16 +31,26 @@ word *allot_word(cell vocab_, cell name_) return new_word.untagged(); } +word *allot_word(cell vocab_, cell name_) +{ + return vm->allot_word(vocab_,name_); +} + /* ( name vocabulary -- word ) */ -PRIMITIVE(word) +inline void factorvm::vmprim_word() { cell vocab = dpop(); cell name = dpop(); dpush(tag(allot_word(vocab,name))); } +PRIMITIVE(word) +{ + PRIMITIVE_GETVM()->vmprim_word(); +} + /* word-xt ( word -- start end ) */ -PRIMITIVE(word_xt) +inline void factorvm::vmprim_word_xt() { word *w = untag_check(dpop()); code_block *code = (profiling_p ? w->profiling : w->code); @@ -48,8 +58,13 @@ PRIMITIVE(word_xt) dpush(allot_cell((cell)code + code->size)); } +PRIMITIVE(word_xt) +{ + PRIMITIVE_GETVM()->vmprim_word_xt(); +} + /* Allocates memory */ -void update_word_xt(cell w_) +void factorvm::update_word_xt(cell w_) { gc_root w(w_); @@ -64,16 +79,31 @@ void update_word_xt(cell w_) w->xt = w->code->xt(); } -PRIMITIVE(optimized_p) +void update_word_xt(cell w_) +{ + return vm->update_word_xt(w_); +} + +inline void factorvm::vmprim_optimized_p() { drepl(tag_boolean(word_optimized_p(untag_check(dpeek())))); } -PRIMITIVE(wrapper) +PRIMITIVE(optimized_p) +{ + PRIMITIVE_GETVM()->vmprim_optimized_p(); +} + +inline void factorvm::vmprim_wrapper() { wrapper *new_wrapper = allot(sizeof(wrapper)); new_wrapper->object = dpeek(); drepl(tag(new_wrapper)); } +PRIMITIVE(wrapper) +{ + PRIMITIVE_GETVM()->vmprim_wrapper(); +} + }