Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/feature_tlsv12/sys/src/ape/cmd/pdksh/c_test.h – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/* Various types of operations.  Keeping things grouped nicely
2
 * (unary,binary) makes switch() statements more efficeint.
3
 */
4
enum Test_op {
5
	TO_NONOP = 0,	/* non-operator */
6
	/* unary operators */
7
	TO_STNZE, TO_STZER, TO_OPTION,
8
	TO_FILAXST,
9
	TO_FILEXST,
10
	TO_FILREG, TO_FILBDEV, TO_FILCDEV, TO_FILSYM, TO_FILFIFO, TO_FILSOCK,
11
	TO_FILCDF, TO_FILID, TO_FILGID, TO_FILSETG, TO_FILSTCK, TO_FILUID,
12
	TO_FILRD, TO_FILGZ, TO_FILTT, TO_FILSETU, TO_FILWR, TO_FILEX,
13
	/* binary operators */
14
	TO_STEQL, TO_STNEQ, TO_STLT, TO_STGT, TO_INTEQ, TO_INTNE, TO_INTGT,
15
	TO_INTGE, TO_INTLT, TO_INTLE, TO_FILEQ, TO_FILNT, TO_FILOT
16
};
17
typedef enum Test_op Test_op;
18
 
19
/* Used by Test_env.isa() (order important - used to index *_tokens[] arrays) */
20
enum Test_meta {
21
	TM_OR,		/* -o or || */
22
	TM_AND,		/* -a or && */
23
	TM_NOT,		/* ! */
24
	TM_OPAREN,	/* ( */
25
	TM_CPAREN,	/* ) */
26
	TM_UNOP,	/* unary operator */
27
	TM_BINOP,	/* binary operator */
28
	TM_END		/* end of input */
29
};
30
typedef enum Test_meta Test_meta;
31
 
32
#define TEF_ERROR	BIT(0)		/* set if we've hit an error */
33
#define TEF_DBRACKET	BIT(1)		/* set if [[ .. ]] test */
34
 
35
typedef struct test_env Test_env;
36
struct test_env {
37
	int	flags;		/* TEF_* */
38
	union {
39
		char	**wp;		/* used by ptest_* */
40
		XPtrV	*av;		/* used by dbtestp_* */
41
	} pos;
42
	char **wp_end;			/* used by ptest_* */
43
	int	(*isa) ARGS((Test_env *te, Test_meta meta));
44
	const char *(*getopnd) ARGS((Test_env *te, Test_op op, int do_eval));
45
	int	(*eval) ARGS((Test_env *te, Test_op op, const char *opnd1,
46
				 const char *opnd2, int do_eval));
47
	void	(*error) ARGS((Test_env *te, int offset, const char *msg));
48
};
49
 
50
Test_op	test_isop ARGS((Test_env *te, Test_meta meta, const char *s));
51
int     test_eval ARGS((Test_env *te, Test_op op, const char *opnd1,
52
			const char *opnd2, int do_eval));
53
int	test_parse ARGS((Test_env *te));