*** empty log message ***
This commit is contained in:
		@ -3,7 +3,7 @@ OBJS = $(SRCS:.c=.o)
 | 
			
		||||
OUT = libxpawk.a
 | 
			
		||||
 | 
			
		||||
CC = cc
 | 
			
		||||
CFLAGS = -Xc -a ansi -O2 -I../.. -D__STAND_ALONE
 | 
			
		||||
CFLAGS = -Xc -a ansi -w3 -O2 -I../.. -D__STAND_ALONE
 | 
			
		||||
 | 
			
		||||
all: $(OBJS)
 | 
			
		||||
	ar cr $(OUT) $(OBJS)
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,5 @@
 | 
			
		||||
/*
 | 
			
		||||
 * $Id: parse.c,v 1.80 2006-04-14 10:56:42 bacon Exp $
 | 
			
		||||
 * $Id: parse.c,v 1.81 2006-04-14 16:26:00 bacon Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <xp/awk/awk_i.h>
 | 
			
		||||
@ -92,12 +92,6 @@ enum
 | 
			
		||||
	__TOKEN_COUNT__
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#if defined(__BORLANDC__) || defined(_MSC_VER)
 | 
			
		||||
	#define INLINE 
 | 
			
		||||
#else
 | 
			
		||||
	#define INLINE inline
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef struct __binmap_t __binmap_t;
 | 
			
		||||
 | 
			
		||||
struct __binmap_t
 | 
			
		||||
@ -165,6 +159,7 @@ static int __unget_char (xp_awk_t* awk, xp_cint_t c);
 | 
			
		||||
static int __skip_spaces (xp_awk_t* awk);
 | 
			
		||||
static int __skip_comment (xp_awk_t* awk);
 | 
			
		||||
static int __classify_ident (xp_awk_t* awk, const xp_char_t* ident);
 | 
			
		||||
static int __assign_to_opcode (xp_awk_t* awk);
 | 
			
		||||
 | 
			
		||||
struct __kwent 
 | 
			
		||||
{ 
 | 
			
		||||
@ -227,13 +222,15 @@ do { \
 | 
			
		||||
} while (0)
 | 
			
		||||
 | 
			
		||||
#define GET_TOKEN(awk) \
 | 
			
		||||
	do { if (__get_token(awk) == -1) return -1; } while(0)
 | 
			
		||||
	do { if (__get_token(awk) == -1) return -1; } while (0)
 | 
			
		||||
 | 
			
		||||
#define MATCH(awk,token_type) ((awk)->token.type == (token_type))
 | 
			
		||||
#define CONSUME(awk) \
 | 
			
		||||
	do { if (__get_token(awk) == -1) return XP_NULL; } while(0)
 | 
			
		||||
 | 
			
		||||
#define PANIC(awk,code) do { (awk)->errnum = (code);  return XP_NULL; } while (0);
 | 
			
		||||
#define CONSUME(awk) \
 | 
			
		||||
	do { if (__get_token(awk) == -1) return XP_NULL; } while (0)
 | 
			
		||||
 | 
			
		||||
#define PANIC(awk,code) \
 | 
			
		||||
	do { (awk)->errnum = (code); return XP_NULL; } while (0)
 | 
			
		||||
 | 
			
		||||
/* TODO: remove stdio.h */
 | 
			
		||||
#ifndef __STAND_ALONE
 | 
			
		||||
@ -1017,12 +1014,14 @@ static xp_awk_nde_t* __parse_expression (xp_awk_t* awk)
 | 
			
		||||
 | 
			
		||||
	xp_awk_nde_t* x, * y;
 | 
			
		||||
	xp_awk_nde_ass_t* nde;
 | 
			
		||||
	int opcode;
 | 
			
		||||
 | 
			
		||||
	x = __parse_basic_expr (awk);
 | 
			
		||||
	if (x == XP_NULL) return XP_NULL;
 | 
			
		||||
	if (!MATCH(awk,TOKEN_ASSIGN)) return x;
 | 
			
		||||
 | 
			
		||||
/*TODO: PLUS_ASSIGN, MINUS_ASSIGN, .... */
 | 
			
		||||
	opcode = __assign_to_opcode (awk);
 | 
			
		||||
	if (opcode == -1) return x;
 | 
			
		||||
 | 
			
		||||
	xp_assert (x->next == XP_NULL);
 | 
			
		||||
	if (x->type != XP_AWK_NDE_ARG &&
 | 
			
		||||
	    x->type != XP_AWK_NDE_ARGIDX &&
 | 
			
		||||
@ -1061,6 +1060,7 @@ static xp_awk_nde_t* __parse_expression (xp_awk_t* awk)
 | 
			
		||||
 | 
			
		||||
	nde->type = XP_AWK_NDE_ASS;
 | 
			
		||||
	nde->next = XP_NULL;
 | 
			
		||||
	nde->opcode = opcode;
 | 
			
		||||
	nde->left = x;
 | 
			
		||||
	nde->right = y;
 | 
			
		||||
 | 
			
		||||
@ -2847,3 +2847,15 @@ static int __classify_ident (xp_awk_t* awk, const xp_char_t* ident)
 | 
			
		||||
	return TOKEN_IDENT;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int __assign_to_opcode (xp_awk_t* awk)
 | 
			
		||||
{
 | 
			
		||||
	if (MATCH(awk,TOKEN_ASSIGN)) return XP_AWK_ASSOP_NONE;
 | 
			
		||||
	if (MATCH(awk,TOKEN_PLUS_ASSIGN)) return XP_AWK_ASSOP_PLUS;
 | 
			
		||||
	if (MATCH(awk,TOKEN_MINUS_ASSIGN)) return XP_AWK_ASSOP_MINUS;
 | 
			
		||||
	if (MATCH(awk,TOKEN_MUL_ASSIGN)) return XP_AWK_ASSOP_MUL;
 | 
			
		||||
	if (MATCH(awk,TOKEN_DIV_ASSIGN)) return XP_AWK_ASSOP_DIV;
 | 
			
		||||
	if (MATCH(awk,TOKEN_MOD_ASSIGN)) return XP_AWK_ASSOP_MOD;
 | 
			
		||||
	if (MATCH(awk,TOKEN_EXP_ASSIGN)) return XP_AWK_ASSOP_EXP;
 | 
			
		||||
 | 
			
		||||
	return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,5 @@
 | 
			
		||||
/*
 | 
			
		||||
 * $Id: run.c,v 1.48 2006-04-14 10:56:42 bacon Exp $
 | 
			
		||||
 * $Id: run.c,v 1.49 2006-04-14 16:26:00 bacon Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <xp/awk/awk_i.h>
 | 
			
		||||
@ -680,6 +680,7 @@ static xp_awk_val_t* __eval_assignment (xp_awk_t* awk, xp_awk_nde_t* nde)
 | 
			
		||||
	val = __eval_expression(awk, ass->right);
 | 
			
		||||
	if (val == XP_NULL) return XP_NULL;
 | 
			
		||||
 | 
			
		||||
/*TODO: ass->opcode....*/
 | 
			
		||||
	return __do_assignment (awk, (xp_awk_nde_var_t*)ass->left, val);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,5 @@
 | 
			
		||||
/*
 | 
			
		||||
 * $Id: run.h,v 1.8 2006-04-12 03:54:12 bacon Exp $
 | 
			
		||||
 * $Id: run.h,v 1.9 2006-04-14 16:26:00 bacon Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _XP_AWK_RUN_H_
 | 
			
		||||
@ -19,6 +19,18 @@ struct xp_awk_frm_t
 | 
			
		||||
	xp_awk_frm_t* prev;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
	/* if you change this, you have to change __assop_str in tree.c */
 | 
			
		||||
	XP_AWK_ASSOP_NONE,
 | 
			
		||||
	XP_AWK_ASSOP_PLUS,
 | 
			
		||||
	XP_AWK_ASSOP_MINUS,
 | 
			
		||||
	XP_AWK_ASSOP_MUL,
 | 
			
		||||
	XP_AWK_ASSOP_DIV,
 | 
			
		||||
	XP_AWK_ASSOP_MOD,
 | 
			
		||||
	XP_AWK_ASSOP_EXP
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum 
 | 
			
		||||
{
 | 
			
		||||
	/* if you change this, you have to change 
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,5 @@
 | 
			
		||||
/*
 | 
			
		||||
 * $Id: tree.c,v 1.36 2006-04-14 10:56:42 bacon Exp $
 | 
			
		||||
 * $Id: tree.c,v 1.37 2006-04-14 16:26:00 bacon Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <xp/awk/awk_i.h>
 | 
			
		||||
@ -10,6 +10,17 @@
 | 
			
		||||
#include <xp/bas/stdio.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static const xp_char_t* __assop_str[] =
 | 
			
		||||
{
 | 
			
		||||
	XP_TEXT("="),
 | 
			
		||||
	XP_TEXT("+="),
 | 
			
		||||
	XP_TEXT("-="),
 | 
			
		||||
	XP_TEXT("*="),
 | 
			
		||||
	XP_TEXT("/="),
 | 
			
		||||
	XP_TEXT("%="),
 | 
			
		||||
	XP_TEXT("**=")
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const xp_char_t* __binop_str[] =
 | 
			
		||||
{
 | 
			
		||||
	XP_TEXT("||"),
 | 
			
		||||
@ -37,7 +48,6 @@ static const xp_char_t* __binop_str[] =
 | 
			
		||||
 | 
			
		||||
	XP_TEXT("~"),
 | 
			
		||||
	XP_TEXT("!~")
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const xp_char_t* __unrop_str[] =
 | 
			
		||||
@ -72,7 +82,8 @@ static int __print_expression (xp_awk_nde_t* nde)
 | 
			
		||||
	switch (nde->type) {
 | 
			
		||||
	case XP_AWK_NDE_ASS:
 | 
			
		||||
		if (__print_expression (((xp_awk_nde_ass_t*)nde)->left) == -1) return -1;
 | 
			
		||||
		xp_printf (XP_TEXT(" = "));
 | 
			
		||||
		xp_printf (XP_TEXT(" %s "), 
 | 
			
		||||
			__assop_str[((xp_awk_nde_exp_t*)nde)->opcode]);
 | 
			
		||||
		if (__print_expression (((xp_awk_nde_ass_t*)nde)->right) == -1) return -1;
 | 
			
		||||
		xp_assert ((((xp_awk_nde_ass_t*)nde)->right)->next == XP_NULL);
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,5 @@
 | 
			
		||||
/*
 | 
			
		||||
 * $Id: tree.h,v 1.32 2006-04-14 10:56:42 bacon Exp $
 | 
			
		||||
 * $Id: tree.h,v 1.33 2006-04-14 16:26:00 bacon Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _XP_AWK_TREE_H_
 | 
			
		||||
@ -27,6 +27,10 @@ enum
 | 
			
		||||
	XP_AWK_NDE_NEXTFILE,
 | 
			
		||||
 | 
			
		||||
	/* expression */
 | 
			
		||||
 | 
			
		||||
	/* if you change the following values including their order,
 | 
			
		||||
	 * you should change __eval_func of __eval_expression 
 | 
			
		||||
	 * in run.c accordingly */
 | 
			
		||||
	XP_AWK_NDE_ASS,
 | 
			
		||||
	XP_AWK_NDE_EXP_BIN,
 | 
			
		||||
	XP_AWK_NDE_EXP_UNR,
 | 
			
		||||
@ -100,6 +104,7 @@ struct xp_awk_nde_blk_t
 | 
			
		||||
struct xp_awk_nde_ass_t
 | 
			
		||||
{
 | 
			
		||||
	XP_AWK_NDE_HDR;
 | 
			
		||||
	int opcode;
 | 
			
		||||
	xp_awk_nde_t* left;
 | 
			
		||||
	xp_awk_nde_t* right;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,5 @@
 | 
			
		||||
/*
 | 
			
		||||
 * $Id: awk.c,v 1.21 2006-04-14 11:14:58 bacon Exp $
 | 
			
		||||
 * $Id: awk.c,v 1.22 2006-04-14 16:26:00 bacon Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <xp/awk/awk.h>
 | 
			
		||||
@ -90,18 +90,30 @@ int xp_main (int argc, xp_char_t* argv[])
 | 
			
		||||
 | 
			
		||||
	if (xp_awk_parse(awk) == -1) 
 | 
			
		||||
	{
 | 
			
		||||
#if defined(_SCO_DS) && defined(XP_CHAR_IS_WCHAR)
 | 
			
		||||
		xp_printf (
 | 
			
		||||
			XP_TEXT("error: cannot parse program - [%d] %ls\n"), 
 | 
			
		||||
			xp_awk_geterrnum(awk), xp_awk_geterrstr(awk));
 | 
			
		||||
#else
 | 
			
		||||
		xp_printf (
 | 
			
		||||
			XP_TEXT("error: cannot parse program - [%d] %s\n"), 
 | 
			
		||||
			xp_awk_geterrnum(awk), xp_awk_geterrstr(awk));
 | 
			
		||||
#endif
 | 
			
		||||
		xp_awk_close (awk);
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (xp_awk_run(awk) == -1) 
 | 
			
		||||
	{
 | 
			
		||||
#if defined(_SCO_DS) && defined(XP_CHAR_IS_WCHAR)
 | 
			
		||||
		xp_printf (
 | 
			
		||||
			XP_TEXT("error: cannot run program - [%d] %ls\n"), 
 | 
			
		||||
			xp_awk_geterrnum(awk), xp_awk_geterrstr(awk));
 | 
			
		||||
#else
 | 
			
		||||
		xp_printf (
 | 
			
		||||
			XP_TEXT("error: cannot run program - [%d] %s\n"), 
 | 
			
		||||
			xp_awk_geterrnum(awk), xp_awk_geterrstr(awk));
 | 
			
		||||
#endif
 | 
			
		||||
		xp_awk_close (awk);
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user