ref: bedc04c61570b08e55444136805b94dade678697
parent: 5858c58946f9166810de28c40b1839e0b386835f
author: asau <asau@ficl.sf.net>
date: Sat Dec 4 15:38:47 CST 2010
Allocate separate memory region for stack data.
--- a/ficl.h
+++ b/ficl.h
@@ -4,7 +4,7 @@
** Author: John Sadler (john_sadler@alum.mit.edu)
** Created: 19 July 1997
** Dedicated to RHS, in loving memory
-** $Id: ficl.h,v 1.28 2010/11/03 14:44:38 asau Exp $
+** $Id: ficl.h,v 1.29 2010/12/04 21:38:47 asau Exp $
********************************************************************
**
** Copyright (c) 1997-2001 John Sadler (john_sadler@alum.mit.edu)
@@ -931,7 +931,7 @@
ficlCell *top; /* stack pointer */
ficlVm *vm; /* used for debugging */
char *name; /* used for debugging */
- ficlCell base[1]; /* Top of stack */
+ ficlCell *base; /* Top of stack */
} ficlStack;
/*
--- a/stack.c
+++ b/stack.c
@@ -3,7 +3,7 @@
** Forth Inspired Command Language
** Author: John Sadler (john_sadler@alum.mit.edu)
** Created: 16 Oct 1997
-** $Id: stack.c,v 1.14 2010/12/02 16:28:03 asau Exp $
+** $Id: stack.c,v 1.15 2010/12/04 21:38:47 asau Exp $
*******************************************************************/
/*
** Copyright (c) 1997-2001 John Sadler (john_sadler@alum.mit.edu)
@@ -98,13 +98,15 @@
ficlStack *ficlStackCreate(ficlVm *vm, char *name, unsigned size)
{
- size_t totalSize = sizeof (ficlStack) + (size * sizeof (ficlCell));
- ficlStack *stack = (ficlStack*)ficlMalloc(totalSize);
+ ficlCell *base = (ficlCell*)ficlMalloc(size * sizeof (ficlCell));
+ ficlStack *stack = (ficlStack*)ficlMalloc(sizeof (ficlStack));
FICL_VM_ASSERT(vm, size != 0);
+ FICL_VM_ASSERT(vm, base != NULL);
FICL_VM_ASSERT(vm, stack != NULL);
stack->size = size;
+ stack->base = base;
stack->frame = NULL;
stack->vm = vm;
@@ -122,8 +124,11 @@
void ficlStackDestroy(ficlStack *stack)
{
- if (stack)
+ if (stack != NULL) {
+ if (stack->base != NULL)
+ ficlFree(stack->base);
ficlFree(stack);
+ }
return;
}