/******************************************** code.h copyright 1991, Michael D. Brennan This is a source file for mawk, an implementation of the AWK programming language. Mawk is distributed without warranty under the terms of the GNU General Public License, version 2, 1991. ********************************************/ /* $Log: code.h,v $ /* Revision 1.2 1993/07/02 23:57:09 jtc /* Updated to mawk 1.1.4 /* * Revision 5.1 1991/12/05 07:59:07 brennan * 1.1 pre-release * */ /* code.h */ #ifndef CODE_H #define CODE_H #include "memory.h" /* coding scope */ #define SCOPE_MAIN 0 #define SCOPE_BEGIN 1 #define SCOPE_END 2 #define SCOPE_FUNCT 3 extern INST *code_ptr ; extern INST *main_start, *main_code_ptr ; extern unsigned main_size ; extern struct be_code { INST *start , *ptr ; unsigned size ; } begin_code , end_code ; void PROTO(be_shrink, (struct be_code *)) ; void PROTO(be_expand, (struct be_code *)) ; #define INST_BYTES(x) (sizeof(INST)*(x)) extern CELL eval_stack[] ; #define code1(x) code_ptr++ -> op = (x) #define code2(x,y) (void)( code_ptr++ -> op = (x) ,\ code_ptr++ -> ptr = (PTR)(y) ) extern int exit_code ; /* the machine opcodes */ /* to avoid confusion with a ptr FE_PUSHA must have op code 0 */ /* unfortunately enums are less portable than defines */ #define FE_PUSHA 0 #define FE_PUSHI 1 #define F_PUSHA 2 #define F_PUSHI 3 #define NF_PUSHI 4 #define _HALT 5 #define _STOP 6 #define _PUSHC 7 #define _PUSHD 8 #define _PUSHS 9 #define _PUSHINT 10 #define _PUSHA 11 #define _PUSHI 12 #define L_PUSHA 13 #define L_PUSHI 14 #define AE_PUSHA 15 #define AE_PUSHI 16 #define A_PUSHA 17 #define LAE_PUSHA 18 #define LAE_PUSHI 19 #define LA_PUSHA 20 #define _POP 21 #define _DUP 22 #define _ADD 23 #define _SUB 24 #define _MUL 25 #define _DIV 26 #define _MOD 27 #define _POW 28 #define _NOT 29 #define _TEST 30 #define A_TEST 31 #define A_DEL 32 #define ALOOP 33 #define A_CAT 34 #define _UMINUS 35 #define _UPLUS 36 #define _ASSIGN 37 #define _ADD_ASG 38 #define _SUB_ASG 39 #define _MUL_ASG 40 #define _DIV_ASG 41 #define _MOD_ASG 42 #define _POW_ASG 43 #define F_ASSIGN 44 #define F_ADD_ASG 45 #define F_SUB_ASG 46 #define F_MUL_ASG 47 #define F_DIV_ASG 48 #define F_MOD_ASG 49 #define F_POW_ASG 50 #define _CAT 51 #define _BUILTIN 52 #define _PRINT 53 #define _POST_INC 54 #define _POST_DEC 55 #define _PRE_INC 56 #define _PRE_DEC 57 #define F_POST_INC 58 #define F_POST_DEC 59 #define F_PRE_INC 60 #define F_PRE_DEC 61 #define _JMP 62 #define _JNZ 63 #define _JZ 64 #define _EQ 65 #define _NEQ 66 #define _LT 67 #define _LTE 68 #define _GT 69 #define _GTE 70 #define _MATCH0 71 #define _MATCH1 72 #define _MATCH2 73 #define _EXIT 74 #define _EXIT0 75 #define _NEXT 76 #define _RANGE 77 #define _CALL 78 #define _RET 79 #define _RET0 80 #define SET_ALOOP 81 #define OL_GL 82 #define OL_GL_NR 83 #define _OMAIN 84 #define _JMAIN 85 #endif /* CODE_H */