socsvn commit: r288708 - soc2015/clord/head/sys/contrib/ficl
clord at FreeBSD.org
clord at FreeBSD.org
Thu Jul 23 19:20:02 UTC 2015
Author: clord
Date: Thu Jul 23 19:19:59 2015
New Revision: 288708
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288708
Log:
Add the ficlDictionaryCheckThreshold function into Ficl 4 source. Was
previously named dictCheckThreshold, but the name, as well as some of the types,
were renamed to match the Ficl 4 sources better.
Modified:
soc2015/clord/head/sys/contrib/ficl/dictionary.c
soc2015/clord/head/sys/contrib/ficl/ficl.h
soc2015/clord/head/sys/contrib/ficl/ficlcompatibility.h
soc2015/clord/head/sys/contrib/ficl/primitives.c
Modified: soc2015/clord/head/sys/contrib/ficl/dictionary.c
==============================================================================
--- soc2015/clord/head/sys/contrib/ficl/dictionary.c Thu Jul 23 19:14:32 2015 (r288707)
+++ soc2015/clord/head/sys/contrib/ficl/dictionary.c Thu Jul 23 19:19:59 2015 (r288708)
@@ -64,6 +64,10 @@
#define FICL_SAFE_SYSTEM_FROM_DICTIONARY(dictionary) (((dictionary) != NULL) ? (dictionary)->system : NULL)
#define FICL_DICTIONARY_ASSERT(dictionary, expression) FICL_SYSTEM_ASSERT(FICL_SAFE_SYSTEM_FROM_DICTIONARY(dictionary), expression)
+/* Dictionary on-demand resizing control variables */
+CELL dictThreshold;
+CELL dictIncrease;
+
/**************************************************************************
d i c t A b o r t D e f i n i t i o n
** Abort a definition in process: reclaim its memory and unlink it
@@ -627,6 +631,24 @@
/**************************************************************************
+ d i c t C h e c k T h r e s h o l d
+** Verify if an increase in the dictionary size is warranted, and do it if
+** so.
+**************************************************************************/
+
+void ficlDictionaryCheckThreshold(ficlDictionary *dictionary)
+{
+ if( dictCellsAvail(dictionary) < dictThreshold.u ) {
+ dictionary->base = ficlMalloc( dictIncrease.u * sizeof (CELL) );
+ assert(dictionary->base);
+ dictionary->here = dictionary->base;
+ dictionary->size = dictIncrease.u;
+ dictAlign(dictionary);
+ }
+}
+
+
+/**************************************************************************
s e e
** TOOLS ( "<spaces>name" -- )
** Display a human-readable representation of the named word's definition.
Modified: soc2015/clord/head/sys/contrib/ficl/ficl.h
==============================================================================
--- soc2015/clord/head/sys/contrib/ficl/ficl.h Thu Jul 23 19:14:32 2015 (r288707)
+++ soc2015/clord/head/sys/contrib/ficl/ficl.h Thu Jul 23 19:19:59 2015 (r288708)
@@ -1423,7 +1423,7 @@
int wordlistCount;
unsigned size; /* Number of cells in dictionary (total)*/
ficlSystem *system; /* used for debugging */
- ficlCell base[1]; /* Base of dictionary memory */
+ ficlCell *base; /* Base of dictionary memory */
};
FICL_PLATFORM_EXTERN void ficlDictionaryAbortDefinition(ficlDictionary *dictionary);
@@ -1484,6 +1484,7 @@
FICL_PLATFORM_EXTERN int ficlDictionaryCellsAvailable (ficlDictionary *dictionary);
FICL_PLATFORM_EXTERN int ficlDictionaryCellsUsed (ficlDictionary *dictionary);
+FICL_PLATFORM_EXTERN void ficlDictionaryCheckThreshold(ficlDictionary *dictionary);
FICL_PLATFORM_EXTERN ficlDictionary *ficlDictionaryCreate(ficlSystem *system, unsigned nCELLS);
FICL_PLATFORM_EXTERN ficlDictionary *ficlDictionaryCreateHashed(ficlSystem *system, unsigned nCells, unsigned nHash);
FICL_PLATFORM_EXTERN ficlHash *ficlDictionaryCreateWordlist(ficlDictionary *dictionary, int nBuckets);
Modified: soc2015/clord/head/sys/contrib/ficl/ficlcompatibility.h
==============================================================================
--- soc2015/clord/head/sys/contrib/ficl/ficlcompatibility.h Thu Jul 23 19:14:32 2015 (r288707)
+++ soc2015/clord/head/sys/contrib/ficl/ficlcompatibility.h Thu Jul 23 19:19:59 2015 (r288708)
@@ -312,7 +312,7 @@
int nLists;
unsigned size; /* Number of cells in dict (total)*/
ficlSystem *system;
- CELL dict[1]; /* Base of dictionary memory */
+ CELL *dict; /* Base of dictionary memory */
};
void *alignPtr(void *ptr);
Modified: soc2015/clord/head/sys/contrib/ficl/primitives.c
==============================================================================
--- soc2015/clord/head/sys/contrib/ficl/primitives.c Thu Jul 23 19:14:32 2015 (r288707)
+++ soc2015/clord/head/sys/contrib/ficl/primitives.c Thu Jul 23 19:19:59 2015 (r288708)
@@ -189,6 +189,8 @@
ficlDictionary *dictionary = ficlVmGetDictionary(vm);
ficlString name = ficlVmGetWord(vm);
+ ficlDictionaryCheckThreshold(dictionary);
+
vm->state = FICL_VM_STATE_COMPILE;
markControlTag(vm, colonTag);
ficlDictionaryAppendWord(dictionary, name, (ficlPrimitive)ficlInstructionColonParen, FICL_WORD_DEFAULT | FICL_WORD_SMUDGED);
@@ -1493,6 +1495,8 @@
ficlDictionary *dictionary = ficlVmGetDictionary(vm);
ficlString name = ficlVmGetWord(vm);
+ ficlDictionaryCheckThreshold(dictionary);
+
ficlDictionaryAppendWord(dictionary, name, (ficlPrimitive)ficlInstructionCreateParen, FICL_WORD_DEFAULT);
ficlVmDictionaryAllotCells(vm, dictionary, 1);
return;
More information about the svn-soc-all
mailing list