def.H 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. /*
  2. * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
  3. * See the copyright notice in the ACK home directory, in the file "Copyright".
  4. *
  5. * Author: Ceriel J.H. Jacobs
  6. */
  7. /* I D E N T I F I E R D E S C R I P T O R S T R U C T U R E */
  8. /* $Id$ */
  9. struct module {
  10. struct node *mo_priority;/* priority of a module */
  11. struct scopelist *mo_vis;/* scope of this module */
  12. struct node *mo_body; /* body of this module */
  13. #define mod_priority df_value.df_module.mo_priority
  14. #define mod_vis df_value.df_module.mo_vis
  15. #define mod_body df_value.df_module.mo_body
  16. };
  17. struct variable {
  18. arith va_off; /* address or offset of variable */
  19. char *va_name; /* name of variable if given */
  20. #define var_off df_value.df_variable.va_off
  21. #define var_name df_value.df_variable.va_name
  22. };
  23. struct constant {
  24. struct token co_const; /* result of a constant expression */
  25. #define con_const df_value.df_constant.co_const
  26. };
  27. struct enumval {
  28. arith en_val; /* value of this enumeration literal */
  29. struct def *en_next; /* next enumeration literal */
  30. #define enm_val df_value.df_enum.en_val
  31. #define enm_next df_value.df_enum.en_next
  32. };
  33. struct field {
  34. arith fd_off;
  35. struct variant {
  36. struct caselabellist *v_cases;
  37. label v_casedescr;
  38. struct def *v_varianttag;
  39. } *fd_variant;
  40. #define fld_off df_value.df_field.fd_off
  41. #define fld_variant df_value.df_field.fd_variant
  42. };
  43. struct import {
  44. struct def *im_def; /* imported definition */
  45. #define imp_def df_value.df_import.im_def
  46. };
  47. struct dforward {
  48. struct scopelist *fo_vis;
  49. struct node *fo_node;
  50. char *fo_name;
  51. #define for_node df_value.df_forward.fo_node
  52. #define for_vis df_value.df_forward.fo_vis
  53. #define prc_vis df_value.df_forward.fo_vis
  54. #define prc_body df_value.df_forward.fo_node
  55. #define prc_name df_value.df_forward.fo_name
  56. };
  57. struct forwtype {
  58. struct node *f_node;
  59. struct def *f_def;
  60. #define df_forw_node df_value.df_fortype.f_node
  61. #define df_forw_def df_value.df_fortype.f_def
  62. };
  63. struct def { /* list of definitions for a name */
  64. struct def *df_next; /* next definition in definitions chain */
  65. struct def *df_nextinscope;
  66. /* link all definitions in a scope */
  67. struct idf *df_idf; /* link back to the name */
  68. struct scope *df_scope; /* scope in which this definition resides */
  69. unsigned short df_kind; /* the kind of this definition: */
  70. #define D_MODULE 0x0001 /* a module */
  71. #define D_PROCEDURE 0x0002 /* procedure of function */
  72. #define D_VARIABLE 0x0004 /* a variable */
  73. #define D_FIELD 0x0008 /* a field in a record */
  74. #define D_TYPE 0x0010 /* a type */
  75. #define D_ENUM 0x0020 /* an enumeration literal */
  76. #define D_CONST 0x0040 /* a constant */
  77. #define D_IMPORT 0x0080 /* an imported definition */
  78. #define D_PROCHEAD 0x0100 /* a procedure heading in a definition module */
  79. #define D_HIDDEN 0x0200 /* a hidden type */
  80. #define D_FORWARD 0x0400 /* not yet defined */
  81. #define D_FORWMODULE 0x0800 /* module must be declared later */
  82. #define D_FORWTYPE 0x1000 /* forward type */
  83. #define D_ERROR 0x4000 /* a compiler generated definition for an
  84. undefined variable
  85. */
  86. #define D_INUSE 0x8000 /* identification in this scope (like D_IMPORT)
  87. */
  88. #define D_END (D_MODULE|D_PROCEDURE) /* special value for stab.c */
  89. #define D_PEND (D_MODULE|D_PROCEDURE|D_VARIABLE) /* special value for stab.c */
  90. #define D_VALUE (D_PROCEDURE|D_VARIABLE|D_FIELD|D_ENUM|D_CONST|D_PROCHEAD)
  91. #define D_ISTYPE (D_HIDDEN|D_TYPE)
  92. #define D_IMPORTED (D_IMPORT|D_INUSE)
  93. #define is_type(dfx) ((dfx)->df_kind & D_ISTYPE)
  94. unsigned short df_flags;
  95. #define D_NOREG 0x01 /* set if it may not reside in a register */
  96. #define D_USED 0x02 /* set if used */
  97. #define D_DEFINED 0x04 /* set if it is assigned a value */
  98. #define D_VARPAR 0x08 /* set if it is a VAR parameter */
  99. #define D_VALPAR 0x10 /* set if it is a value parameter */
  100. #define D_EXPORTED 0x20 /* set if exported */
  101. #define D_QEXPORTED 0x40 /* set if qualified exported */
  102. #define D_BUSY 0x80 /* set if busy reading this definition module */
  103. #define D_FOREIGN 0x100 /* set for foreign language modules */
  104. #define D_ADDRGIVEN 0x200 /* set if address given for variable */
  105. #define D_FORLOOP 0x400 /* set if busy in for-loop */
  106. #define D_IMP_BY_EXP 0x800 /* imported definition by export */
  107. struct type *df_type;
  108. union {
  109. struct module df_module;
  110. struct variable df_variable;
  111. struct constant df_constant;
  112. struct enumval df_enum;
  113. struct field df_field;
  114. struct import df_import;
  115. struct dforward df_forward; /* also used for proc */
  116. struct forwtype df_fortype;
  117. int df_stdname; /* define for standard name */
  118. } df_value;
  119. };
  120. typedef struct def t_def;
  121. /* ALLOCDEF "def" 50 */
  122. extern t_def
  123. *define(),
  124. *DefineLocalModule(),
  125. *MkDef(),
  126. *DeclProc(),
  127. *lookup(),
  128. *lookfor();
  129. #define NULLDEF ((t_def *) 0)