1 |
/* |
2 |
* Ascend Instance Tree Type Definitions |
3 |
* by Tom Epperly |
4 |
* 8/16/89 |
5 |
* Version: $Revision: 1.6 $ |
6 |
* Version control file: $RCSfile: mergeinst.h,v $ |
7 |
* Date last modified: $Date: 1997/09/08 18:08:06 $ |
8 |
* Last modified by: $Author: ballan $ |
9 |
* |
10 |
* This file is part of the Ascend Language Interpreter. |
11 |
* |
12 |
* Copyright (C) 1990, 1993, 1994 Thomas Guthrie Epperly |
13 |
* |
14 |
* The Ascend Language Interpreter is free software; you can redistribute |
15 |
* it and/or modify it under the terms of the GNU General Public License as |
16 |
* published by the Free Software Foundation; either version 2 of the |
17 |
* License, or (at your option) any later version. |
18 |
* |
19 |
* The Ascend Language Interpreter is distributed in hope that it will be |
20 |
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of |
21 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
22 |
* General Public License for more details. |
23 |
* |
24 |
* You should have received a copy of the GNU General Public License |
25 |
* along with the program; if not, write to the Free Software Foundation, |
26 |
* Inc., 675 Mass Ave, Cambridge, MA 02139 USA. Check the file named |
27 |
* COPYING. |
28 |
*/ |
29 |
|
30 |
/** @file |
31 |
* Ascend Instance Tree Type Definitions. |
32 |
* <pre> |
33 |
* When #including mergeinst.h, make sure these files are #included first: |
34 |
* #include "utilities/ascConfig.h" |
35 |
* #include "instance_enum.h" |
36 |
* </pre> |
37 |
*/ |
38 |
|
39 |
#ifndef ASC_MERGEINST_H |
40 |
#define ASC_MERGEINST_H |
41 |
|
42 |
/** addtogroup compiler Compiler |
43 |
@{ |
44 |
*/ |
45 |
|
46 |
ASC_DLLSPEC struct Instance *MergeInstances(struct Instance *i1, struct Instance *i2); |
47 |
/**< |
48 |
* <!-- struct Instance *MergeInstances(i1,i2) --> |
49 |
* <!-- struct Instance *i1,*i2; --> |
50 |
* This is the ARE_THE_SAME operator. |
51 |
* The return value is the merged instance or NULL if can't be done. |
52 |
* Instances are merged from the bottom up, checking one step ahead |
53 |
* for type compatibility. |
54 |
* This operator is MOSTLY BROKEN due to the addition of |
55 |
* parameterized types. In particular, MoreRefined needs to be |
56 |
* augmented to check args that are now part of the extended |
57 |
* type definition. |
58 |
* This may add to or change the pending instance list. |
59 |
* If the return is NULL, the state of i1 and i2 in structural |
60 |
* terms is highly questionable. They may be partially merged. |
61 |
* |
62 |
* @bug Merging two vars in a shared relation will mess up all the |
63 |
* other copies of the relation unless all of their corresponding |
64 |
* vars are also merged. Fixed for token relations, but not others. |
65 |
*/ |
66 |
|
67 |
ASC_DLLSPEC void PostMergeCheck(struct Instance *i); |
68 |
/**< |
69 |
* <!-- void PostMergeCheck(i) --> |
70 |
* <!-- struct Instance *i; --> |
71 |
* Sanity check after a MergeInstances() call. |
72 |
* This should be performed after a MergeInstances call or a sequence of |
73 |
* MergeInstances calls. This goes through the merged instance tree and |
74 |
* make sure the ARE_ALIKE cliques are being enforced. |
75 |
*/ |
76 |
|
77 |
|
78 |
ASC_DLLSPEC void MergeCliques(struct Instance *i1, struct Instance *i2); |
79 |
/**< |
80 |
* <!-- void MergeCliques(i1,i2) --> |
81 |
* <!-- struct Instance *i1,*i2; --> |
82 |
* Merge the cliques represented by i1 and i2. This does not enforce |
83 |
* any type consistency between the clicks; it just links them together. |
84 |
* It doesn't matter if i1 and i2 are already in the same clique. |
85 |
*/ |
86 |
|
87 |
/* @} */ |
88 |
|
89 |
#endif /* ASC_MERGEINST_H */ |
90 |
|