aboutsummaryrefslogtreecommitdiff
path: root/backendC/CleanCompilerSources/overloading.h
blob: 967f7fe4b1f48bc7a7b5a4ef94566c81d6cce326 (plain) (blame)
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
/*

	Version 1.0 08/25/1994

	Author:  Sjaak Smetsers

*/

/*

typedef struct member_descriptor
{
	SymbDef		md_class;
	Symbol		md_rule;

} * MemberDescriptor;

typedef struct member_item
{	
	Bool					mi_is_class;
	union
	{	Overloaded		mi_u_rule;
		SymbDef			mi_u_class;
	} mi_union;
				
	struct member_item *	mi_next;
	
} * MemberItems;

#define mi_rule	mi_union.mi_u_rule
#define mi_class	mi_union.mi_u_class

*/

/*
	Global variables
*/

extern unsigned NrOfOverloadedTypeVars, NrOfOverloadedRules, NrOfUntypedImpRules,
			 NrOfTypeClasses;


/*
	Global functions
*/

extern int LengthOfPolyList (PolyList list);

extern PolyList NewPolyListElem (void *elem, PolyList next, HeapDescr hd);

extern Bool IsSubClass (SymbolList sub_tree, SymbolList whole_list);

extern void DetermineClassesOfOverloadedTypeVariables (struct type_cell * type_inst);

extern Bool TryToBindOverloadedTypeVariables (Node appl_node, SymbolList class_symbols, struct type_cell *  type_inst);

extern void CheckInstancesOfTypeClasses (Symbol symbs);

extern void ConvertTypeClasses (void);

extern void ConvertTypeContexts (TypeContext type_cont, struct type_cell * typeargs []);

extern void  SetOverloadedTypeVars (int over_arity, TypeContext type_cont, struct type_cell * over_vars []);

extern void DetermineClassNumber (SymbDef class_symb);

extern SymbDef CopySymbDef (SymbDef old);

extern SymbDef NewEmptyRule (Symbol rule_symb, int arity, unsigned line);

extern Bool EqualTypeClasses (int var_nr1, int var_nr2);

extern void InitOverloading (void);

extern FieldList RetrieveClassSelector (SymbolList class_symbols, SymbDef class_symbol);

extern Types DetermineClassRecord (int nr_of_fields);

extern Bool InstanceIsExported (struct type_cell * inst_types [], struct type_cell * over_vars [], TypeContext type_cont);

extern struct type_cell * DetermineDefaultInstance (struct type_cell * over_var, Node over_appl_node);

extern Bool EqualSymbolList (SymbolList class_symbols1, SymbolList class_symbols2);

extern Bool ClassesHaveAGenericInstance (SymbolList classes);

extern struct type_cell * DetermineGenericInstance (struct type_cell * over_var);

extern SymbolList RebuildClassSymbolList (SymbolList class_symbs, void *alloc (SizeT size));

#define cTakeIclDef	True
#define cDontTakeIclDef	False

extern void InsertSymbolInSymbolList (SymbolList *symbols, SymbDef new_symbol, Bool take_icl_def, void *alloc (SizeT size));

extern void ConvertClassSymbolTreeToList (SymbolList symbols, SymbolList * result_list, void *alloc (SizeT size));

extern void CreateRuleType (SymbDef icl_def, TypeAlts imp_type);