loksh-noxz

[fork] a Linux port of OpenBSD's ksh
git clone https://noxz.tech/git/loksh-noxz.git
Log | Files | README

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