1 /* 2 * Copyright (c) 1982 Regents of the University of California. 3 * All rights reserved. The Berkeley software License Agreement 4 * specifies the terms and conditions for redistribution. 5 * 6 * @(#)asscan.h 5.1 (Berkeley) 04/30/85 7 */ 8 9 /* 10 * The character scanner is called to fill up one token buffer 11 * 12 * However, once the tokens are filled up by the 13 * character scanner, they are used in both the first and the second 14 * pass. Holes created by .stab removal are replaced 15 * with 'skip' tokens that direct the second pass to ignore the 16 * following tokens. 17 */ 18 19 #define TOKBUFLG 4096 20 #define MAXVAX 32 21 #define SAFETY 16 22 23 #define AVAILTOKS TOKBUFLG -\ 24 sizeof(int) -\ 25 sizeof (struct tokbufdesc *) -\ 26 MAXVAX - SAFETY 27 28 struct tokbufdesc{ 29 int tok_count; /*absolute byte length*/ 30 struct tokbufdesc *tok_next; 31 char toks[AVAILTOKS]; 32 char bufovf[MAXVAX + SAFETY]; 33 }; 34 /* 35 * Definitions for handling tokens in the intermediate file 36 * buffers. 37 * 38 * We want to have the compiler produce the efficient auto increment 39 * instruction for stepping through the buffer of tokens. We must 40 * fool the type checker into thinking that a pointer can point 41 * to various size things. 42 */ 43 44 typedef int inttoktype; 45 typedef char bytetoktype; 46 47 typedef char *ptrall; /*all uses will be type cast*/ 48 typedef u_short lgtype; /*for storing length of strings or skiping*/ 49 /* 50 * defintions for putting various typed values 51 * into the intermediate buffers 52 * ptr will ALWAYS be of type ptrall 53 */ 54 55 #define pchar(ptr,val) *ptr++ = val 56 #define puchar(ptr,val) *ptr++ = val 57 58 #define pshort(ptr,val) *(short *)ptr=val, ptr += sizeof(short) 59 #define plgtype(ptr,val) *(lgtype *)ptr=val, ptr += sizeof(lgtype) 60 #define pushort(ptr,val) *(u_short *)ptr=val, ptr += sizeof(short) 61 #define pint(ptr,val) *(int *)ptr = val, ptr += sizeof(int) 62 #define puint(ptr,val) *(u_int int *)ptr=val, ptr += sizeof(int) 63 #define plong(ptr,val) *(long *)ptr = val, ptr += sizeof(long) 64 #define pulong(ptr,val) *(u_int long *)ptr=val, ptr += sizeof(long) 65 #define pnumber(ptr,val) *(Bignum*)ptr=val, ptr += sizeof(Bignum) 66 #define popcode(ptr,val) *(struct Opcode*)ptr=val, ptr += sizeof(struct Opcode) 67 68 #define pptr(ptr,val) *(int *)ptr = (val), ptr += sizeof(ptrall) 69 #define ptoken(ptr,val) *ptr++ = val 70 #define pskiplg(ptr,val) *(lgtype *)ptr = val, ptr += sizeof(short) 71 72 #define gchar(val, ptr) val = *ptr++ 73 #define guchar(val, ptr) val = *ptr++ 74 75 #define gshort(val, ptr) val = *(short *)ptr , ptr += sizeof (short) 76 #define glgtype(val, ptr) val = *(lgtype *)ptr , ptr += sizeof (lgtype) 77 #define gushort(val, ptr) val = *(u_short *)ptr , ptr += sizeof (short) 78 #define gint(val, ptr) val = *(int *)ptr, ptr += sizeof (int) 79 #define guint(val, ptr) val = *(u_int *)ptr, ptr += sizeof (int) 80 #define glong(val, ptr) val = *(long *)ptr, ptr += sizeof (long) 81 #define gulong(val, ptr) val = *(u_int *)ptr, ptr += sizeof (long) 82 #define gnumber(val, ptr) val = *(Bignum *)ptr, ptr += sizeof(Bignum) 83 #define gopcode(val, ptr) val = *(struct Opcode *)ptr, ptr += sizeof(struct Opcode) 84 85 #define gptr(val, ptr) val = *(int *)ptr, ptr += sizeof (ptrall) 86 #define gtoken(val, ptr) val = *ptr++ 87 #define gskiplg(val, ptr) val = *(lgtype *)ptr, ptr += sizeof (short) 88 89 extern ptrall tokptr; /*the next token to consume, call by copy*/ 90 extern ptrall tokub; /*current upper bound in the current buffer*/ 91