]> gitweb.factorcode.org Git - factor.git/commitdiff
vm: more use of ctx->replace().
authorJohn Benediktsson <mrjbq7@gmail.com>
Fri, 22 Mar 2013 16:17:02 +0000 (09:17 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Fri, 22 Mar 2013 16:17:02 +0000 (09:17 -0700)
vm/alien.cpp
vm/callstack.cpp
vm/contexts.cpp
vm/io.cpp
vm/math.cpp
vm/vm.hpp

index d0fdec6312151ed7b5c3618d332a214ade0e2a2f..d1734d3098c8c8045d744beb58750ebcd9636c8e 100755 (executable)
@@ -84,7 +84,7 @@ void factor_vm::primitive_displaced_alien()
 if the object is a byte array, as a sanity check. */
 void factor_vm::primitive_alien_address()
 {
-       ctx->push(from_unsigned_cell((cell)pinned_alien_offset(ctx->pop())));
+       ctx->replace(from_unsigned_cell((cell)pinned_alien_offset(ctx->peek())));
 }
 
 /* pop ( alien n ) from datastack, return alien's address plus n */
@@ -125,7 +125,7 @@ void factor_vm::primitive_dlopen()
 void factor_vm::primitive_dlsym()
 {
        data_root<object> library(ctx->pop(),this);
-       data_root<byte_array> name(ctx->pop(),this);
+       data_root<byte_array> name(ctx->peek(),this);
        name.untag_check(this);
 
        symbol_char *sym = name->data<symbol_char>();
@@ -135,12 +135,12 @@ void factor_vm::primitive_dlsym()
                dll *d = untag_check<dll>(library.value());
 
                if(d->handle == NULL)
-                       ctx->push(false_object);
+                       ctx->replace(false_object);
                else
-                       ctx->push(allot_alien(ffi_dlsym(d,sym)));
+                       ctx->replace(allot_alien(ffi_dlsym(d,sym)));
        }
        else
-               ctx->push(allot_alien(ffi_dlsym(NULL,sym)));
+               ctx->replace(allot_alien(ffi_dlsym(NULL,sym)));
 }
 
 /* Allocates memory */
@@ -148,7 +148,7 @@ void factor_vm::primitive_dlsym()
 void factor_vm::primitive_dlsym_raw()
 {
        data_root<object> library(ctx->pop(),this);
-       data_root<byte_array> name(ctx->pop(),this);
+       data_root<byte_array> name(ctx->peek(),this);
        name.untag_check(this);
 
        symbol_char *sym = name->data<symbol_char>();
@@ -158,12 +158,12 @@ void factor_vm::primitive_dlsym_raw()
                dll *d = untag_check<dll>(library.value());
 
                if(d->handle == NULL)
-                       ctx->push(false_object);
+                       ctx->replace(false_object);
                else
-                       ctx->push(allot_alien(ffi_dlsym_raw(d,sym)));
+                       ctx->replace(allot_alien(ffi_dlsym_raw(d,sym)));
        }
        else
-               ctx->push(allot_alien(ffi_dlsym_raw(NULL,sym)));
+               ctx->replace(allot_alien(ffi_dlsym_raw(NULL,sym)));
 }
 
 /* close a native library handle */
@@ -176,11 +176,11 @@ void factor_vm::primitive_dlclose()
 
 void factor_vm::primitive_dll_validp()
 {
-       cell library = ctx->pop();
+       cell library = ctx->peek();
        if(to_boolean(library))
-               ctx->push(tag_boolean(untag_check<dll>(library)->handle != NULL));
+               ctx->replace(tag_boolean(untag_check<dll>(library)->handle != NULL));
        else
-               ctx->push(true_object);
+               ctx->replace(true_object);
 }
 
 /* gets the address of an object representing a C pointer */
index 37647b2b3bd7c1e87502468ad8556d462ac8d76b..15be713df0b8ad3c0f79e535149e80737ac0e7be 100755 (executable)
@@ -50,8 +50,8 @@ void factor_vm::primitive_callstack()
 
 void factor_vm::primitive_callstack_for()
 {
-       context *other_ctx = (context *)pinned_alien_offset(ctx->pop());
-       ctx->push(capture_callstack(other_ctx));
+       context *other_ctx = (context *)pinned_alien_offset(ctx->peek());
+       ctx->replace(capture_callstack(other_ctx));
 }
 
 void *factor_vm::frame_predecessor(void *frame_top)
@@ -86,7 +86,7 @@ struct stack_frame_in_array { cell cells[3]; };
 
 void factor_vm::primitive_callstack_to_array()
 {
-       data_root<callstack> callstack(ctx->pop(),this);
+       data_root<callstack> callstack(ctx->peek(),this);
 
        stack_frame_accumulator accum(this);
        iterate_callstack_object(callstack.untagged(),accum);
@@ -98,7 +98,7 @@ void factor_vm::primitive_callstack_to_array()
 
        accum.frames.trim();
 
-       ctx->push(accum.frames.elements.value());
+       ctx->replace(accum.frames.elements.value());
 
 }
 
@@ -106,18 +106,18 @@ void factor_vm::primitive_callstack_to_array()
 Used by the single stepper. */
 void factor_vm::primitive_innermost_stack_frame_executing()
 {
-       callstack *stack = untag_check<callstack>(ctx->pop());
+       callstack *stack = untag_check<callstack>(ctx->peek());
        void *frame = stack->top();
        void *addr = frame_return_address(frame);
-       ctx->push(code->code_block_for_address((cell)addr)->owner_quot());
+       ctx->replace(code->code_block_for_address((cell)addr)->owner_quot());
 }
 
 void factor_vm::primitive_innermost_stack_frame_scan()
 {
-       callstack *stack = untag_check<callstack>(ctx->pop());
+       callstack *stack = untag_check<callstack>(ctx->peek());
        void *frame = stack->top();
        void *addr = frame_return_address(frame);
-       ctx->push(code->code_block_for_address((cell)addr)->scan(this,addr));
+       ctx->replace(code->code_block_for_address((cell)addr)->scan(this,addr));
 }
 
 void factor_vm::primitive_set_innermost_stack_frame_quot()
index 4c3480e96196f2ac137aa3d824212aea41f1791d..ae51d7775f9342a984b0217a5dd8dc7821bcb4e3 100644 (file)
@@ -233,8 +233,8 @@ void factor_vm::primitive_set_context_object()
 void factor_vm::primitive_context_object_for()
 {
        context *other_ctx = (context *)pinned_alien_offset(ctx->pop());
-       fixnum n = untag_fixnum(ctx->pop());
-       ctx->push(other_ctx->context_objects[n]);
+       fixnum n = untag_fixnum(ctx->peek());
+       ctx->replace(other_ctx->context_objects[n]);
 }
 
 /* Allocates memory */
@@ -271,8 +271,8 @@ void factor_vm::primitive_datastack()
 
 void factor_vm::primitive_datastack_for()
 {
-       context *other_ctx = (context *)pinned_alien_offset(ctx->pop());
-       ctx->push(datastack_to_array(other_ctx));
+       context *other_ctx = (context *)pinned_alien_offset(ctx->peek());
+       ctx->replace(datastack_to_array(other_ctx));
 }
 
 cell factor_vm::retainstack_to_array(context *ctx)
@@ -294,8 +294,8 @@ void factor_vm::primitive_retainstack()
 
 void factor_vm::primitive_retainstack_for()
 {
-       context *other_ctx = (context *)pinned_alien_offset(ctx->pop());
-       ctx->push(retainstack_to_array(other_ctx));
+       context *other_ctx = (context *)pinned_alien_offset(ctx->peek());
+       ctx->replace(retainstack_to_array(other_ctx));
 }
 
 /* returns pointer to top of stack */
index 184f3aeddb9fb048be6941e8168de985fcda6dbc..6130490243a272a5c8cbe2d5b2d6cb7fe6299354 100755 (executable)
--- a/vm/io.cpp
+++ b/vm/io.cpp
@@ -182,37 +182,42 @@ FILE *factor_vm::pop_file_handle()
        return (FILE *)alien_offset(ctx->pop());
 }
 
+FILE *factor_vm::peek_file_handle()
+{
+       return (FILE *)alien_offset(ctx->peek());
+}
+
 void factor_vm::primitive_fgetc()
 {
-       FILE *file = pop_file_handle();
+       FILE *file = peek_file_handle();
 
        int c = safe_fgetc(file);
        if(c == EOF && feof(file))
        {
                clearerr(file);
-               ctx->push(false_object);
+               ctx->replace(false_object);
        }
        else
-               ctx->push(tag_fixnum(c));
+               ctx->replace(tag_fixnum(c));
 }
 
 /* Allocates memory */
 void factor_vm::primitive_fread()
 {
        FILE *file = pop_file_handle();
-       void *buf = (void*)alien_offset(ctx->pop());
+       void *buf = (void*)alien_offset(ctx->peek());
        fixnum size = unbox_array_size();
 
        if(size == 0)
        {
-               ctx->push(from_unsigned_cell(0));
+               ctx->replace(from_unsigned_cell(0));
                return;
        }
 
        size_t c = safe_fread(buf,1,size,file);
        if(c == 0 || feof(file))
                clearerr(file);
-       ctx->push(from_unsigned_cell(c));
+       ctx->replace(from_unsigned_cell(c));
 }
 
 void factor_vm::primitive_fputc()
@@ -238,8 +243,8 @@ void factor_vm::primitive_fwrite()
 
 void factor_vm::primitive_ftell()
 {
-       FILE *file = pop_file_handle();
-       ctx->push(from_signed_8(safe_ftell(file)));
+       FILE *file = peek_file_handle();
+       ctx->replace(from_signed_8(safe_ftell(file)));
 }
 
 void factor_vm::primitive_fseek()
index 29a2f86304ebbf96187717aa7e95cff5032db5e4..5f0218ad3fe739466440a0777081c358d519f244 100755 (executable)
@@ -219,8 +219,8 @@ void factor_vm::primitive_bignum_not()
 void factor_vm::primitive_bignum_bitp()
 {
        int bit = (int)to_fixnum(ctx->pop());
-       bignum *x = untag<bignum>(ctx->pop());
-       ctx->push(tag_boolean(bignum_logbitp(bit,x)));
+       bignum *x = untag<bignum>(ctx->peek());
+       ctx->replace(tag_boolean(bignum_logbitp(bit,x)));
 }
 
 void factor_vm::primitive_bignum_log2()
@@ -258,9 +258,9 @@ void factor_vm::primitive_format_float()
 {
        byte_array *array = allot_byte_array(100);
        char *format = alien_offset(ctx->pop());
-       double value = untag_float_check(ctx->pop());
+       double value = untag_float_check(ctx->peek());
        SNPRINTF(array->data<char>(),99,format,value);
-       ctx->push(tag<byte_array>(array));
+       ctx->replace(tag<byte_array>(array));
 }
 
 #define POP_FLOATS(x,y) \
index 112b65b3413a5dda83050ae2a86ab7d5c5521bfe..ebc714b7f43ac7e5c8d8d30a8ce382e81b210d20 100755 (executable)
--- a/vm/vm.hpp
+++ b/vm/vm.hpp
@@ -556,6 +556,7 @@ struct factor_vm
        void safe_fclose(FILE *stream);
        void primitive_fopen();
        FILE *pop_file_handle();
+       FILE *peek_file_handle();
        void primitive_fgetc();
        void primitive_fread();
        void primitive_fputc();