home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.0 / NeXTSTEP3.0.iso / NextDeveloper / Headers / bsd / pcc.h < prev    next >
Text File  |  1990-01-22  |  6KB  |  230 lines

  1. /*
  2.  * Copyright (c) 1983 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.  *    @(#)pcc.h    5.1 (Berkeley) 5/30/85
  7.  */
  8.  
  9. /*
  10.  * This file contains definitions for all the constants and structures
  11.  *    needed to use the intermediate code files generated and read by
  12.  *    the Portable C Compiler and related compilers.
  13.  *
  14.  * Rules for changing this code:
  15.  *   1)    All op values must be integer constants -- this permits us to run
  16.  *    a 'sed' script on this file to create %term declarations for yacc.
  17.  *   2)    Because the PCC uses fancy ASG and UNARY macros, assignment
  18.  *    operators must have values 1 greater than corresponding normal
  19.  *    operators, and unary operators must have values 2 greater ditto.
  20.  *   3) Ops used only by f1 must have values >= 150 (PCCF_FORTOPS).
  21.  *   4)    Other language-dependent ops must have values >= 200.
  22.  */
  23.  
  24. # ifndef    PCC_TOKENS
  25.  
  26. # define    PCC_TOKENS    0
  27.  
  28. # define    PCC_ERROR    1    /* an error node */
  29. # define    PCC_FREE    2    /* an unused node */
  30.  
  31. /*
  32.  * Constants.
  33.  */
  34. # define    PCC_STRING    3    /* a string constant */
  35. # define    PCC_ICON    4    /* an integer constant */
  36. # define    PCC_FCON    5    /* a floating point constant */
  37. # define    PCC_DCON    6    /* a double precision f.p. constant */
  38.  
  39. /*
  40.  * Leaf types.
  41.  */
  42. # define    PCC_NAME    7    /* an identifier */
  43. # define    PCC_REG        8    /* a register */
  44. # define    PCC_OREG    9    /* register and offset */
  45. # define    PCC_CCODES    10    /* condition codes */
  46. #7&rine    PCC_FLD        11    /* a bit field */
  47.  
  48. /*
  49.  * Arithmetic operators.
  50.  */
  51. # define    PCC_PLUS    12    /* + */
  52. # define    PCC_PLUSEQ    13    /* += */
  53. # define    PCC_UPLUS    14    /* unary + (for completeness) */
  54. # define    PCC_MINUS    15    /* - */
  55. # define    PCC_MINUSEQ    16    /* -= */
  56. # define    PCC_UMINUS    17    /* unary - */
  57. # define    PCC_MUL        18    /* * */
  58. # define    PCC_MULEQ    19    /* *= */
  59. /* Reserve a slot for 'unary *', which is PCC jargon for PCC_DEREF (yech) */
  60. # define    PCC_DIV        21    /* / */
  61. # define    PCC_DIVEQ    22    /* /= */
  62. # define    PCC_MOD        23    /* % */
  63. # define    PCC_MODEQ    24    /* %= */
  64. # define    PCC_INCR    25    /* ++ */
  65. # define    PCC_DECR    26    /* -- */
  66. # define    PCC_ASSIGN    27    /* = (these last 3 are stretching it) */
  67.  
  68. /*
  69.  * Bit operators.
  70.  */
  71. # define    PCC_AND        28    /* & */
  72. # define    PCC_ANDEQ    29    /* &= */
  73. /* Reserve a slot for 'unary &', jargon for PCC_ADDROF */
  74. # define    PCC_OR        31    /* | */
  75. # define    PCC_OREQ    32    /* |= */
  76. # define    PCC_ER        33    /* ^ */
  77. # define    PCC_EREQ    34    /* ^= */
  78. # define    PCC_LS        35    /* << */
  79. # define    PCC_LSEQ    36    /* <<= */
  80. # define    PCC_RS        37    /* >> */
  81. # define    PCC_RSEQ    38    /* >>= */
  82. # define    PCC_COMPL    39    /* ~ */
  83.  
  84. /*
  85.  * Booleans.
  86.  */
  87. # define    PCC_EQ        40    /* == */
  88. # define    PCC_NE        41    /* != */
  89. # define    PCC_LE        42    /* <= */
  90. # define    PCC_LT        43    /* < */
  91. # define    PCC_GE        44    /* >= */
  92. # define    PCC_GT        45    /* > */
  93. # define    PCC_ULE        46    /* unsigned <= */
  94. # define    PCC_ULT        47    /* unsigned < */
  95. # define    PCC_UGE        48    /* unsigned >= */
  96. # define    PCC_UGT        49    /* unsigned > */
  97. # define    PCC_QUEST    50    /* ? (for conditional expressions) */
  98. # define    PCC_COLON    51    /* : (for conditional expressions) */
  99. # define    PCC_ANDAND    52    /* && */
  100. # define    PCC_OROR    53    /* || */
  101. # define    PCC_NOT        54    /* ! */
  102.  
  103. /*
  104.  * Function calls.
  105.  */
  106. # define    PCC_CALL    55    /* call by value */
  107. /* no ASG */
  108. # define    PCC_UCALL    57    /* call with no arguments */
  109. # define    PCC_FORTCALL    58    /* call by reference? */
  110. /* no ASG */
  111. # define    PCC_UFORTCALL    60    /* ??? */
  112. # ifdef INLINE
  113. # define    PCC_INLINE    61    /* inline function */
  114. /* no ASG */
  115. # define    PCC_UINLINE    63    /* inline with no arguments */
  116. # endif INLINE
  117.  
  118. /*
  119.  * Referencing and dereferencing.
  120.  */
  121. # define    PCC_DEREF    20    /* * */
  122. # define    PCC_ADDROF    30    /* & */
  123.  
  124. /*
  125.  * Special structure operators.
  126.  */
  127. # define    PCC_DOT        64    /* . */
  128. # define    PCC_STREF    65    /* -> */
  129. # define    PCC_STASG    66    /* structure assignment */
  130. # define    PCC_STARG    67    /* an argument of type structure */
  131. # define    PCC_STCALL    68    /* a func7&s of type structure */
  132. /* no ASG */
  133. # define    PCC_USTCALL    70    /* unary structure function */
  134.  
  135. /*
  136.  * Conversions.
  137.  */
  138. # define    PCC_SCONV    71    /* scalar conversion */
  139. # define    PCC_PCONV    72    /* pointer conversion */
  140. # define    PCC_PMCONV    73    /* pointer multiply conversion */
  141. # define    PCC_PVCONV    74    /* pointer divide conversion */
  142. # define    PCC_CAST    75    /* redundant? */
  143.  
  144. /*
  145.  * Bracket types.
  146.  */
  147. # define    PCC_LB        76    /* [ */
  148. # define    PCC_RB        77    /* ] */
  149.  
  150. /*
  151.  * Comma nodes.
  152.  */
  153. # define    PCC_COMOP    78    /* , (in expressions) */
  154. # define    PCC_CM        79    /* , (in argument lists) */
  155.  
  156. /*
  157.  * Miscellaneous.
  158.  */
  159. # define    PCC_FORCE    80    /* result of last expression goes in r0 */
  160. # define    PCC_GOTO    81    /* unconditional goto */
  161. # define    PCC_CBRANCH    82    /* goto label if !test */
  162. # define    PCC_RETURN    83    /* return from function */
  163. # define    PCC_INIT    84    /* initialized data */
  164. # define    PCC_TYPE    85    /* a type */
  165. # define    PCC_CLASS    86    /* a storage class */
  166.  
  167. # define    PCC_MAXOP    86    /* highest numbered PCC op */
  168.  
  169. /*
  170.  * Special codes for interfacing to /lib/f1.
  171.  */
  172. # define    PCCF_FORTOPS    150
  173. # define    PCCF_FTEXT    150    /* pass literal assembler text */
  174. # define    PCCF_FEXPR    151    /* a statement */
  175. # define    PCCF_FSWITCH    152    /* not implemented */
  176. # define    PCCF_FLBRAC    153    /* beginning of subroutine */
  177. # define    PCCF_FRBRAC    154    /* end of subroutine */
  178. # define    PCCF_FEOF    155    /* end of file */
  179. # define    PCCF_FARIF    156    /* not implemented */
  180. # define    PCCF_FLABEL    157    /* an f77 label */
  181.  
  182. # endif    PCC_TOKENS
  183.  
  184.  
  185. /*
  186.  * Types, as encoded in intermediate file cookies.
  187.  */
  188. # define    PCCT_UNDEF    0
  189. # define    PCCT_FARG    1    /* function argument */
  190. # define    PCCT_CHAR    2
  191. # define    PCCT_SHORT    3
  192. # define    PCCT_INT    4
  193. # define    PCCT_LONG    5
  194. # define    PCCT_FLOAT    6
  195. # define    PCCT_DOUBLE    7
  196. # define    PCCT_STRTY    8
  197. # define    PCCT_UNIONTY    9
  198. # define    PCCT_ENUMTY    10
  199. # define    PCCT_MOETY    11    /* member of enum */
  200. # define    PCCT_UCHAR    12
  201. # define    PCCT_USHORT    13
  202. # define    PCCT_UNSIGNED    14
  203. # define    PCCT_ULONG    15
  204.  
  205. /*
  206.  * Type modifiers.
  207.  */
  208. # define    PCCTM_PTR    020
  209. # define    PCCTM_FTN    040
  210. # define    PCCTM_ARY    060
  211. # define    PCCTM_BASETYPE    017
  212. # define    PCCTM_TYPESHIFT    2
  213.  
  214.  
  215. /*
  216.  * Useful macros.  'PCCOM' macros apply to ops.
  217.  */
  218. # define    PCCOM_ASG    1+
  219. # define    PCCOM_UNARY    2+
  220. # define    PCCOM_NOASG    (-1)+
  221. # define    PCCOM_NOUNARY    (-2)+
  222.  
  223. # define    PCCM_TRIPLE(op, var, type)    \
  224.     ((op) | ((var) << 8) | (long) (type) << 16)
  225. # define    PCCM_TEXT(s)            \
  226.     PCCM_TRIP7&tCCF_FTEXT, (strlen(s) + 3) / 4, 0)
  227. # define    PCCM_ADDTYPE(t, m)        \
  228.     ((((t) &~ PCCTM_BASETYPE) << PCCTM_TYPESHIFT) | \
  229.     (m) | ((t) & PCCTM_BASETYPE))
  230.