-
Notifications
You must be signed in to change notification settings - Fork 131
Expand file tree
/
Copy pathvariable.h
More file actions
132 lines (108 loc) · 4 KB
/
variable.h
File metadata and controls
132 lines (108 loc) · 4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#ifndef VARIABLE_H
#define VARIABLE_H
/** **********************************************************************
** Module: Variable \file variable.h
** Description: This module implements the Variable abstraction. A
** Variable consists of a name, a type, a reference class, and
** some flags, e.g. 'optional', 'variable'. It is used to represent
** entity attributes, variables, and formal parameters.
** Constants:
** VARIABLE_NULL - the null variable
**
************************************************************************/
/*
* This code was developed with the support of the United States Government,
* and is not subject to copyright.
*
* $Log: variable.h,v $
* Revision 1.10 1997/01/21 19:17:11 dar
* made C++ compatible
*
* Revision 1.9 1995/04/05 14:58:31 clark
* CADDETC preval
*
* Revision 1.8 1994/05/11 19:51:05 libes
* numerous fixes
*
* Revision 1.7 1993/10/15 18:48:24 libes
* CADDETC certified
*
* Revision 1.6 1993/03/19 20:42:36 libes
* fixed get_inverse macro
*
* Revision 1.5 1993/02/16 03:27:55 libes
* added flag for simplifying detection of parameters from other vars
*
* Revision 1.4 1993/01/19 22:15:13 libes
* *** empty log message ***
*
* Revision 1.3 1992/08/18 17:12:41 libes
* rm'd extraneous error messages
*
* Revision 1.2 1992/06/08 18:06:24 libes
* prettied up interface to print_objects_when_running
*/
/*************/
/* constants */
/*************/
#define VARIABLE_NULL (Variable)0
/*****************/
/* packages used */
/*****************/
#include "expbasic.h" /* get basic definitions */
#include "symbol.h"
/************/
/* typedefs */
/************/
typedef struct Variable_ * Variable;
/****************/
/* modules used */
/****************/
#include "type.h"
#include "expr.h"
/***************************/
/* hidden type definitions */
/***************************/
struct Variable_ {
Expression name; /**< Symbol is inside of 'name' */
Type type;
Expression initializer; /**< or 'derived' */
int offset; /**< used for attr order in Entitys, and for decl order in LOCAL vars. these two uses should never conflict! */
int idx; /**< used in exp2cxx to simplify calculation of attrDescriptor names in generated code */
struct {
unsigned int optional : 1; /**< OPTIONAL keyword */
unsigned int var : 1; /**< VAR keyword */
unsigned int constant : 1; /**< from CONSTANT...END_CONSTANT */
unsigned int unique : 1; /**< appears in UNIQUE list */
unsigned int parameter : 1; /**< is a formal parameter */
unsigned int attribute : 1; /**< is an attribute (rule parameters are marked this way, too) */
} flags;
Symbol * inverse_symbol; /**< entity symbol */
Variable inverse_attribute; /**< attribute related by inverse relationship */
};
/********************/
/* global variables */
/********************/
extern SC_EXPRESS_EXPORT struct freelist_head VAR_fl;
/******************************/
/* macro function definitions */
/******************************/
#define VAR_new() (struct Variable_ *)ALLOC_new(&VAR_fl)
#define VAR_destroy(x) ALLOC_destroy(&VAR_fl,(Freelist *)x)
#define VARget_name(v) ((v)->name)
#define VARput_name(v,n) ((v)->name = (n))
#define VARput_offset(v,off) ((v)->offset = (off))
#define VARget_offset(v) ((v)->offset)
#define VARget_initializer(v) ((v)->initializer)
#define VARget_type(v) ((v)->type)
#define VARget_optional(v) ((v)->flags.optional)
#define VARget_unique(v) ((v)->flags.unique)
#define VARis_derived(v) ((v)->initializer != 0)
#define VARget_inverse(v) ((v)->inverse_attribute)
/***********************/
/* function prototypes */
/***********************/
extern SC_EXPRESS_EXPORT Variable VARcreate( Expression, Type );
extern SC_EXPRESS_EXPORT void VARinitialize( void );
extern SC_EXPRESS_EXPORT char * VARget_simple_name( Variable );
#endif /* VARIABLE_H */