aboutsummaryrefslogtreecommitdiff
path: root/backendC/CleanCompilerSources/codegen1.h
diff options
context:
space:
mode:
Diffstat (limited to 'backendC/CleanCompilerSources/codegen1.h')
-rw-r--r--backendC/CleanCompilerSources/codegen1.h125
1 files changed, 125 insertions, 0 deletions
diff --git a/backendC/CleanCompilerSources/codegen1.h b/backendC/CleanCompilerSources/codegen1.h
new file mode 100644
index 0000000..d388317
--- /dev/null
+++ b/backendC/CleanCompilerSources/codegen1.h
@@ -0,0 +1,125 @@
+
+struct esc {
+ int esc_asp;
+ int esc_bsp;
+ struct label * esc_label;
+};
+
+extern char d_pref[],s_pref[],n_pref[],l_pref[],no_pref[],ea_pref[],caf_pref[],
+ glob_sel[],m_symb[];
+#ifdef THUNK_LIFT_SELECTORS
+extern char glob_selr[];
+#endif
+
+extern char channel_code [],ext_nf_reducer_code[],nf_reducer_code[],hnf_reducer_code[],ext_hnf_reducer_code[];
+
+extern LabDef
+ cycle_lab, reserve_lab, type_error_lab, indirection_lab, ind_lab,
+ hnf_lab, cons_lab, nil_lab, tuple_lab, empty_lab, add_arg_lab, match_error_lab,
+#ifdef CLEAN2
+ select_with_dictionary_lab, update_with_dictionary_lab,
+#endif
+ CurrentAltLabel;
+
+extern Label ReduceError;
+
+#define ExpectsResultNode(state) ((state).state_type==SimpleState && (state).state_kind>StrictRedirection)
+
+#define IsSimpleState(state) ((state).state_type==SimpleState)
+
+extern void FileComment (void);
+
+extern void PrintNodeId (NodeId nid);
+
+extern void PrintComment (void);
+extern void LhsComment (unsigned int altnr, int asp, int bsp);
+extern void StrictIdComment (NodeId id);
+extern void NodeDefComment (NodeDefs nd, char *msg);
+extern void ContractumComment (int asp, int bsp);
+extern void RedirectionComment (NodeId nid);
+extern void ArgComment (Args arg);
+extern void NodeIdComment (NodeId node_id);
+extern void TypeArgComment (TypeArgs arg);
+extern void ParComment (Args arg);
+
+extern void InitStackFrame (int offframe[], int defframe [], int max);
+extern void InitStackConversions (int maxa, int maxb, int *oldamax, int *oldbmax);
+extern void InitAStackConversions (int maxa,int *oldamax_p);
+extern void ExitStackConversions (int oldamax, int oldbmax);
+extern void GenAStackConversions (int sp,int demsize);
+extern void GenBStackConversions (int sp,int demsize);
+
+extern int *DemandedAFrame,*DemandedBFrame,CurrentAFrameSize,CurrentBFrameSize;
+
+extern void FreeAFrameSpace (int previoussize);
+extern void ReserveBFrameSpace (int size, int *oldsize);
+extern void FreeBFrameSpace (int previoussize);
+extern int *AllocTempDemandedAFrame (int size);
+extern int *AllocTempDemandedBFrame (int size);
+extern void CreateStackFrames (void);
+extern void PutInBFrames (int bsp, int *b_ind, int size);
+extern void PutInAFrames (int asp, int *a_ind);
+
+extern void MakeLabel (Label lab, char *name, unsigned num, char *pref);
+extern void MakeSymbolLabel (Label lab, char *mod, char *pref,SymbDef sdef, unsigned num);
+
+extern void ConvertSymbolToLabel (LabDef *slab,SymbDef sdef);
+extern void ConvertSymbolToDLabel (LabDef *slab,SymbDef sdef);
+extern void ConvertSymbolToKLabel (LabDef *slab,SymbDef sdef);
+extern void ConvertSymbolToRLabel (LabDef *slab,SymbDef sdef);
+extern void ConvertSymbolToDandNLabel (LabDef *d_lab,LabDef *n_lab,SymbDef sdef);
+extern void ConvertSymbolToConstructorDLabel (LabDef *slab,SymbDef sdef);
+extern void ConvertSymbolToConstructorDandNLabel (LabDef *d_lab,LabDef *n_lab,SymbDef sdef);
+extern void ConvertSymbolToRecordDandNLabel (LabDef *d_lab,LabDef *n_lab,SymbDef sdef);
+
+extern void BuildLazyTupleSelectorLabel (Label slab,int arity,int argnr);
+#if defined (THUNK_LIFT_SELECTORS)
+extern void BuildLazyTupleSelectorAndRemoveLabel (Label slab,int arity,int argnr);
+#endif
+
+extern void DetermineSizeOfStates (int arity, States states, int *asize, int *bsize);
+extern void DetermineSizeOfState (StateS state, int *asize, int *bsize);
+extern void AddSizeOfState (StateS state, int *asize, int *bsize);
+
+extern void AddStateSizeAndMaxFrameSize (StateS state, int *maxasize,int *asize, int *bsize);
+extern void AddStateSizesAndMaxFrameSizes (int arity, States states,int *maxasize, int *asize, int *bsize);
+extern void AddStateSizesAndMaxFrameSizesOfArguments (Args args,int *maxasize, int *asize, int *bsize);
+extern void DetermineFieldSizeAndPosition (int fieldnr, int *asize, int *bsize,int *apos, int *bpos, States argstates);
+
+extern void GenerateCodeForConstructorsAndRecords (Symbol symbs);
+extern void GenerateStatesForRecords (Symbol symbs);
+
+extern Bool NodeEntry (StateS *const function_state_p,int arity,Label ealab,SymbDef rootsymb);
+extern Bool NodeEntryUnboxed (StateS *const function_state_p,NodeP call_node_p,int args_a_size,int args_b_size,Label ealab,SymbDef rootsymb);
+extern void ApplyEntry (StateS *const function_state_p,int arity,Label ealab,int ea_label_follows);
+
+extern Bool ConvertExternalToInternalCall (int arity,StateS *const ext_function_state_p,StateS *const int_function_state_p,
+ Bool skip_entry,int intasp,int intbsp,Label ealab,Label extlab,Bool root_node_needed);
+extern void GenerateCodeForLazyTupleSelectorEntries (Bool *selectors);
+extern void GenerateCodeForLazyArrayFunctionEntries (void);
+
+extern int next_update_function_n,next_match_function_n;
+
+extern ImpRuleS *first_update_function,**update_function_p;
+extern SymbDef CreateUpdateFunction (ArgS *record_arg,ArgS *first_field_arg,Node node);
+#if U_RECORD_SELECTORS
+extern SymbDef create_select_function (Symbol selector_symbol,int selector_kind);
+#endif
+extern SymbDef create_match_function (struct symbol *constructor_symbol,int constructor_arity,int strict_constructor);
+extern SymbDef create_select_and_match_function (struct symbol *constructor_symbol,int strict_constructor);
+
+extern void ReduceArgumentToHnf (NodeId node_id,StateS state,int offset,struct saved_nid_state **save_states_p);
+extern void BindArgs (Args args,int ara,int arb);
+extern void MatchArgs (Args args,int aindex,int bindex,int asp,int bsp,struct ab_node_ids *ab_node_ids_p);
+
+extern void MatchError (int aselmts,int bselmts,SymbDef sdef,Bool root_node_needed,int string_already_generated);
+
+extern int generate_code_for_root_node
+ (struct node *node,int asp,int bsp,struct esc *esc_p,NodeDefs defs,
+ struct state *result_state_p,struct saved_nid_state **save_states_p ,struct ab_node_ids *ab_node_ids_p);
+
+extern ImpRuleS *create_simple_imp_rule (struct node *lhs_root,struct node *rhs_root,SymbDefP function_sdef);
+
+#define unused_node_id(node_id) ((node_id)->nid_refcount!=-1 ? (node_id)->nid_refcount==0 : unused_node_id_ (node_id))
+extern int unused_node_id_ (NodeId node_id);
+