*** empty log message ***
This commit is contained in:
		@ -1,5 +1,5 @@
 | 
				
			|||||||
/* 
 | 
					/* 
 | 
				
			||||||
 * $Id: awk.c,v 1.43 2006-04-21 16:21:27 bacon Exp $ 
 | 
					 * $Id: awk.c,v 1.44 2006-04-21 17:24:31 bacon Exp $ 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <xp/awk/awk_i.h>
 | 
					#include <xp/awk/awk_i.h>
 | 
				
			||||||
@ -9,8 +9,7 @@
 | 
				
			|||||||
#include <xp/bas/assert.h>
 | 
					#include <xp/bas/assert.h>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void __free_func (xp_awk_t* awk, void* func);
 | 
					static void __free_func (void* awk, void* func);
 | 
				
			||||||
static void __free_namedval (xp_awk_t* awk, void* val);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
xp_awk_t* xp_awk_open (void)
 | 
					xp_awk_t* xp_awk_open (void)
 | 
				
			||||||
{	
 | 
					{	
 | 
				
			||||||
@ -59,18 +58,6 @@ xp_awk_t* xp_awk_open (void)
 | 
				
			|||||||
		return XP_NULL;	
 | 
							return XP_NULL;	
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* TODO: initial map size... */
 | 
					 | 
				
			||||||
	if (xp_awk_map_open(&awk->run.named,awk,256,__free_namedval) == XP_NULL)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		xp_str_close (&awk->token.name);
 | 
					 | 
				
			||||||
		xp_awk_map_close (&awk->tree.funcs);
 | 
					 | 
				
			||||||
		xp_awk_tab_close (&awk->parse.globals);
 | 
					 | 
				
			||||||
		xp_awk_tab_close (&awk->parse.locals);
 | 
					 | 
				
			||||||
		xp_awk_tab_close (&awk->parse.params);
 | 
					 | 
				
			||||||
		xp_free (awk);
 | 
					 | 
				
			||||||
		return XP_NULL;	
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	awk->opt.parse = 0;
 | 
						awk->opt.parse = 0;
 | 
				
			||||||
	awk->opt.run = 0;
 | 
						awk->opt.run = 0;
 | 
				
			||||||
	awk->errnum = XP_AWK_ENOERR;
 | 
						awk->errnum = XP_AWK_ENOERR;
 | 
				
			||||||
@ -89,14 +76,6 @@ xp_awk_t* xp_awk_open (void)
 | 
				
			|||||||
	awk->tree.chain = XP_NULL;
 | 
						awk->tree.chain = XP_NULL;
 | 
				
			||||||
	awk->tree.chain_tail = XP_NULL;
 | 
						awk->tree.chain_tail = XP_NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	awk->run.stack = XP_NULL;
 | 
					 | 
				
			||||||
	awk->run.stack_top = 0;
 | 
					 | 
				
			||||||
	awk->run.stack_base = 0;
 | 
					 | 
				
			||||||
	awk->run.stack_limit = 0;
 | 
					 | 
				
			||||||
	awk->run.exit_level = 0;
 | 
					 | 
				
			||||||
	awk->run.icache_count = 0;
 | 
					 | 
				
			||||||
	awk->run.rcache_count = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	awk->lex.curc = XP_CHAR_EOF;
 | 
						awk->lex.curc = XP_CHAR_EOF;
 | 
				
			||||||
	awk->lex.ungotc_count = 0;
 | 
						awk->lex.ungotc_count = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -109,7 +88,6 @@ int xp_awk_close (xp_awk_t* awk)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (xp_awk_detsrc(awk) == -1) return -1;
 | 
						if (xp_awk_detsrc(awk) == -1) return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	xp_awk_map_close (&awk->run.named);
 | 
					 | 
				
			||||||
	xp_awk_map_close (&awk->tree.funcs);
 | 
						xp_awk_map_close (&awk->tree.funcs);
 | 
				
			||||||
	xp_awk_tab_close (&awk->parse.globals);
 | 
						xp_awk_tab_close (&awk->parse.globals);
 | 
				
			||||||
	xp_awk_tab_close (&awk->parse.locals);
 | 
						xp_awk_tab_close (&awk->parse.locals);
 | 
				
			||||||
@ -126,33 +104,7 @@ int xp_awk_close (xp_awk_t* awk)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void xp_awk_clear (xp_awk_t* awk)
 | 
					void xp_awk_clear (xp_awk_t* awk)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* clear named variables */
 | 
					/* TODO: kill all associated run instances... */
 | 
				
			||||||
	xp_awk_map_clear (&awk->run.named);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* destroy run stack */
 | 
					 | 
				
			||||||
	if (awk->run.stack != XP_NULL)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		xp_free (awk->run.stack);
 | 
					 | 
				
			||||||
		awk->run.stack = XP_NULL;
 | 
					 | 
				
			||||||
		awk->run.stack_top = 0;
 | 
					 | 
				
			||||||
		awk->run.stack_base = 0;
 | 
					 | 
				
			||||||
		awk->run.stack_limit = 0;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* destroy values in free list */
 | 
					 | 
				
			||||||
	while (awk->run.icache_count > 0)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		--awk->run.icache_count;
 | 
					 | 
				
			||||||
		xp_awk_freeval (awk, 
 | 
					 | 
				
			||||||
			awk->run.icache[awk->run.icache_count], xp_false);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	while (awk->run.rcache_count > 0)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		--awk->run.rcache_count;
 | 
					 | 
				
			||||||
		xp_awk_freeval (awk, 
 | 
					 | 
				
			||||||
			awk->run.rcache[awk->run.rcache_count], xp_false);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	xp_awk_tab_clear (&awk->parse.globals);
 | 
						xp_awk_tab_clear (&awk->parse.globals);
 | 
				
			||||||
	xp_awk_tab_clear (&awk->parse.locals);
 | 
						xp_awk_tab_clear (&awk->parse.locals);
 | 
				
			||||||
@ -230,7 +182,7 @@ int xp_awk_detsrc (xp_awk_t* awk)
 | 
				
			|||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void __free_func (xp_awk_t* awk, void* func)
 | 
					static void __free_func (void* owner, void* func)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	xp_awk_func_t* f = (xp_awk_func_t*) func;
 | 
						xp_awk_func_t* f = (xp_awk_func_t*) func;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -239,8 +191,3 @@ static void __free_func (xp_awk_t* awk, void* func)
 | 
				
			|||||||
	xp_awk_clrpt (f->body);
 | 
						xp_awk_clrpt (f->body);
 | 
				
			||||||
	xp_free (f);
 | 
						xp_free (f);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
static void __free_namedval (xp_awk_t* awk, void* val)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	xp_awk_refdownval (awk, val);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -1,10 +1,14 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * $Id: awk_i.h,v 1.6 2006-04-21 16:21:27 bacon Exp $
 | 
					 * $Id: awk_i.h,v 1.7 2006-04-21 17:24:31 bacon Exp $
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef _XP_AWK_AWKI_H_
 | 
					#ifndef _XP_AWK_AWKI_H_
 | 
				
			||||||
#define _XP_AWK_AWKI_H_
 | 
					#define _XP_AWK_AWKI_H_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct xp_awk_chain_t xp_awk_chain_t;
 | 
				
			||||||
 | 
					typedef struct xp_awk_run_t xp_awk_run_t;
 | 
				
			||||||
 | 
					typedef struct xp_awk_tree_t xp_awk_tree_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <xp/awk/awk.h>
 | 
					#include <xp/awk/awk.h>
 | 
				
			||||||
#include <xp/awk/tree.h>
 | 
					#include <xp/awk/tree.h>
 | 
				
			||||||
#include <xp/awk/tab.h>
 | 
					#include <xp/awk/tab.h>
 | 
				
			||||||
@ -18,9 +22,6 @@
 | 
				
			|||||||
#include <xp/bas/str.h>
 | 
					#include <xp/bas/str.h>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct xp_awk_chain_t xp_awk_chain_t;
 | 
					 | 
				
			||||||
typedef struct xp_awk_run-t xp_awk_run_t;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
struct xp_awk_parse_t
 | 
					struct xp_awk_parse_t
 | 
				
			||||||
@ -54,6 +55,16 @@ run with run_stack
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct xp_awk_tree_t
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						xp_size_t nglobals;
 | 
				
			||||||
 | 
						xp_awk_map_t funcs;
 | 
				
			||||||
 | 
						xp_awk_nde_t* begin;
 | 
				
			||||||
 | 
						xp_awk_nde_t* end;
 | 
				
			||||||
 | 
						xp_awk_chain_t* chain;
 | 
				
			||||||
 | 
						xp_awk_chain_t* chain_tail;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct xp_awk_t
 | 
					struct xp_awk_t
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* options */
 | 
						/* options */
 | 
				
			||||||
@ -73,15 +84,7 @@ struct xp_awk_t
 | 
				
			|||||||
	void* out_arg;
 | 
						void* out_arg;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* parse tree */
 | 
						/* parse tree */
 | 
				
			||||||
	struct 
 | 
						xp_awk_tree_t tree;
 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		xp_size_t nglobals;
 | 
					 | 
				
			||||||
		xp_awk_map_t funcs;
 | 
					 | 
				
			||||||
		xp_awk_nde_t* begin;
 | 
					 | 
				
			||||||
		xp_awk_nde_t* end;
 | 
					 | 
				
			||||||
		xp_awk_chain_t* chain;
 | 
					 | 
				
			||||||
		xp_awk_chain_t* chain_tail;
 | 
					 | 
				
			||||||
	} tree;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* temporary information that the parser needs */
 | 
						/* temporary information that the parser needs */
 | 
				
			||||||
	struct
 | 
						struct
 | 
				
			||||||
@ -92,23 +95,6 @@ struct xp_awk_t
 | 
				
			|||||||
		xp_size_t nlocals_max;
 | 
							xp_size_t nlocals_max;
 | 
				
			||||||
	} parse;
 | 
						} parse;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* run-time data structure */
 | 
					 | 
				
			||||||
	struct
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		xp_awk_map_t named;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		void** stack;
 | 
					 | 
				
			||||||
		xp_size_t stack_top;
 | 
					 | 
				
			||||||
		xp_size_t stack_base;
 | 
					 | 
				
			||||||
		xp_size_t stack_limit;
 | 
					 | 
				
			||||||
		int exit_level;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		xp_awk_val_int_t* icache[100]; /* TODO: ...  */
 | 
					 | 
				
			||||||
		xp_awk_val_real_t* rcache[100]; /* TODO: ...  */
 | 
					 | 
				
			||||||
		xp_size_t icache_count;
 | 
					 | 
				
			||||||
		xp_size_t rcache_count;
 | 
					 | 
				
			||||||
	} run;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* source buffer management */
 | 
						/* source buffer management */
 | 
				
			||||||
	struct 
 | 
						struct 
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -153,6 +139,9 @@ struct xp_awk_run_t
 | 
				
			|||||||
	/* input_stream */
 | 
						/* input_stream */
 | 
				
			||||||
	/* output_stream */
 | 
						/* output_stream */
 | 
				
			||||||
	xp_awk_t* awk;
 | 
						xp_awk_t* awk;
 | 
				
			||||||
 | 
						int opt;
 | 
				
			||||||
 | 
						xp_awk_tree_t* tree;
 | 
				
			||||||
 | 
						xp_size_t nglobals;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * $Id: map.c,v 1.13 2006-04-19 03:42:08 bacon Exp $
 | 
					 * $Id: map.c,v 1.14 2006-04-21 17:24:31 bacon Exp $
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <xp/awk/awk_i.h>
 | 
					#include <xp/awk/awk_i.h>
 | 
				
			||||||
@ -20,13 +20,13 @@ static xp_size_t __hash (const xp_char_t* key);
 | 
				
			|||||||
	{ \
 | 
						{ \
 | 
				
			||||||
		xp_free ((xp_char_t*)(pair)->key); \
 | 
							xp_free ((xp_char_t*)(pair)->key); \
 | 
				
			||||||
		if ((map)->freeval != XP_NULL) \
 | 
							if ((map)->freeval != XP_NULL) \
 | 
				
			||||||
			(map)->freeval ((map)->awk, (pair)->val); \
 | 
								(map)->freeval ((map)->owner, (pair)->val); \
 | 
				
			||||||
		xp_free (pair); \
 | 
							xp_free (pair); \
 | 
				
			||||||
	} while (0)
 | 
						} while (0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
xp_awk_map_t* xp_awk_map_open (
 | 
					xp_awk_map_t* xp_awk_map_open (
 | 
				
			||||||
	xp_awk_map_t* map, xp_awk_t* awk, 
 | 
						xp_awk_map_t* map, xp_awk_t* owner, 
 | 
				
			||||||
	xp_size_t capa, void(*freeval)(xp_awk_t*,void*))
 | 
						xp_size_t capa, void(*freeval)(void*,void*))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (map == XP_NULL) 
 | 
						if (map == XP_NULL) 
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -44,7 +44,7 @@ xp_awk_map_t* xp_awk_map_open (
 | 
				
			|||||||
		return XP_NULL;	
 | 
							return XP_NULL;	
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	map->awk = awk;
 | 
						map->owner = owner;
 | 
				
			||||||
	map->capa = capa;
 | 
						map->capa = capa;
 | 
				
			||||||
	map->size = 0;
 | 
						map->size = 0;
 | 
				
			||||||
	map->freeval = freeval;
 | 
						map->freeval = freeval;
 | 
				
			||||||
@ -224,7 +224,7 @@ xp_awk_pair_t* xp_awk_map_setpair (
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		if (map->freeval != XP_NULL) 
 | 
							if (map->freeval != XP_NULL) 
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			map->freeval (map->awk, pair->val);
 | 
								map->freeval (map->owner, pair->val);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		pair->val = val;
 | 
							pair->val = val;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * $Id: map.h,v 1.8 2006-04-18 14:49:42 bacon Exp $
 | 
					 * $Id: map.h,v 1.9 2006-04-21 17:24:31 bacon Exp $
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef _XP_AWK_MAP_H_
 | 
					#ifndef _XP_AWK_MAP_H_
 | 
				
			||||||
@ -28,11 +28,11 @@ struct xp_awk_pair_t
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
struct xp_awk_map_t
 | 
					struct xp_awk_map_t
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	xp_awk_t* awk;
 | 
						void* owner;
 | 
				
			||||||
	xp_size_t size;
 | 
						xp_size_t size;
 | 
				
			||||||
	xp_size_t capa;
 | 
						xp_size_t capa;
 | 
				
			||||||
	xp_awk_pair_t** buck;
 | 
						xp_awk_pair_t** buck;
 | 
				
			||||||
	void (*freeval) (xp_awk_t*,void*);
 | 
						void (*freeval) (void*,void*);
 | 
				
			||||||
	xp_bool_t __dynamic;
 | 
						xp_bool_t __dynamic;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -41,8 +41,8 @@ extern "C" {
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
xp_awk_map_t* xp_awk_map_open (
 | 
					xp_awk_map_t* xp_awk_map_open (
 | 
				
			||||||
	xp_awk_map_t* map, xp_awk_t* awk,
 | 
						xp_awk_map_t* map, void* owner,
 | 
				
			||||||
	xp_size_t capa, void(*freeval)(xp_awk_t*,void*));
 | 
						xp_size_t capa, void(*freeval)(void*,void*));
 | 
				
			||||||
void xp_awk_map_close (xp_awk_map_t* map);
 | 
					void xp_awk_map_close (xp_awk_map_t* map);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void xp_awk_map_clear (xp_awk_map_t* map);
 | 
					void xp_awk_map_clear (xp_awk_map_t* map);
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1202
									
								
								ase/awk/run.c
									
									
									
									
									
								
							
							
						
						
									
										1202
									
								
								ase/awk/run.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * $Id: val.c,v 1.24 2006-04-20 16:20:41 bacon Exp $
 | 
					 * $Id: val.c,v 1.25 2006-04-21 17:24:31 bacon Exp $
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <xp/awk/awk_i.h>
 | 
					#include <xp/awk/awk_i.h>
 | 
				
			||||||
@ -28,7 +28,7 @@ static xp_awk_val_int_t __awk_int[] =
 | 
				
			|||||||
	{ XP_AWK_VAL_INT, 0,  9 },
 | 
						{ XP_AWK_VAL_INT, 0,  9 },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
xp_awk_val_t* xp_awk_makeintval (xp_awk_t* awk, xp_long_t v)
 | 
					xp_awk_val_t* xp_awk_makeintval (xp_awk_run_t* run, xp_long_t v)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	xp_awk_val_int_t* val;
 | 
						xp_awk_val_int_t* val;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -38,9 +38,9 @@ xp_awk_val_t* xp_awk_makeintval (xp_awk_t* awk, xp_long_t v)
 | 
				
			|||||||
		return (xp_awk_val_t*)&__awk_int[v-__awk_int[0].val];
 | 
							return (xp_awk_val_t*)&__awk_int[v-__awk_int[0].val];
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (awk->run.icache_count > 0)
 | 
						if (run->icache_count > 0)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		val = awk->run.icache[--awk->run.icache_count];
 | 
							val = run->icache[--run->icache_count];
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -56,13 +56,13 @@ xp_awk_val_t* xp_awk_makeintval (xp_awk_t* awk, xp_long_t v)
 | 
				
			|||||||
	return (xp_awk_val_t*)val;
 | 
						return (xp_awk_val_t*)val;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
xp_awk_val_t* xp_awk_makerealval (xp_awk_t* awk, xp_real_t v)
 | 
					xp_awk_val_t* xp_awk_makerealval (xp_awk_run_t* run, xp_real_t v)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	xp_awk_val_real_t* val;
 | 
						xp_awk_val_real_t* val;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (awk->run.rcache_count > 0)
 | 
						if (run->rcache_count > 0)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		val = awk->run.rcache[--awk->run.rcache_count];
 | 
							val = run->rcache[--run->rcache_count];
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -120,17 +120,17 @@ xp_awk_val_t* xp_awk_makestrval2 (
 | 
				
			|||||||
	return (xp_awk_val_t*)val;
 | 
						return (xp_awk_val_t*)val;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void __free_map_val (xp_awk_t* awk, void* v)
 | 
					static void __free_map_val (void* run, void* v)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
xp_printf (XP_TEXT("refdown in map free..."));
 | 
					xp_printf (XP_TEXT("refdown in map free..."));
 | 
				
			||||||
xp_awk_printval (v);
 | 
					xp_awk_printval (v);
 | 
				
			||||||
xp_printf (XP_TEXT("\n"));
 | 
					xp_printf (XP_TEXT("\n"));
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
	xp_awk_refdownval (awk, v);
 | 
						xp_awk_refdownval (run, v);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
xp_awk_val_t* xp_awk_makemapval (xp_awk_t* awk)
 | 
					xp_awk_val_t* xp_awk_makemapval (xp_awk_run_t* run)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	xp_awk_val_map_t* val;
 | 
						xp_awk_val_map_t* val;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -139,7 +139,7 @@ xp_awk_val_t* xp_awk_makemapval (xp_awk_t* awk)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	val->type = XP_AWK_VAL_MAP;
 | 
						val->type = XP_AWK_VAL_MAP;
 | 
				
			||||||
	val->ref = 0;
 | 
						val->ref = 0;
 | 
				
			||||||
	val->map = xp_awk_map_open (XP_NULL, awk, 256, __free_map_val);
 | 
						val->map = xp_awk_map_open (XP_NULL, run, 256, __free_map_val);
 | 
				
			||||||
	if (val->map == XP_NULL)
 | 
						if (val->map == XP_NULL)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		xp_free (val);
 | 
							xp_free (val);
 | 
				
			||||||
@ -156,7 +156,7 @@ xp_bool_t xp_awk_isbuiltinval (xp_awk_val_t* val)
 | 
				
			|||||||
	        val <= (xp_awk_val_t*)&__awk_int[xp_countof(__awk_int)-1]);
 | 
						        val <= (xp_awk_val_t*)&__awk_int[xp_countof(__awk_int)-1]);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void xp_awk_freeval (xp_awk_t* awk, xp_awk_val_t* val, xp_bool_t cache)
 | 
					void xp_awk_freeval (xp_awk_run_t* run, xp_awk_val_t* val, xp_bool_t cache)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (xp_awk_isbuiltinval(val)) return;
 | 
						if (xp_awk_isbuiltinval(val)) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -171,9 +171,9 @@ xp_printf (XP_TEXT("\n"));
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	case XP_AWK_VAL_INT:
 | 
						case XP_AWK_VAL_INT:
 | 
				
			||||||
		if (cache == xp_true &&
 | 
							if (cache == xp_true &&
 | 
				
			||||||
		    awk->run.icache_count < xp_countof(awk->run.icache))
 | 
							    run->icache_count < xp_countof(run->icache))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			awk->run.icache[awk->run.icache_count++] = 
 | 
								run->icache[run->icache_count++] = 
 | 
				
			||||||
				(xp_awk_val_int_t*)val;	
 | 
									(xp_awk_val_int_t*)val;	
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else xp_free (val);
 | 
							else xp_free (val);
 | 
				
			||||||
@ -181,9 +181,9 @@ xp_printf (XP_TEXT("\n"));
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	case XP_AWK_VAL_REAL:
 | 
						case XP_AWK_VAL_REAL:
 | 
				
			||||||
		if (cache == xp_true &&
 | 
							if (cache == xp_true &&
 | 
				
			||||||
		    awk->run.rcache_count < xp_countof(awk->run.rcache))
 | 
							    run->rcache_count < xp_countof(run->rcache))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			awk->run.rcache[awk->run.rcache_count++] = 
 | 
								run->rcache[run->rcache_count++] = 
 | 
				
			||||||
				(xp_awk_val_real_t*)val;	
 | 
									(xp_awk_val_real_t*)val;	
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else xp_free (val);
 | 
							else xp_free (val);
 | 
				
			||||||
@ -214,7 +214,7 @@ xp_printf (XP_TEXT("\n"));
 | 
				
			|||||||
	val->ref++;
 | 
						val->ref++;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void xp_awk_refdownval (xp_awk_t* awk, xp_awk_val_t* val)
 | 
					void xp_awk_refdownval (xp_awk_run_t* run, xp_awk_val_t* val)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (xp_awk_isbuiltinval(val)) return;
 | 
						if (xp_awk_isbuiltinval(val)) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -234,11 +234,11 @@ xp_printf (XP_TEXT("**FREEING "));
 | 
				
			|||||||
xp_awk_printval (val);
 | 
					xp_awk_printval (val);
 | 
				
			||||||
xp_printf (XP_TEXT("\n"));
 | 
					xp_printf (XP_TEXT("\n"));
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
		xp_awk_freeval(awk, val, xp_true);
 | 
							xp_awk_freeval(run, val, xp_true);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void xp_awk_refdownval_nofree (xp_awk_t* awk, xp_awk_val_t* val)
 | 
					void xp_awk_refdownval_nofree (xp_awk_run_t* run, xp_awk_val_t* val)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (xp_awk_isbuiltinval(val)) return;
 | 
						if (xp_awk_isbuiltinval(val)) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -246,7 +246,7 @@ void xp_awk_refdownval_nofree (xp_awk_t* awk, xp_awk_val_t* val)
 | 
				
			|||||||
	val->ref--;
 | 
						val->ref--;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
xp_awk_val_t* xp_awk_cloneval (xp_awk_t* awk, xp_awk_val_t* val)
 | 
					xp_awk_val_t* xp_awk_cloneval (xp_awk_run_t* run, xp_awk_val_t* val)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (val == XP_NULL) return xp_awk_val_nil;
 | 
						if (val == XP_NULL) return xp_awk_val_nil;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -255,9 +255,9 @@ xp_awk_val_t* xp_awk_cloneval (xp_awk_t* awk, xp_awk_val_t* val)
 | 
				
			|||||||
	case XP_AWK_VAL_NIL:
 | 
						case XP_AWK_VAL_NIL:
 | 
				
			||||||
		return xp_awk_val_nil;
 | 
							return xp_awk_val_nil;
 | 
				
			||||||
	case XP_AWK_VAL_INT:
 | 
						case XP_AWK_VAL_INT:
 | 
				
			||||||
		return xp_awk_makeintval (awk, ((xp_awk_val_int_t*)val)->val);
 | 
							return xp_awk_makeintval (run, ((xp_awk_val_int_t*)val)->val);
 | 
				
			||||||
	case XP_AWK_VAL_REAL:
 | 
						case XP_AWK_VAL_REAL:
 | 
				
			||||||
		return xp_awk_makerealval (awk, ((xp_awk_val_real_t*)val)->val);
 | 
							return xp_awk_makerealval (run, ((xp_awk_val_real_t*)val)->val);
 | 
				
			||||||
	case XP_AWK_VAL_STR:
 | 
						case XP_AWK_VAL_STR:
 | 
				
			||||||
		return xp_awk_makestrval (
 | 
							return xp_awk_makestrval (
 | 
				
			||||||
			((xp_awk_val_str_t*)val)->buf,
 | 
								((xp_awk_val_str_t*)val)->buf,
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * $Id: val.h,v 1.18 2006-04-20 16:17:01 bacon Exp $
 | 
					 * $Id: val.h,v 1.19 2006-04-21 17:24:31 bacon Exp $
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef _XP_AWK_VAL_H_
 | 
					#ifndef _XP_AWK_VAL_H_
 | 
				
			||||||
@ -80,21 +80,21 @@ extern "C" {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
extern xp_awk_val_t* xp_awk_val_nil;
 | 
					extern xp_awk_val_t* xp_awk_val_nil;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
xp_awk_val_t* xp_awk_makeintval (xp_awk_t* awk, xp_long_t v);
 | 
					xp_awk_val_t* xp_awk_makeintval (xp_awk_run_t* run, xp_long_t v);
 | 
				
			||||||
xp_awk_val_t* xp_awk_makerealval (xp_awk_t* awk, xp_real_t v);
 | 
					xp_awk_val_t* xp_awk_makerealval (xp_awk_run_t* run, xp_real_t v);
 | 
				
			||||||
xp_awk_val_t* xp_awk_makestrval (const xp_char_t* str, xp_size_t len);
 | 
					xp_awk_val_t* xp_awk_makestrval (const xp_char_t* str, xp_size_t len);
 | 
				
			||||||
xp_awk_val_t* xp_awk_makestrval2 (
 | 
					xp_awk_val_t* xp_awk_makestrval2 (
 | 
				
			||||||
	const xp_char_t* str1, xp_size_t len1, 
 | 
						const xp_char_t* str1, xp_size_t len1, 
 | 
				
			||||||
	const xp_char_t* str2, xp_size_t len2);
 | 
						const xp_char_t* str2, xp_size_t len2);
 | 
				
			||||||
xp_awk_val_t* xp_awk_makemapval (xp_awk_t* awk);
 | 
					xp_awk_val_t* xp_awk_makemapval (xp_awk_run_t* run);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
xp_bool_t xp_awk_isbuiltinval (xp_awk_val_t* val);
 | 
					xp_bool_t xp_awk_isbuiltinval (xp_awk_val_t* val);
 | 
				
			||||||
void xp_awk_freeval (xp_awk_t* awk, xp_awk_val_t* val, xp_bool_t cache);
 | 
					void xp_awk_freeval (xp_awk_run_t* run, xp_awk_val_t* val, xp_bool_t cache);
 | 
				
			||||||
void xp_awk_refupval (xp_awk_val_t* val);
 | 
					void xp_awk_refupval (xp_awk_val_t* val);
 | 
				
			||||||
void xp_awk_refdownval (xp_awk_t* awk, xp_awk_val_t* val);
 | 
					void xp_awk_refdownval (xp_awk_run_t* run, xp_awk_val_t* val);
 | 
				
			||||||
void xp_awk_refdownval_nofree (xp_awk_t* awk, xp_awk_val_t* val);
 | 
					void xp_awk_refdownval_nofree (xp_awk_run_t* run, xp_awk_val_t* val);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
xp_awk_val_t* xp_awk_cloneval (xp_awk_t* awk, xp_awk_val_t* val);
 | 
					xp_awk_val_t* xp_awk_cloneval (xp_awk_run_t* run, xp_awk_val_t* val);
 | 
				
			||||||
xp_bool_t xp_awk_boolval (xp_awk_val_t* val);
 | 
					xp_bool_t xp_awk_boolval (xp_awk_val_t* val);
 | 
				
			||||||
void xp_awk_printval (xp_awk_val_t* val);
 | 
					void xp_awk_printval (xp_awk_val_t* val);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user