aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorronny2001-05-03 17:30:50 +0000
committerronny2001-05-03 17:30:50 +0000
commitbc8ac608a6334ab72ace45f648e78d4183d1f05c (patch)
tree9c84e13d68903a6d31d43f7b25efd82dbeea53e3
parentbackend_library now generated from backend.icl (diff)
moved backend.[id]cl from backendCModules to backend
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@379 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
-rw-r--r--backend/backend.dcl305
-rw-r--r--backend/backend.icl689
2 files changed, 994 insertions, 0 deletions
diff --git a/backend/backend.dcl b/backend/backend.dcl
new file mode 100644
index 0000000..af49d08
--- /dev/null
+++ b/backend/backend.dcl
@@ -0,0 +1,305 @@
+definition module backend;
+
+//1.3
+from StdString import String;
+//3.1
+
+:: *UWorld :== Int;
+:: *BackEnd; // :== Int;
+:: BESymbolP; // :== Int;
+:: BETypeNodeP; // :== Int;
+:: BETypeArgP; // :== Int;
+:: BETypeAltP; // :== Int;
+:: BENodeP; // :== Int;
+:: BEArgP; // :== Int;
+:: BERuleAltP; // :== Int;
+:: BEImpRuleP; // :== Int;
+:: BETypeP; // :== Int;
+:: BEFlatTypeP; // :== Int;
+:: BETypeVarP; // :== Int;
+:: BETypeVarListP; // :== Int;
+:: BEConstructorListP; // :== Int;
+:: BEFieldListP; // :== Int;
+:: BENodeIdP; // :== Int;
+:: BENodeDefP; // :== Int;
+:: BEStrictNodeIdP; // :== Int;
+:: BECodeParameterP; // :== Int;
+:: BECodeBlockP; // :== Int;
+:: BEStringListP; // :== Int;
+:: BEAnnotation :== Int;
+:: BEAttribution :== Int;
+:: BESymbKind :== Int;
+:: BEArrayFunKind :== Int;
+:: BESelectorKind :== Int;
+:: BEUpdateKind :== Int;
+BEGetVersion :: (!Int,!Int,!Int);
+// void BEGetVersion(int* current,int* oldestDefinition,int* oldestImplementation);
+BEInit :: !Int !UWorld -> (!BackEnd,!UWorld);
+// BackEnd BEInit(int argc);
+BEFree :: !BackEnd !UWorld -> UWorld;
+// void BEFree(BackEnd backEnd);
+BEArg :: !String !BackEnd -> BackEnd;
+// void BEArg(CleanString arg);
+BEDeclareModules :: !Int !BackEnd -> BackEnd;
+// void BEDeclareModules(int nModules);
+BEDeclarePredefinedSymbols :: !Int !Int !BackEnd -> BackEnd;
+// void BEDeclarePredefinedSymbols(int nConstructors,int nTypes);
+BESpecialArrayFunctionSymbol :: !BEArrayFunKind !Int !Int !BackEnd -> (!BESymbolP,!BackEnd);
+// BESymbolP BESpecialArrayFunctionSymbol(BEArrayFunKind arrayFunKind,int functionIndex,int moduleIndex);
+BEDictionarySelectFunSymbol :: !BackEnd -> (!BESymbolP,!BackEnd);
+// BESymbolP BEDictionarySelectFunSymbol();
+BEDictionaryUpdateFunSymbol :: !BackEnd -> (!BESymbolP,!BackEnd);
+// BESymbolP BEDictionaryUpdateFunSymbol();
+BEFunctionSymbol :: !Int !Int !BackEnd -> (!BESymbolP,!BackEnd);
+// BESymbolP BEFunctionSymbol(int functionIndex,int moduleIndex);
+BEConstructorSymbol :: !Int !Int !BackEnd -> (!BESymbolP,!BackEnd);
+// BESymbolP BEConstructorSymbol(int constructorIndex,int moduleIndex);
+BEFieldSymbol :: !Int !Int !BackEnd -> (!BESymbolP,!BackEnd);
+// BESymbolP BEFieldSymbol(int fieldIndex,int moduleIndex);
+BETypeSymbol :: !Int !Int !BackEnd -> (!BESymbolP,!BackEnd);
+// BESymbolP BETypeSymbol(int typeIndex,int moduleIndex);
+BEDontCareDefinitionSymbol :: !BackEnd -> (!BESymbolP,!BackEnd);
+// BESymbolP BEDontCareDefinitionSymbol();
+BEBoolSymbol :: !Bool !BackEnd -> (!BESymbolP,!BackEnd);
+// BESymbolP BEBoolSymbol(int value);
+BELiteralSymbol :: !BESymbKind !String !BackEnd -> (!BESymbolP,!BackEnd);
+// BESymbolP BELiteralSymbol(BESymbKind kind,CleanString value);
+BEPredefineConstructorSymbol :: !Int !Int !Int !BESymbKind !BackEnd -> BackEnd;
+// void BEPredefineConstructorSymbol(int arity,int constructorIndex,int moduleIndex,BESymbKind symbolKind);
+BEPredefineTypeSymbol :: !Int !Int !Int !BESymbKind !BackEnd -> BackEnd;
+// void BEPredefineTypeSymbol(int arity,int typeIndex,int moduleIndex,BESymbKind symbolKind);
+BEBasicSymbol :: !Int !BackEnd -> (!BESymbolP,!BackEnd);
+// BESymbolP BEBasicSymbol(BESymbKind kind);
+BEVarTypeNode :: !String !BackEnd -> (!BETypeNodeP,!BackEnd);
+// BETypeNodeP BEVarTypeNode(CleanString name);
+BETypeVars :: !BETypeVarP !BETypeVarListP !BackEnd -> (!BETypeVarListP,!BackEnd);
+// BETypeVarListP BETypeVars(BETypeVarP typeVar,BETypeVarListP typeVarList);
+BENoTypeVars :: !BackEnd -> (!BETypeVarListP,!BackEnd);
+// BETypeVarListP BENoTypeVars();
+BENormalTypeNode :: !BESymbolP !BETypeArgP !BackEnd -> (!BETypeNodeP,!BackEnd);
+// BETypeNodeP BENormalTypeNode(BESymbolP symbol,BETypeArgP args);
+BEAnnotateTypeNode :: !BEAnnotation !BETypeNodeP !BackEnd -> (!BETypeNodeP,!BackEnd);
+// BETypeNodeP BEAnnotateTypeNode(BEAnnotation annotation,BETypeNodeP typeNode);
+BEAttributeTypeNode :: !BEAttribution !BETypeNodeP !BackEnd -> (!BETypeNodeP,!BackEnd);
+// BETypeNodeP BEAttributeTypeNode(BEAttribution attribution,BETypeNodeP typeNode);
+BENoTypeArgs :: !BackEnd -> (!BETypeArgP,!BackEnd);
+// BETypeArgP BENoTypeArgs();
+BETypeArgs :: !BETypeNodeP !BETypeArgP !BackEnd -> (!BETypeArgP,!BackEnd);
+// BETypeArgP BETypeArgs(BETypeNodeP node,BETypeArgP nextArgs);
+BETypeAlt :: !BETypeNodeP !BETypeNodeP !BackEnd -> (!BETypeAltP,!BackEnd);
+// BETypeAltP BETypeAlt(BETypeNodeP lhs,BETypeNodeP rhs);
+BENormalNode :: !BESymbolP !BEArgP !BackEnd -> (!BENodeP,!BackEnd);
+// BENodeP BENormalNode(BESymbolP symbol,BEArgP args);
+BEMatchNode :: !Int !BESymbolP !BENodeP !BackEnd -> (!BENodeP,!BackEnd);
+// BENodeP BEMatchNode(int arity,BESymbolP symbol,BENodeP node);
+BETupleSelectNode :: !Int !Int !BENodeP !BackEnd -> (!BENodeP,!BackEnd);
+// BENodeP BETupleSelectNode(int arity,int index,BENodeP node);
+BEIfNode :: !BENodeP !BENodeP !BENodeP !BackEnd -> (!BENodeP,!BackEnd);
+// BENodeP BEIfNode(BENodeP cond,BENodeP then,BENodeP elsje);
+BEGuardNode :: !BENodeP !BENodeDefP !BEStrictNodeIdP !BENodeP !BENodeDefP !BEStrictNodeIdP !BENodeP !BackEnd -> (!BENodeP,!BackEnd);
+// BENodeP BEGuardNode(BENodeP cond,BENodeDefP thenNodeDefs,BEStrictNodeIdP thenStricts,BENodeP then,BENodeDefP elseNodeDefs,BEStrictNodeIdP elseStricts,BENodeP elsje);
+BESelectorNode :: !BESelectorKind !BESymbolP !BEArgP !BackEnd -> (!BENodeP,!BackEnd);
+// BENodeP BESelectorNode(BESelectorKind selectorKind,BESymbolP fieldSymbol,BEArgP args);
+BEUpdateNode :: !BEArgP !BackEnd -> (!BENodeP,!BackEnd);
+// BENodeP BEUpdateNode(BEArgP args);
+BENodeIdNode :: !BENodeIdP !BEArgP !BackEnd -> (!BENodeP,!BackEnd);
+// BENodeP BENodeIdNode(BENodeIdP nodeId,BEArgP args);
+BENoArgs :: !BackEnd -> (!BEArgP,!BackEnd);
+// BEArgP BENoArgs();
+BEArgs :: !BENodeP !BEArgP !BackEnd -> (!BEArgP,!BackEnd);
+// BEArgP BEArgs(BENodeP node,BEArgP nextArgs);
+BERuleAlt :: !Int !BENodeDefP !BENodeP !BENodeDefP !BEStrictNodeIdP !BENodeP !BackEnd -> (!BERuleAltP,!BackEnd);
+// BERuleAltP BERuleAlt(int line,BENodeDefP lhsDefs,BENodeP lhs,BENodeDefP rhsDefs,BEStrictNodeIdP lhsStrictNodeIds,BENodeP rhs);
+BERuleAlts :: !BERuleAltP !BERuleAltP !BackEnd -> (!BERuleAltP,!BackEnd);
+// BERuleAltP BERuleAlts(BERuleAltP alt,BERuleAltP alts);
+BENoRuleAlts :: !BackEnd -> (!BERuleAltP,!BackEnd);
+// BERuleAltP BENoRuleAlts();
+BEDeclareNodeId :: !Int !Int !String !BackEnd -> BackEnd;
+// void BEDeclareNodeId(int sequenceNumber,int lhsOrRhs,CleanString name);
+BENodeId :: !Int !BackEnd -> (!BENodeIdP,!BackEnd);
+// BENodeIdP BENodeId(int sequenceNumber);
+BEWildCardNodeId :: !BackEnd -> (!BENodeIdP,!BackEnd);
+// BENodeIdP BEWildCardNodeId();
+BENodeDef :: !Int !BENodeP !BackEnd -> (!BENodeDefP,!BackEnd);
+// BENodeDefP BENodeDef(int sequenceNumber,BENodeP node);
+BENoNodeDefs :: !BackEnd -> (!BENodeDefP,!BackEnd);
+// BENodeDefP BENoNodeDefs();
+BENodeDefs :: !BENodeDefP !BENodeDefP !BackEnd -> (!BENodeDefP,!BackEnd);
+// BENodeDefP BENodeDefs(BENodeDefP nodeDef,BENodeDefP nodeDefs);
+BEStrictNodeId :: !BENodeIdP !BackEnd -> (!BEStrictNodeIdP,!BackEnd);
+// BEStrictNodeIdP BEStrictNodeId(BENodeIdP nodeId);
+BENoStrictNodeIds :: !BackEnd -> (!BEStrictNodeIdP,!BackEnd);
+// BEStrictNodeIdP BENoStrictNodeIds();
+BEStrictNodeIds :: !BEStrictNodeIdP !BEStrictNodeIdP !BackEnd -> (!BEStrictNodeIdP,!BackEnd);
+// BEStrictNodeIdP BEStrictNodeIds(BEStrictNodeIdP strictNodeId,BEStrictNodeIdP strictNodeIds);
+BERule :: !Int !Int !BETypeAltP !BERuleAltP !BackEnd -> (!BEImpRuleP,!BackEnd);
+// BEImpRuleP BERule(int functionIndex,int isCaf,BETypeAltP type,BERuleAltP alts);
+BEDeclareRuleType :: !Int !Int !String !BackEnd -> BackEnd;
+// void BEDeclareRuleType(int functionIndex,int moduleIndex,CleanString name);
+BEDefineRuleType :: !Int !Int !BETypeAltP !BackEnd -> BackEnd;
+// void BEDefineRuleType(int functionIndex,int moduleIndex,BETypeAltP typeAlt);
+BEAdjustArrayFunction :: !BEArrayFunKind !Int !Int !BackEnd -> BackEnd;
+// void BEAdjustArrayFunction(BEArrayFunKind arrayFunKind,int functionIndex,int moduleIndex);
+BENoRules :: !BackEnd -> (!BEImpRuleP,!BackEnd);
+// BEImpRuleP BENoRules();
+BERules :: !BEImpRuleP !BEImpRuleP !BackEnd -> (!BEImpRuleP,!BackEnd);
+// BEImpRuleP BERules(BEImpRuleP rule,BEImpRuleP rules);
+BETypes :: !BETypeP !BETypeP !BackEnd -> (!BETypeP,!BackEnd);
+// BETypeP BETypes(BETypeP type,BETypeP types);
+BENoTypes :: !BackEnd -> (!BETypeP,!BackEnd);
+// BETypeP BENoTypes();
+BEFlatType :: !BESymbolP !BETypeVarListP !BackEnd -> (!BEFlatTypeP,!BackEnd);
+// BEFlatTypeP BEFlatType(BESymbolP symbol,BETypeVarListP arguments);
+BEAlgebraicType :: !BEFlatTypeP !BEConstructorListP !BackEnd -> BackEnd;
+// void BEAlgebraicType(BEFlatTypeP lhs,BEConstructorListP constructors);
+BERecordType :: !Int !BEFlatTypeP !BETypeNodeP !BEFieldListP !BackEnd -> BackEnd;
+// void BERecordType(int moduleIndex,BEFlatTypeP lhs,BETypeNodeP constructorType,BEFieldListP fields);
+BEAbsType :: !BEFlatTypeP !BackEnd -> BackEnd;
+// void BEAbsType(BEFlatTypeP lhs);
+BEConstructors :: !BEConstructorListP !BEConstructorListP !BackEnd -> (!BEConstructorListP,!BackEnd);
+// BEConstructorListP BEConstructors(BEConstructorListP constructor,BEConstructorListP constructors);
+BENoConstructors :: !BackEnd -> (!BEConstructorListP,!BackEnd);
+// BEConstructorListP BENoConstructors();
+BEConstructor :: !BETypeNodeP !BackEnd -> (!BEConstructorListP,!BackEnd);
+// BEConstructorListP BEConstructor(BETypeNodeP type);
+BEDeclareField :: !Int !Int !String !BackEnd -> BackEnd;
+// void BEDeclareField(int fieldIndex,int moduleIndex,CleanString name);
+BEField :: !Int !Int !BETypeNodeP !BackEnd -> (!BEFieldListP,!BackEnd);
+// BEFieldListP BEField(int fieldIndex,int moduleIndex,BETypeNodeP type);
+BEFields :: !BEFieldListP !BEFieldListP !BackEnd -> (!BEFieldListP,!BackEnd);
+// BEFieldListP BEFields(BEFieldListP field,BEFieldListP fields);
+BENoFields :: !BackEnd -> (!BEFieldListP,!BackEnd);
+// BEFieldListP BENoFields();
+BEDeclareConstructor :: !Int !Int !String !BackEnd -> BackEnd;
+// void BEDeclareConstructor(int constructorIndex,int moduleIndex,CleanString name);
+BETypeVar :: !String !BackEnd -> (!BETypeVarP,!BackEnd);
+// BETypeVarP BETypeVar(CleanString name);
+BEDeclareType :: !Int !Int !String !BackEnd -> BackEnd;
+// void BEDeclareType(int typeIndex,int moduleIndex,CleanString name);
+BEDeclareFunction :: !String !Int !Int !Int !BackEnd -> BackEnd;
+// void BEDeclareFunction(CleanString name,int arity,int functionIndex,int ancestor);
+BECodeAlt :: !Int !BENodeDefP !BENodeP !BECodeBlockP !BackEnd -> (!BERuleAltP,!BackEnd);
+// BERuleAltP BECodeAlt(int line,BENodeDefP lhsDefs,BENodeP lhs,BECodeBlockP codeBlock);
+BEString :: !String !BackEnd -> (!BEStringListP,!BackEnd);
+// BEStringListP BEString(CleanString cleanString);
+BEStrings :: !BEStringListP !BEStringListP !BackEnd -> (!BEStringListP,!BackEnd);
+// BEStringListP BEStrings(BEStringListP string,BEStringListP strings);
+BENoStrings :: !BackEnd -> (!BEStringListP,!BackEnd);
+// BEStringListP BENoStrings();
+BECodeParameter :: !String !BENodeIdP !BackEnd -> (!BECodeParameterP,!BackEnd);
+// BECodeParameterP BECodeParameter(CleanString location,BENodeIdP nodeId);
+BECodeParameters :: !BECodeParameterP !BECodeParameterP !BackEnd -> (!BECodeParameterP,!BackEnd);
+// BECodeParameterP BECodeParameters(BECodeParameterP parameter,BECodeParameterP parameters);
+BENoCodeParameters :: !BackEnd -> (!BECodeParameterP,!BackEnd);
+// BECodeParameterP BENoCodeParameters();
+BEAbcCodeBlock :: !Bool !BEStringListP !BackEnd -> (!BECodeBlockP,!BackEnd);
+// BECodeBlockP BEAbcCodeBlock(int inline,BEStringListP instructions);
+BEAnyCodeBlock :: !BECodeParameterP !BECodeParameterP !BEStringListP !BackEnd -> (!BECodeBlockP,!BackEnd);
+// BECodeBlockP BEAnyCodeBlock(BECodeParameterP inParams,BECodeParameterP outParams,BEStringListP instructions);
+BEDeclareIclModule :: !String !Int !Int !Int !Int !BackEnd -> BackEnd;
+// void BEDeclareIclModule(CleanString name,int nFunctions,int nTypes,int nConstructors,int nFields);
+BEDeclareDclModule :: !Int !String !Bool !Int !Int !Int !Int !BackEnd -> BackEnd;
+// void BEDeclareDclModule(int moduleIndex,CleanString name,int systemModule,int nFunctions,int nTypes,int nConstructors,int nFields);
+BEDeclarePredefinedModule :: !Int !Int !BackEnd -> BackEnd;
+// void BEDeclarePredefinedModule(int nTypes,int nConstructors);
+BEDefineRules :: !BEImpRuleP !BackEnd -> BackEnd;
+// void BEDefineRules(BEImpRuleP rules);
+BEGenerateCode :: !String !BackEnd -> (!Bool,!BackEnd);
+// int BEGenerateCode(CleanString outputFile);
+BEExportType :: !Int !Int !BackEnd -> BackEnd;
+// void BEExportType(int dclTypeIndex,int iclTypeIndex);
+BESwapTypes :: !Int !Int !BackEnd -> BackEnd;
+// void BESwapTypes(int frm,int to);
+BEExportConstructor :: !Int !Int !BackEnd -> BackEnd;
+// void BEExportConstructor(int dclConstructorIndex,int iclConstructorIndex);
+BEExportField :: !Int !Int !BackEnd -> BackEnd;
+// void BEExportField(int dclTypeIndex,int iclTypeIndex);
+BEExportFunction :: !Int !Int !BackEnd -> BackEnd;
+// void BEExportFunction(int dclFunctionIndex,int iclFunctionIndex);
+BEDefineImportedObjsAndLibs :: !BEStringListP !BEStringListP !BackEnd -> BackEnd;
+// void BEDefineImportedObjsAndLibs(BEStringListP objs,BEStringListP libs);
+BESetMainDclModuleN :: !Int !BackEnd -> BackEnd;
+// void BESetMainDclModuleN(int main_dcl_module_n_parameter);
+BEDeclareDynamicTypeSymbol :: !Int !Int !BackEnd -> BackEnd;
+// void BEDeclareDynamicTypeSymbol(int typeIndex,int moduleIndex);
+BEDynamicTempTypeSymbol :: !BackEnd -> (!BESymbolP,!BackEnd);
+// BESymbolP BEDynamicTempTypeSymbol();
+kBEVersionCurrent:==0x02000206;
+kBEVersionOldestDefinition:==0x02000204;
+kBEVersionOldestImplementation:==0x02000206;
+kBEDebug:==1;
+kPredefinedModuleIndex:==1;
+BENoAnnot:==0;
+BEStrictAnnot:==1;
+BENoUniAttr:==0;
+BENotUniqueAttr:==1;
+BEUniqueAttr:==2;
+BEExistsAttr:==3;
+BEUniqueVariable:==4;
+BEFirstUniVarNumber:==5;
+BEIntType:==0;
+BEBoolType:==1;
+BECharType:==2;
+BERealType:==3;
+BEFileType:==4;
+BEStringType:==5;
+BEWorldType:==6;
+BEProcIdType:==7;
+BERedIdType:==8;
+BENrOfBasicTypes:==9;
+BEIntDenot:==10;
+BEBoolDenot:==11;
+BECharDenot:==12;
+BERealDenot:==13;
+BENrOfBasicDenots:==14;
+BEStringDenot:==15;
+BEFunType:==16;
+BEArrayType:==17;
+BEStrictArrayType:==18;
+BEUnboxedArrayType:==19;
+BEListType:==20;
+BETupleType:==21;
+BEEmptyType:==22;
+BEDynamicType:==23;
+BENrOfPredefTypes:==24;
+BETupleSymb:==25;
+BEConsSymb:==26;
+BENilSymb:==27;
+BEApplySymb:==28;
+BEIfSymb:==29;
+BEFailSymb:==30;
+BEAllSymb:==31;
+BESelectSymb:==32;
+BENrOfPredefFunsOrConses:==33;
+BEDefinition:==34;
+BENewSymbol:==35;
+BEInstanceSymb:==36;
+BEEmptySymbol:==37;
+BEFieldSymbolList:==38;
+BEErroneousSymb:==39;
+BECreateArrayFun:==0;
+BEArraySelectFun:==1;
+BEUnqArraySelectFun:==2;
+BEArrayUpdateFun:==3;
+BEArrayReplaceFun:==4;
+BEArraySizeFun:==5;
+BEUnqArraySizeFun:==6;
+BE_CreateArrayFun:==7;
+BE_UnqArraySelectFun:==8;
+BE_UnqArraySelectNextFun:==9;
+BE_UnqArraySelectLastFun:==10;
+BE_ArrayUpdateFun:==11;
+BENoArrayFun:==12;
+BESelectorDummy:==0;
+BESelector:==1;
+BESelector_U:==2;
+BESelector_F:==3;
+BESelector_L:==4;
+BESelector_N:==5;
+BEUpdateDummy:==0;
+BEUpdate:==1;
+BEUpdate_U:==2;
+BELhsNodeId:==0;
+BERhsNodeId:==1;
+BEIsNotACaf:==0;
+BEIsACaf:==1;
diff --git a/backend/backend.icl b/backend/backend.icl
new file mode 100644
index 0000000..67c4c87
--- /dev/null
+++ b/backend/backend.icl
@@ -0,0 +1,689 @@
+implementation module backend;
+
+//1.3
+from StdString import String;
+//3.1
+
+:: *UWorld :== Int;
+:: *BackEnd :== Int;
+:: BESymbolP :== Int;
+:: BETypeNodeP :== Int;
+:: BETypeArgP :== Int;
+:: BETypeAltP :== Int;
+:: BENodeP :== Int;
+:: BEArgP :== Int;
+:: BERuleAltP :== Int;
+:: BEImpRuleP :== Int;
+:: BETypeP :== Int;
+:: BEFlatTypeP :== Int;
+:: BETypeVarP :== Int;
+:: BETypeVarListP :== Int;
+:: BEConstructorListP :== Int;
+:: BEFieldListP :== Int;
+:: BENodeIdP :== Int;
+:: BENodeDefP :== Int;
+:: BEStrictNodeIdP :== Int;
+:: BECodeParameterP :== Int;
+:: BECodeBlockP :== Int;
+:: BEStringListP :== Int;
+:: BEAnnotation :== Int;
+:: BEAttribution :== Int;
+:: BESymbKind :== Int;
+:: BEArrayFunKind :== Int;
+:: BESelectorKind :== Int;
+:: BEUpdateKind :== Int;
+
+BEGetVersion :: (!Int,!Int,!Int);
+BEGetVersion = code {
+ ccall BEGetVersion ":VIII"
+};
+// void BEGetVersion(int* current,int* oldestDefinition,int* oldestImplementation);
+
+BEInit :: !Int !UWorld -> (!BackEnd,!UWorld);
+BEInit a0 a1 = code {
+ ccall BEInit "I:I:I"
+};
+// BackEnd BEInit(int argc);
+
+BEFree :: !BackEnd !UWorld -> UWorld;
+BEFree a0 a1 = code {
+ ccall BEFree "I:V:I"
+};
+// void BEFree(BackEnd backEnd);
+
+BEArg :: !String !BackEnd -> BackEnd;
+BEArg a0 a1 = code {
+ ccall BEArg "S:V:I"
+};
+// void BEArg(CleanString arg);
+
+BEDeclareModules :: !Int !BackEnd -> BackEnd;
+BEDeclareModules a0 a1 = code {
+ ccall BEDeclareModules "I:V:I"
+};
+// void BEDeclareModules(int nModules);
+
+BEDeclarePredefinedSymbols :: !Int !Int !BackEnd -> BackEnd;
+BEDeclarePredefinedSymbols a0 a1 a2 = code {
+ ccall BEDeclarePredefinedSymbols "II:V:I"
+};
+// void BEDeclarePredefinedSymbols(int nConstructors,int nTypes);
+
+BESpecialArrayFunctionSymbol :: !BEArrayFunKind !Int !Int !BackEnd -> (!BESymbolP,!BackEnd);
+BESpecialArrayFunctionSymbol a0 a1 a2 a3 = code {
+ ccall BESpecialArrayFunctionSymbol "III:I:I"
+};
+// BESymbolP BESpecialArrayFunctionSymbol(BEArrayFunKind arrayFunKind,int functionIndex,int moduleIndex);
+
+BEDictionarySelectFunSymbol :: !BackEnd -> (!BESymbolP,!BackEnd);
+BEDictionarySelectFunSymbol a0 = code {
+ ccall BEDictionarySelectFunSymbol ":I:I"
+};
+// BESymbolP BEDictionarySelectFunSymbol();
+
+BEDictionaryUpdateFunSymbol :: !BackEnd -> (!BESymbolP,!BackEnd);
+BEDictionaryUpdateFunSymbol a0 = code {
+ ccall BEDictionaryUpdateFunSymbol ":I:I"
+};
+// BESymbolP BEDictionaryUpdateFunSymbol();
+
+BEFunctionSymbol :: !Int !Int !BackEnd -> (!BESymbolP,!BackEnd);
+BEFunctionSymbol a0 a1 a2 = code {
+ ccall BEFunctionSymbol "II:I:I"
+};
+// BESymbolP BEFunctionSymbol(int functionIndex,int moduleIndex);
+
+BEConstructorSymbol :: !Int !Int !BackEnd -> (!BESymbolP,!BackEnd);
+BEConstructorSymbol a0 a1 a2 = code {
+ ccall BEConstructorSymbol "II:I:I"
+};
+// BESymbolP BEConstructorSymbol(int constructorIndex,int moduleIndex);
+
+BEFieldSymbol :: !Int !Int !BackEnd -> (!BESymbolP,!BackEnd);
+BEFieldSymbol a0 a1 a2 = code {
+ ccall BEFieldSymbol "II:I:I"
+};
+// BESymbolP BEFieldSymbol(int fieldIndex,int moduleIndex);
+
+BETypeSymbol :: !Int !Int !BackEnd -> (!BESymbolP,!BackEnd);
+BETypeSymbol a0 a1 a2 = code {
+ ccall BETypeSymbol "II:I:I"
+};
+// BESymbolP BETypeSymbol(int typeIndex,int moduleIndex);
+
+BEDontCareDefinitionSymbol :: !BackEnd -> (!BESymbolP,!BackEnd);
+BEDontCareDefinitionSymbol a0 = code {
+ ccall BEDontCareDefinitionSymbol ":I:I"
+};
+// BESymbolP BEDontCareDefinitionSymbol();
+
+BEBoolSymbol :: !Bool !BackEnd -> (!BESymbolP,!BackEnd);
+BEBoolSymbol a0 a1 = code {
+ ccall BEBoolSymbol "I:I:I"
+};
+// BESymbolP BEBoolSymbol(int value);
+
+BELiteralSymbol :: !BESymbKind !String !BackEnd -> (!BESymbolP,!BackEnd);
+BELiteralSymbol a0 a1 a2 = code {
+ ccall BELiteralSymbol "IS:I:I"
+};
+// BESymbolP BELiteralSymbol(BESymbKind kind,CleanString value);
+
+BEPredefineConstructorSymbol :: !Int !Int !Int !BESymbKind !BackEnd -> BackEnd;
+BEPredefineConstructorSymbol a0 a1 a2 a3 a4 = code {
+ ccall BEPredefineConstructorSymbol "IIII:V:I"
+};
+// void BEPredefineConstructorSymbol(int arity,int constructorIndex,int moduleIndex,BESymbKind symbolKind);
+
+BEPredefineTypeSymbol :: !Int !Int !Int !BESymbKind !BackEnd -> BackEnd;
+BEPredefineTypeSymbol a0 a1 a2 a3 a4 = code {
+ ccall BEPredefineTypeSymbol "IIII:V:I"
+};
+// void BEPredefineTypeSymbol(int arity,int typeIndex,int moduleIndex,BESymbKind symbolKind);
+
+BEBasicSymbol :: !Int !BackEnd -> (!BESymbolP,!BackEnd);
+BEBasicSymbol a0 a1 = code {
+ ccall BEBasicSymbol "I:I:I"
+};
+// BESymbolP BEBasicSymbol(BESymbKind kind);
+
+BEVarTypeNode :: !String !BackEnd -> (!BETypeNodeP,!BackEnd);
+BEVarTypeNode a0 a1 = code {
+ ccall BEVarTypeNode "S:I:I"
+};
+// BETypeNodeP BEVarTypeNode(CleanString name);
+
+BETypeVars :: !BETypeVarP !BETypeVarListP !BackEnd -> (!BETypeVarListP,!BackEnd);
+BETypeVars a0 a1 a2 = code {
+ ccall BETypeVars "II:I:I"
+};
+// BETypeVarListP BETypeVars(BETypeVarP typeVar,BETypeVarListP typeVarList);
+
+BENoTypeVars :: !BackEnd -> (!BETypeVarListP,!BackEnd);
+BENoTypeVars a0 = code {
+ ccall BENoTypeVars ":I:I"
+};
+// BETypeVarListP BENoTypeVars();
+
+BENormalTypeNode :: !BESymbolP !BETypeArgP !BackEnd -> (!BETypeNodeP,!BackEnd);
+BENormalTypeNode a0 a1 a2 = code {
+ ccall BENormalTypeNode "II:I:I"
+};
+// BETypeNodeP BENormalTypeNode(BESymbolP symbol,BETypeArgP args);
+
+BEAnnotateTypeNode :: !BEAnnotation !BETypeNodeP !BackEnd -> (!BETypeNodeP,!BackEnd);
+BEAnnotateTypeNode a0 a1 a2 = code {
+ ccall BEAnnotateTypeNode "II:I:I"
+};
+// BETypeNodeP BEAnnotateTypeNode(BEAnnotation annotation,BETypeNodeP typeNode);
+
+BEAttributeTypeNode :: !BEAttribution !BETypeNodeP !BackEnd -> (!BETypeNodeP,!BackEnd);
+BEAttributeTypeNode a0 a1 a2 = code {
+ ccall BEAttributeTypeNode "II:I:I"
+};
+// BETypeNodeP BEAttributeTypeNode(BEAttribution attribution,BETypeNodeP typeNode);
+
+BENoTypeArgs :: !BackEnd -> (!BETypeArgP,!BackEnd);
+BENoTypeArgs a0 = code {
+ ccall BENoTypeArgs ":I:I"
+};
+// BETypeArgP BENoTypeArgs();
+
+BETypeArgs :: !BETypeNodeP !BETypeArgP !BackEnd -> (!BETypeArgP,!BackEnd);
+BETypeArgs a0 a1 a2 = code {
+ ccall BETypeArgs "II:I:I"
+};
+// BETypeArgP BETypeArgs(BETypeNodeP node,BETypeArgP nextArgs);
+
+BETypeAlt :: !BETypeNodeP !BETypeNodeP !BackEnd -> (!BETypeAltP,!BackEnd);
+BETypeAlt a0 a1 a2 = code {
+ ccall BETypeAlt "II:I:I"
+};
+// BETypeAltP BETypeAlt(BETypeNodeP lhs,BETypeNodeP rhs);
+
+BENormalNode :: !BESymbolP !BEArgP !BackEnd -> (!BENodeP,!BackEnd);
+BENormalNode a0 a1 a2 = code {
+ ccall BENormalNode "II:I:I"
+};
+// BENodeP BENormalNode(BESymbolP symbol,BEArgP args);
+
+BEMatchNode :: !Int !BESymbolP !BENodeP !BackEnd -> (!BENodeP,!BackEnd);
+BEMatchNode a0 a1 a2 a3 = code {
+ ccall BEMatchNode "III:I:I"
+};
+// BENodeP BEMatchNode(int arity,BESymbolP symbol,BENodeP node);
+
+BETupleSelectNode :: !Int !Int !BENodeP !BackEnd -> (!BENodeP,!BackEnd);
+BETupleSelectNode a0 a1 a2 a3 = code {
+ ccall BETupleSelectNode "III:I:I"
+};
+// BENodeP BETupleSelectNode(int arity,int index,BENodeP node);
+
+BEIfNode :: !BENodeP !BENodeP !BENodeP !BackEnd -> (!BENodeP,!BackEnd);
+BEIfNode a0 a1 a2 a3 = code {
+ ccall BEIfNode "III:I:I"
+};
+// BENodeP BEIfNode(BENodeP cond,BENodeP then,BENodeP elsje);
+
+BEGuardNode :: !BENodeP !BENodeDefP !BEStrictNodeIdP !BENodeP !BENodeDefP !BEStrictNodeIdP !BENodeP !BackEnd -> (!BENodeP,!BackEnd);
+BEGuardNode a0 a1 a2 a3 a4 a5 a6 a7 = code {
+ ccall BEGuardNode "IIIIIII:I:I"
+};
+// BENodeP BEGuardNode(BENodeP cond,BENodeDefP thenNodeDefs,BEStrictNodeIdP thenStricts,BENodeP then,BENodeDefP elseNodeDefs,BEStrictNodeIdP elseStricts,BENodeP elsje);
+
+BESelectorNode :: !BESelectorKind !BESymbolP !BEArgP !BackEnd -> (!BENodeP,!BackEnd);
+BESelectorNode a0 a1 a2 a3 = code {
+ ccall BESelectorNode "III:I:I"
+};
+// BENodeP BESelectorNode(BESelectorKind selectorKind,BESymbolP fieldSymbol,BEArgP args);
+
+BEUpdateNode :: !BEArgP !BackEnd -> (!BENodeP,!BackEnd);
+BEUpdateNode a0 a1 = code {
+ ccall BEUpdateNode "I:I:I"
+};
+// BENodeP BEUpdateNode(BEArgP args);
+
+BENodeIdNode :: !BENodeIdP !BEArgP !BackEnd -> (!BENodeP,!BackEnd);
+BENodeIdNode a0 a1 a2 = code {
+ ccall BENodeIdNode "II:I:I"
+};
+// BENodeP BENodeIdNode(BENodeIdP nodeId,BEArgP args);
+
+BENoArgs :: !BackEnd -> (!BEArgP,!BackEnd);
+BENoArgs a0 = code {
+ ccall BENoArgs ":I:I"
+};
+// BEArgP BENoArgs();
+
+BEArgs :: !BENodeP !BEArgP !BackEnd -> (!BEArgP,!BackEnd);
+BEArgs a0 a1 a2 = code {
+ ccall BEArgs "II:I:I"
+};
+// BEArgP BEArgs(BENodeP node,BEArgP nextArgs);
+
+BERuleAlt :: !Int !BENodeDefP !BENodeP !BENodeDefP !BEStrictNodeIdP !BENodeP !BackEnd -> (!BERuleAltP,!BackEnd);
+BERuleAlt a0 a1 a2 a3 a4 a5 a6 = code {
+ ccall BERuleAlt "IIIIII:I:I"
+};
+// BERuleAltP BERuleAlt(int line,BENodeDefP lhsDefs,BENodeP lhs,BENodeDefP rhsDefs,BEStrictNodeIdP lhsStrictNodeIds,BENodeP rhs);
+
+BERuleAlts :: !BERuleAltP !BERuleAltP !BackEnd -> (!BERuleAltP,!BackEnd);
+BERuleAlts a0 a1 a2 = code {
+ ccall BERuleAlts "II:I:I"
+};
+// BERuleAltP BERuleAlts(BERuleAltP alt,BERuleAltP alts);
+
+BENoRuleAlts :: !BackEnd -> (!BERuleAltP,!BackEnd);
+BENoRuleAlts a0 = code {
+ ccall BENoRuleAlts ":I:I"
+};
+// BERuleAltP BENoRuleAlts();
+
+BEDeclareNodeId :: !Int !Int !String !BackEnd -> BackEnd;
+BEDeclareNodeId a0 a1 a2 a3 = code {
+ ccall BEDeclareNodeId "IIS:V:I"
+};
+// void BEDeclareNodeId(int sequenceNumber,int lhsOrRhs,CleanString name);
+
+BENodeId :: !Int !BackEnd -> (!BENodeIdP,!BackEnd);
+BENodeId a0 a1 = code {
+ ccall BENodeId "I:I:I"
+};
+// BENodeIdP BENodeId(int sequenceNumber);
+
+BEWildCardNodeId :: !BackEnd -> (!BENodeIdP,!BackEnd);
+BEWildCardNodeId a0 = code {
+ ccall BEWildCardNodeId ":I:I"
+};
+// BENodeIdP BEWildCardNodeId();
+
+BENodeDef :: !Int !BENodeP !BackEnd -> (!BENodeDefP,!BackEnd);
+BENodeDef a0 a1 a2 = code {
+ ccall BENodeDef "II:I:I"
+};
+// BENodeDefP BENodeDef(int sequenceNumber,BENodeP node);
+
+BENoNodeDefs :: !BackEnd -> (!BENodeDefP,!BackEnd);
+BENoNodeDefs a0 = code {
+ ccall BENoNodeDefs ":I:I"
+};
+// BENodeDefP BENoNodeDefs();
+
+BENodeDefs :: !BENodeDefP !BENodeDefP !BackEnd -> (!BENodeDefP,!BackEnd);
+BENodeDefs a0 a1 a2 = code {
+ ccall BENodeDefs "II:I:I"
+};
+// BENodeDefP BENodeDefs(BENodeDefP nodeDef,BENodeDefP nodeDefs);
+
+BEStrictNodeId :: !BENodeIdP !BackEnd -> (!BEStrictNodeIdP,!BackEnd);
+BEStrictNodeId a0 a1 = code {
+ ccall BEStrictNodeId "I:I:I"
+};
+// BEStrictNodeIdP BEStrictNodeId(BENodeIdP nodeId);
+
+BENoStrictNodeIds :: !BackEnd -> (!BEStrictNodeIdP,!BackEnd);
+BENoStrictNodeIds a0 = code {
+ ccall BENoStrictNodeIds ":I:I"
+};
+// BEStrictNodeIdP BENoStrictNodeIds();
+
+BEStrictNodeIds :: !BEStrictNodeIdP !BEStrictNodeIdP !BackEnd -> (!BEStrictNodeIdP,!BackEnd);
+BEStrictNodeIds a0 a1 a2 = code {
+ ccall BEStrictNodeIds "II:I:I"
+};
+// BEStrictNodeIdP BEStrictNodeIds(BEStrictNodeIdP strictNodeId,BEStrictNodeIdP strictNodeIds);
+
+BERule :: !Int !Int !BETypeAltP !BERuleAltP !BackEnd -> (!BEImpRuleP,!BackEnd);
+BERule a0 a1 a2 a3 a4 = code {
+ ccall BERule "IIII:I:I"
+};
+// BEImpRuleP BERule(int functionIndex,int isCaf,BETypeAltP type,BERuleAltP alts);
+
+BEDeclareRuleType :: !Int !Int !String !BackEnd -> BackEnd;
+BEDeclareRuleType a0 a1 a2 a3 = code {
+ ccall BEDeclareRuleType "IIS:V:I"
+};
+// void BEDeclareRuleType(int functionIndex,int moduleIndex,CleanString name);
+
+BEDefineRuleType :: !Int !Int !BETypeAltP !BackEnd -> BackEnd;
+BEDefineRuleType a0 a1 a2 a3 = code {
+ ccall BEDefineRuleType "III:V:I"
+};
+// void BEDefineRuleType(int functionIndex,int moduleIndex,BETypeAltP typeAlt);
+
+BEAdjustArrayFunction :: !BEArrayFunKind !Int !Int !BackEnd -> BackEnd;
+BEAdjustArrayFunction a0 a1 a2 a3 = code {
+ ccall BEAdjustArrayFunction "III:V:I"
+};
+// void BEAdjustArrayFunction(BEArrayFunKind arrayFunKind,int functionIndex,int moduleIndex);
+
+BENoRules :: !BackEnd -> (!BEImpRuleP,!BackEnd);
+BENoRules a0 = code {
+ ccall BENoRules ":I:I"
+};
+// BEImpRuleP BENoRules();
+
+BERules :: !BEImpRuleP !BEImpRuleP !BackEnd -> (!BEImpRuleP,!BackEnd);
+BERules a0 a1 a2 = code {
+ ccall BERules "II:I:I"
+};
+// BEImpRuleP BERules(BEImpRuleP rule,BEImpRuleP rules);
+
+BETypes :: !BETypeP !BETypeP !BackEnd -> (!BETypeP,!BackEnd);
+BETypes a0 a1 a2 = code {
+ ccall BETypes "II:I:I"
+};
+// BETypeP BETypes(BETypeP type,BETypeP types);
+
+BENoTypes :: !BackEnd -> (!BETypeP,!BackEnd);
+BENoTypes a0 = code {
+ ccall BENoTypes ":I:I"
+};
+// BETypeP BENoTypes();
+
+BEFlatType :: !BESymbolP !BETypeVarListP !BackEnd -> (!BEFlatTypeP,!BackEnd);
+BEFlatType a0 a1 a2 = code {
+ ccall BEFlatType "II:I:I"
+};
+// BEFlatTypeP BEFlatType(BESymbolP symbol,BETypeVarListP arguments);
+
+BEAlgebraicType :: !BEFlatTypeP !BEConstructorListP !BackEnd -> BackEnd;
+BEAlgebraicType a0 a1 a2 = code {
+ ccall BEAlgebraicType "II:V:I"
+};
+// void BEAlgebraicType(BEFlatTypeP lhs,BEConstructorListP constructors);
+
+BERecordType :: !Int !BEFlatTypeP !BETypeNodeP !BEFieldListP !BackEnd -> BackEnd;
+BERecordType a0 a1 a2 a3 a4 = code {
+ ccall BERecordType "IIII:V:I"
+};
+// void BERecordType(int moduleIndex,BEFlatTypeP lhs,BETypeNodeP constructorType,BEFieldListP fields);
+
+BEAbsType :: !BEFlatTypeP !BackEnd -> BackEnd;
+BEAbsType a0 a1 = code {
+ ccall BEAbsType "I:V:I"
+};
+// void BEAbsType(BEFlatTypeP lhs);
+
+BEConstructors :: !BEConstructorListP !BEConstructorListP !BackEnd -> (!BEConstructorListP,!BackEnd);
+BEConstructors a0 a1 a2 = code {
+ ccall BEConstructors "II:I:I"
+};
+// BEConstructorListP BEConstructors(BEConstructorListP constructor,BEConstructorListP constructors);
+
+BENoConstructors :: !BackEnd -> (!BEConstructorListP,!BackEnd);
+BENoConstructors a0 = code {
+ ccall BENoConstructors ":I:I"
+};
+// BEConstructorListP BENoConstructors();
+
+BEConstructor :: !BETypeNodeP !BackEnd -> (!BEConstructorListP,!BackEnd);
+BEConstructor a0 a1 = code {
+ ccall BEConstructor "I:I:I"
+};
+// BEConstructorListP BEConstructor(BETypeNodeP type);
+
+BEDeclareField :: !Int !Int !String !BackEnd -> BackEnd;
+BEDeclareField a0 a1 a2 a3 = code {
+ ccall BEDeclareField "IIS:V:I"
+};
+// void BEDeclareField(int fieldIndex,int moduleIndex,CleanString name);
+
+BEField :: !Int !Int !BETypeNodeP !BackEnd -> (!BEFieldListP,!BackEnd);
+BEField a0 a1 a2 a3 = code {
+ ccall BEField "III:I:I"
+};
+// BEFieldListP BEField(int fieldIndex,int moduleIndex,BETypeNodeP type);
+
+BEFields :: !BEFieldListP !BEFieldListP !BackEnd -> (!BEFieldListP,!BackEnd);
+BEFields a0 a1 a2 = code {
+ ccall BEFields "II:I:I"
+};
+// BEFieldListP BEFields(BEFieldListP field,BEFieldListP fields);
+
+BENoFields :: !BackEnd -> (!BEFieldListP,!BackEnd);
+BENoFields a0 = code {
+ ccall BENoFields ":I:I"
+};
+// BEFieldListP BENoFields();
+
+BEDeclareConstructor :: !Int !Int !String !BackEnd -> BackEnd;
+BEDeclareConstructor a0 a1 a2 a3 = code {
+ ccall BEDeclareConstructor "IIS:V:I"
+};
+// void BEDeclareConstructor(int constructorIndex,int moduleIndex,CleanString name);
+
+BETypeVar :: !String !BackEnd -> (!BETypeVarP,!BackEnd);
+BETypeVar a0 a1 = code {
+ ccall BETypeVar "S:I:I"
+};
+// BETypeVarP BETypeVar(CleanString name);
+
+BEDeclareType :: !Int !Int !String !BackEnd -> BackEnd;
+BEDeclareType a0 a1 a2 a3 = code {
+ ccall BEDeclareType "IIS:V:I"
+};
+// void BEDeclareType(int typeIndex,int moduleIndex,CleanString name);
+
+BEDeclareFunction :: !String !Int !Int !Int !BackEnd -> BackEnd;
+BEDeclareFunction a0 a1 a2 a3 a4 = code {
+ ccall BEDeclareFunction "SIII:V:I"
+};
+// void BEDeclareFunction(CleanString name,int arity,int functionIndex,int ancestor);
+
+BECodeAlt :: !Int !BENodeDefP !BENodeP !BECodeBlockP !BackEnd -> (!BERuleAltP,!BackEnd);
+BECodeAlt a0 a1 a2 a3 a4 = code {
+ ccall BECodeAlt "IIII:I:I"
+};
+// BERuleAltP BECodeAlt(int line,BENodeDefP lhsDefs,BENodeP lhs,BECodeBlockP codeBlock);
+
+BEString :: !String !BackEnd -> (!BEStringListP,!BackEnd);
+BEString a0 a1 = code {
+ ccall BEString "S:I:I"
+};
+// BEStringListP BEString(CleanString cleanString);
+
+BEStrings :: !BEStringListP !BEStringListP !BackEnd -> (!BEStringListP,!BackEnd);
+BEStrings a0 a1 a2 = code {
+ ccall BEStrings "II:I:I"
+};
+// BEStringListP BEStrings(BEStringListP string,BEStringListP strings);
+
+BENoStrings :: !BackEnd -> (!BEStringListP,!BackEnd);
+BENoStrings a0 = code {
+ ccall BENoStrings ":I:I"
+};
+// BEStringListP BENoStrings();
+
+BECodeParameter :: !String !BENodeIdP !BackEnd -> (!BECodeParameterP,!BackEnd);
+BECodeParameter a0 a1 a2 = code {
+ ccall BECodeParameter "SI:I:I"
+};
+// BECodeParameterP BECodeParameter(CleanString location,BENodeIdP nodeId);
+
+BECodeParameters :: !BECodeParameterP !BECodeParameterP !BackEnd -> (!BECodeParameterP,!BackEnd);
+BECodeParameters a0 a1 a2 = code {
+ ccall BECodeParameters "II:I:I"
+};
+// BECodeParameterP BECodeParameters(BECodeParameterP parameter,BECodeParameterP parameters);
+
+BENoCodeParameters :: !BackEnd -> (!BECodeParameterP,!BackEnd);
+BENoCodeParameters a0 = code {
+ ccall BENoCodeParameters ":I:I"
+};
+// BECodeParameterP BENoCodeParameters();
+
+BEAbcCodeBlock :: !Bool !BEStringListP !BackEnd -> (!BECodeBlockP,!BackEnd);
+BEAbcCodeBlock a0 a1 a2 = code {
+ ccall BEAbcCodeBlock "II:I:I"
+};
+// BECodeBlockP BEAbcCodeBlock(int inline,BEStringListP instructions);
+
+BEAnyCodeBlock :: !BECodeParameterP !BECodeParameterP !BEStringListP !BackEnd -> (!BECodeBlockP,!BackEnd);
+BEAnyCodeBlock a0 a1 a2 a3 = code {
+ ccall BEAnyCodeBlock "III:I:I"
+};
+// BECodeBlockP BEAnyCodeBlock(BECodeParameterP inParams,BECodeParameterP outParams,BEStringListP instructions);
+
+BEDeclareIclModule :: !String !Int !Int !Int !Int !BackEnd -> BackEnd;
+BEDeclareIclModule a0 a1 a2 a3 a4 a5 = code {
+ ccall BEDeclareIclModule "SIIII:V:I"
+};
+// void BEDeclareIclModule(CleanString name,int nFunctions,int nTypes,int nConstructors,int nFields);
+
+BEDeclareDclModule :: !Int !String !Bool !Int !Int !Int !Int !BackEnd -> BackEnd;
+BEDeclareDclModule a0 a1 a2 a3 a4 a5 a6 a7 = code {
+ ccall BEDeclareDclModule "ISIIIII:V:I"
+};
+// void BEDeclareDclModule(int moduleIndex,CleanString name,int systemModule,int nFunctions,int nTypes,int nConstructors,int nFields);
+
+BEDeclarePredefinedModule :: !Int !Int !BackEnd -> BackEnd;
+BEDeclarePredefinedModule a0 a1 a2 = code {
+ ccall BEDeclarePredefinedModule "II:V:I"
+};
+// void BEDeclarePredefinedModule(int nTypes,int nConstructors);
+
+BEDefineRules :: !BEImpRuleP !BackEnd -> BackEnd;
+BEDefineRules a0 a1 = code {
+ ccall BEDefineRules "I:V:I"
+};
+// void BEDefineRules(BEImpRuleP rules);
+
+BEGenerateCode :: !String !BackEnd -> (!Bool,!BackEnd);
+BEGenerateCode a0 a1 = code {
+ ccall BEGenerateCode "S:I:I"
+};
+// int BEGenerateCode(CleanString outputFile);
+
+BEExportType :: !Int !Int !BackEnd -> BackEnd;
+BEExportType a0 a1 a2 = code {
+ ccall BEExportType "II:V:I"
+};
+// void BEExportType(int dclTypeIndex,int iclTypeIndex);
+
+BESwapTypes :: !Int !Int !BackEnd -> BackEnd;
+BESwapTypes a0 a1 a2 = code {
+ ccall BESwapTypes "II:V:I"
+};
+// void BESwapTypes(int frm,int to);
+
+BEExportConstructor :: !Int !Int !BackEnd -> BackEnd;
+BEExportConstructor a0 a1 a2 = code {
+ ccall BEExportConstructor "II:V:I"
+};
+// void BEExportConstructor(int dclConstructorIndex,int iclConstructorIndex);
+
+BEExportField :: !Int !Int !BackEnd -> BackEnd;
+BEExportField a0 a1 a2 = code {
+ ccall BEExportField "II:V:I"
+};
+// void BEExportField(int dclTypeIndex,int iclTypeIndex);
+
+BEExportFunction :: !Int !Int !BackEnd -> BackEnd;
+BEExportFunction a0 a1 a2 = code {
+ ccall BEExportFunction "II:V:I"
+};
+// void BEExportFunction(int dclFunctionIndex,int iclFunctionIndex);
+
+BEDefineImportedObjsAndLibs :: !BEStringListP !BEStringListP !BackEnd -> BackEnd;
+BEDefineImportedObjsAndLibs a0 a1 a2 = code {
+ ccall BEDefineImportedObjsAndLibs "II:V:I"
+};
+// void BEDefineImportedObjsAndLibs(BEStringListP objs,BEStringListP libs);
+
+BESetMainDclModuleN :: !Int !BackEnd -> BackEnd;
+BESetMainDclModuleN a0 a1 = code {
+ ccall BESetMainDclModuleN "I:V:I"
+};
+// void BESetMainDclModuleN(int main_dcl_module_n_parameter);
+
+BEDeclareDynamicTypeSymbol :: !Int !Int !BackEnd -> BackEnd;
+BEDeclareDynamicTypeSymbol a0 a1 a2 = code {
+ ccall BEDeclareDynamicTypeSymbol "II:V:I"
+};
+// void BEDeclareDynamicTypeSymbol(int typeIndex,int moduleIndex);
+
+BEDynamicTempTypeSymbol :: !BackEnd -> (!BESymbolP,!BackEnd);
+BEDynamicTempTypeSymbol a0 = code {
+ ccall BEDynamicTempTypeSymbol ":I:I"
+};
+// BESymbolP BEDynamicTempTypeSymbol();
+kBEVersionCurrent:==0x02000206;
+kBEVersionOldestDefinition:==0x02000204;
+kBEVersionOldestImplementation:==0x02000206;
+kBEDebug:==1;
+kPredefinedModuleIndex:==1;
+BENoAnnot:==0;
+BEStrictAnnot:==1;
+BENoUniAttr:==0;
+BENotUniqueAttr:==1;
+BEUniqueAttr:==2;
+BEExistsAttr:==3;
+BEUniqueVariable:==4;
+BEFirstUniVarNumber:==5;
+BEIntType:==0;
+BEBoolType:==1;
+BECharType:==2;
+BERealType:==3;
+BEFileType:==4;
+BEStringType:==5;
+BEWorldType:==6;
+BEProcIdType:==7;
+BERedIdType:==8;
+BENrOfBasicTypes:==9;
+BEIntDenot:==10;
+BEBoolDenot:==11;
+BECharDenot:==12;
+BERealDenot:==13;
+BENrOfBasicDenots:==14;
+BEStringDenot:==15;
+BEFunType:==16;
+BEArrayType:==17;
+BEStrictArrayType:==18;
+BEUnboxedArrayType:==19;
+BEListType:==20;
+BETupleType:==21;
+BEEmptyType:==22;
+BEDynamicType:==23;
+BENrOfPredefTypes:==24;
+BETupleSymb:==25;
+BEConsSymb:==26;
+BENilSymb:==27;
+BEApplySymb:==28;
+BEIfSymb:==29;
+BEFailSymb:==30;
+BEAllSymb:==31;
+BESelectSymb:==32;
+BENrOfPredefFunsOrConses:==33;
+BEDefinition:==34;
+BENewSymbol:==35;
+BEInstanceSymb:==36;
+BEEmptySymbol:==37;
+BEFieldSymbolList:==38;
+BEErroneousSymb:==39;
+BECreateArrayFun:==0;
+BEArraySelectFun:==1;
+BEUnqArraySelectFun:==2;
+BEArrayUpdateFun:==3;
+BEArrayReplaceFun:==4;
+BEArraySizeFun:==5;
+BEUnqArraySizeFun:==6;
+BE_CreateArrayFun:==7;
+BE_UnqArraySelectFun:==8;
+BE_UnqArraySelectNextFun:==9;
+BE_UnqArraySelectLastFun:==10;
+BE_ArrayUpdateFun:==11;
+BENoArrayFun:==12;
+BESelectorDummy:==0;
+BESelector:==1;
+BESelector_U:==2;
+BESelector_F:==3;
+BESelector_L:==4;
+BESelector_N:==5;
+BEUpdateDummy:==0;
+BEUpdate:==1;
+BEUpdate_U:==2;
+BELhsNodeId:==0;
+BERhsNodeId:==1;
+BEIsNotACaf:==0;
+BEIsACaf:==1;