386BSD 0.1 development
[unix-history] / usr / src / usr.bin / awk / code.h
CommitLineData
a7e60862
WJ
1
2/********************************************
3code.h
4copyright 1991, Michael D. Brennan
5
6This is a source file for mawk, an implementation of
7the AWK programming language.
8
9Mawk is distributed without warranty under the terms of
10the GNU General Public License, version 2, 1991.
11********************************************/
12
13
14/* $Log: code.h,v $
15 * Revision 5.1 91/12/05 07:59:07 brennan
16 * 1.1 pre-release
17 *
18*/
19
20
21/* code.h */
22
23#ifndef CODE_H
24#define CODE_H
25
26#include "memory.h"
27
28/* coding scope */
29#define SCOPE_MAIN 0
30#define SCOPE_BEGIN 1
31#define SCOPE_END 2
32#define SCOPE_FUNCT 3
33
34
35extern INST *code_ptr ;
36extern INST *main_start, *main_code_ptr ;
37extern unsigned main_size ;
38
39extern struct be_code {
40INST *start , *ptr ;
41unsigned size ; } begin_code , end_code ;
42
43void PROTO(be_shrink, (struct be_code *)) ;
44void PROTO(be_expand, (struct be_code *)) ;
45
46#define INST_BYTES(x) (sizeof(INST)*(x))
47
48extern CELL eval_stack[] ;
49
50
51#define code1(x) code_ptr++ -> op = (x)
52
53#define code2(x,y) (void)( code_ptr++ -> op = (x) ,\
54 code_ptr++ -> ptr = (PTR)(y) )
55
56extern int exit_code ;
57
58/* the machine opcodes */
59/* to avoid confusion with a ptr FE_PUSHA must have op code 0 */
60/* unfortunately enums are less portable than defines */
61
62#define FE_PUSHA 0
63#define FE_PUSHI 1
64#define F_PUSHA 2
65#define F_PUSHI 3
66#define NF_PUSHI 4
67#define _HALT 5
68#define _STOP 6
69#define _PUSHC 7
70#define _PUSHD 8
71#define _PUSHS 9
72#define _PUSHINT 10
73#define _PUSHA 11
74#define _PUSHI 12
75#define L_PUSHA 13
76#define L_PUSHI 14
77#define AE_PUSHA 15
78#define AE_PUSHI 16
79#define A_PUSHA 17
80#define LAE_PUSHA 18
81#define LAE_PUSHI 19
82#define LA_PUSHA 20
83#define _POP 21
84#define _DUP 22
85#define _ADD 23
86#define _SUB 24
87#define _MUL 25
88#define _DIV 26
89#define _MOD 27
90#define _POW 28
91#define _NOT 29
92#define _TEST 30
93#define A_TEST 31
94#define A_DEL 32
95#define ALOOP 33
96#define A_CAT 34
97#define _UMINUS 35
98#define _UPLUS 36
99#define _ASSIGN 37
100#define _ADD_ASG 38
101#define _SUB_ASG 39
102#define _MUL_ASG 40
103#define _DIV_ASG 41
104#define _MOD_ASG 42
105#define _POW_ASG 43
106#define F_ASSIGN 44
107#define F_ADD_ASG 45
108#define F_SUB_ASG 46
109#define F_MUL_ASG 47
110#define F_DIV_ASG 48
111#define F_MOD_ASG 49
112#define F_POW_ASG 50
113#define _CAT 51
114#define _BUILTIN 52
115#define _PRINT 53
116#define _POST_INC 54
117#define _POST_DEC 55
118#define _PRE_INC 56
119#define _PRE_DEC 57
120#define F_POST_INC 58
121#define F_POST_DEC 59
122#define F_PRE_INC 60
123#define F_PRE_DEC 61
124#define _JMP 62
125#define _JNZ 63
126#define _JZ 64
127#define _EQ 65
128#define _NEQ 66
129#define _LT 67
130#define _LTE 68
131#define _GT 69
132#define _GTE 70
133#define _MATCH0 71
134#define _MATCH1 72
135#define _MATCH2 73
136#define _EXIT 74
137#define _EXIT0 75
138#define _NEXT 76
139#define _RANGE 77
140#define _CALL 78
141#define _RET 79
142#define _RET0 80
143#define SET_ALOOP 81
144#define OL_GL 82
145#define OL_GL_NR 83
146#define _OMAIN 84
147#define _JMAIN 85
148
149
150#endif /* CODE_H */