pcc.h
来自「<B>Digital的Unix操作系统VAX 4.2源码</B>」· C头文件 代码 · 共 266 行
H
266 行
/** @(#)pcc.h 4.1 (ULTRIX) 7/17/90*//************************************************************************ * * * Copyright (c) 1986 by * * Digital Equipment Corporation, Maynard, MA * * All rights reserved. * * * * This software is furnished under a license and may be used and * * copied only in accordance with the terms of such license and * * with the inclusion of the above copyright notice. This * * software or any other copies thereof may not be provided or * * otherwise made available to any other person. No title to and * * ownership of the software is hereby transferred. * * * * This software is derived from software received from the * * University of California, Berkeley, and from Bell * * Laboratories. Use, duplication, or disclosure is subject to * * restrictions under license agreements with University of * * California and with AT&T. * * * * The information in this software is subject to change without * * notice and should not be construed as a commitment by Digital * * Equipment Corporation. * * * * Digital assumes no responsibility for the use or reliability * * of its software on equipment which is not supplied by Digital. * * * ************************************************************************//************************************************************************** Modification History** David Metsky 15-Jan-86** 001 Replaced old version with BSD 4.3 version as part of upgrade.** Based on: pcc.h 5.1 5/30/85**************************************************************************//* * This file contains definitions for all the constants and structures * needed to use the intermediate code files generated and read by * the Portable C Compiler and related compilers. * * Rules for changing this code: * 1) All op values must be integer constants -- this permits us to run * a 'sed' script on this file to create %term declarations for yacc. * 2) Because the PCC uses fancy ASG and UNARY macros, assignment * operators must have values 1 greater than corresponding normal * operators, and unary operators must have values 2 greater ditto. * 3) Ops used only by f1 must have values >= 150 (PCCF_FORTOPS). * 4) Other language-dependent ops must have values >= 200. */# ifndef PCC_TOKENS# define PCC_TOKENS 0# define PCC_ERROR 1 /* an error node */# define PCC_FREE 2 /* an unused node *//* * Constants. */# define PCC_STRING 3 /* a string constant */# define PCC_ICON 4 /* an integer constant */# define PCC_FCON 5 /* a floating point constant */# define PCC_DCON 6 /* a double precision f.p. constant *//* * Leaf types. */# define PCC_NAME 7 /* an identifier */# define PCC_REG 8 /* a register */# define PCC_OREG 9 /* register and offset */# define PCC_CCODES 10 /* condition codes */# define PCC_FLD 11 /* a bit field *//* * Arithmetic operators. */# define PCC_PLUS 12 /* + */# define PCC_PLUSEQ 13 /* += */# define PCC_UPLUS 14 /* unary + (for completeness) */# define PCC_MINUS 15 /* - */# define PCC_MINUSEQ 16 /* -= */# define PCC_UMINUS 17 /* unary - */# define PCC_MUL 18 /* * */# define PCC_MULEQ 19 /* *= *//* Reserve a slot for 'unary *', which is PCC jargon for PCC_DEREF (yech) */# define PCC_DIV 21 /* / */# define PCC_DIVEQ 22 /* /= */# define PCC_MOD 23 /* % */# define PCC_MODEQ 24 /* %= */# define PCC_INCR 25 /* ++ */# define PCC_DECR 26 /* -- */# define PCC_ASSIGN 27 /* = (these last 3 are stretching it) *//* * Bit operators. */# define PCC_AND 28 /* & */# define PCC_ANDEQ 29 /* &= *//* Reserve a slot for 'unary &', jargon for PCC_ADDROF */# define PCC_OR 31 /* | */# define PCC_OREQ 32 /* |= */# define PCC_ER 33 /* ^ */# define PCC_EREQ 34 /* ^= */# define PCC_LS 35 /* << */# define PCC_LSEQ 36 /* <<= */# define PCC_RS 37 /* >> */# define PCC_RSEQ 38 /* >>= */# define PCC_COMPL 39 /* ~ *//* * Booleans. */# define PCC_EQ 40 /* == */# define PCC_NE 41 /* != */# define PCC_LE 42 /* <= */# define PCC_LT 43 /* < */# define PCC_GE 44 /* >= */# define PCC_GT 45 /* > */# define PCC_ULE 46 /* unsigned <= */# define PCC_ULT 47 /* unsigned < */# define PCC_UGE 48 /* unsigned >= */# define PCC_UGT 49 /* unsigned > */# define PCC_QUEST 50 /* ? (for conditional expressions) */# define PCC_COLON 51 /* : (for conditional expressions) */# define PCC_ANDAND 52 /* && */# define PCC_OROR 53 /* || */# define PCC_NOT 54 /* ! *//* * Function calls. */# define PCC_CALL 55 /* call by value *//* no ASG */# define PCC_UCALL 57 /* call with no arguments */# define PCC_FORTCALL 58 /* call by reference? *//* no ASG */# define PCC_UFORTCALL 60 /* ??? */# ifdef INLINE# define PCC_INLINE 61 /* inline function *//* no ASG */# define PCC_UINLINE 63 /* inline with no arguments */# endif INLINE/* * Referencing and dereferencing. */# define PCC_DEREF 20 /* * */# define PCC_ADDROF 30 /* & *//* * Special structure operators. */# define PCC_DOT 64 /* . */# define PCC_STREF 65 /* -> */# define PCC_STASG 66 /* structure assignment */# define PCC_STARG 67 /* an argument of type structure */# define PCC_STCALL 68 /* a function of type structure *//* no ASG */# define PCC_USTCALL 70 /* unary structure function *//* * Conversions. */# define PCC_SCONV 71 /* scalar conversion */# define PCC_PCONV 72 /* pointer conversion */# define PCC_PMCONV 73 /* pointer multiply conversion */# define PCC_PVCONV 74 /* pointer divide conversion */# define PCC_CAST 75 /* redundant? *//* * Bracket types. */# define PCC_LB 76 /* [ */# define PCC_RB 77 /* ] *//* * Comma nodes. */# define PCC_COMOP 78 /* , (in expressions) */# define PCC_CM 79 /* , (in argument lists) *//* * Miscellaneous. */# define PCC_FORCE 80 /* result of last expression goes in r0 */# define PCC_GOTO 81 /* unconditional goto */# define PCC_CBRANCH 82 /* goto label if !test */# define PCC_RETURN 83 /* return from function */# define PCC_INIT 84 /* initialized data */# define PCC_TYPE 85 /* a type */# define PCC_CLASS 86 /* a storage class */# define PCC_MAXOP 86 /* highest numbered PCC op *//* * Special codes for interfacing to /lib/f1. */# define PCCF_FORTOPS 150# define PCCF_FTEXT 150 /* pass literal assembler text */# define PCCF_FEXPR 151 /* a statement */# define PCCF_FSWITCH 152 /* not implemented */# define PCCF_FLBRAC 153 /* beginning of subroutine */# define PCCF_FRBRAC 154 /* end of subroutine */# define PCCF_FEOF 155 /* end of file */# define PCCF_FARIF 156 /* not implemented */# define PCCF_FLABEL 157 /* an f77 label */# endif PCC_TOKENS/* * Types, as encoded in intermediate file cookies. */# define PCCT_UNDEF 0# define PCCT_FARG 1 /* function argument */# define PCCT_CHAR 2# define PCCT_SHORT 3# define PCCT_INT 4# define PCCT_LONG 5# define PCCT_FLOAT 6# define PCCT_DOUBLE 7# define PCCT_STRTY 8# define PCCT_UNIONTY 9# define PCCT_ENUMTY 10# define PCCT_MOETY 11 /* member of enum */# define PCCT_UCHAR 12# define PCCT_USHORT 13# define PCCT_UNSIGNED 14# define PCCT_ULONG 15/* * Type modifiers. */# define PCCTM_PTR 020# define PCCTM_FTN 040# define PCCTM_ARY 060# define PCCTM_BASETYPE 017# define PCCTM_TYPESHIFT 2/* * Useful macros. 'PCCOM' macros apply to ops. */# define PCCOM_ASG 1+# define PCCOM_UNARY 2+# define PCCOM_NOASG (-1)+# define PCCOM_NOUNARY (-2)+# define PCCM_TRIPLE(op, var, type) \ ((op) | ((var) << 8) | (long) (type) << 16)# define PCCM_TEXT(s) \ PCCM_TRIPLE(PCCF_FTEXT, (strlen(s) + 3) / 4, 0)# define PCCM_ADDTYPE(t, m) \ ((((t) &~ PCCTM_BASETYPE) << PCCTM_TYPESHIFT) | \ (m) | ((t) & PCCTM_BASETYPE))
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?