aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorronny2001-06-22 13:59:12 +0000
committerronny2001-06-22 13:59:12 +0000
commitd5280494ba069c47c90e370054d6b69a4329e037 (patch)
tree3156e2653ad3f61ea585424ecb4b96ea3735bcbb
parentprint matched symbol in CaseNode (diff)
local reference counts for CaseNode and DefaultNode
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@496 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
-rw-r--r--backend/backend.dcl13
-rw-r--r--backend/backend.icl29
2 files changed, 38 insertions, 4 deletions
diff --git a/backend/backend.dcl b/backend/backend.dcl
index 4d4cdb9..aa3e18d 100644
--- a/backend/backend.dcl
+++ b/backend/backend.dcl
@@ -28,6 +28,7 @@ from StdString import String;
:: BECodeBlockP;
:: BEStringListP;
:: BENodeIdListP;
+:: BENodeIdRefCountListP;
:: BEAnnotation :== Int;
:: BEAttribution :== Int;
:: BESymbKind :== Int;
@@ -98,10 +99,18 @@ 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);
+BESetNodeDefRefCounts :: !BENodeP !BackEnd -> BackEnd;
+// void BESetNodeDefRefCounts (BENodeP lhs);
+BEAddNodeIdsRefCounts :: !Int !BESymbolP !BENodeIdListP !BackEnd -> BackEnd;
+// void BEAddNodeIdsRefCounts (int sequenceNumber,BESymbolP symbol,BENodeIdListP nodeIds);
BESwitchNode :: !BENodeIdP !BEArgP !BackEnd -> (!BENodeP,!BackEnd);
// BENodeP BESwitchNode (BENodeIdP nodeId,BEArgP caseNode);
BECaseNode :: !Int !BESymbolP !BENodeDefP !BEStrictNodeIdP !BENodeP !BackEnd -> (!BENodeP,!BackEnd);
// BENodeP BECaseNode (int symbolArity,BESymbolP symbol,BENodeDefP nodeDefs,BEStrictNodeIdP strictNodeIds,BENodeP node);
+BEEnterLocalScope :: !BackEnd -> BackEnd;
+// void BEEnterLocalScope ();
+BELeaveLocalScope :: !BENodeP !BackEnd -> BackEnd;
+// void BELeaveLocalScope (BENodeP node);
BEPushNode :: !Int !BESymbolP !BEArgP !BENodeIdListP !BackEnd -> (!BENodeP,!BackEnd);
// BENodeP BEPushNode (int arity,BESymbolP symbol,BEArgP arguments,BENodeIdListP nodeIds);
BEDefaultNode :: !BENodeDefP !BEStrictNodeIdP !BENodeP !BackEnd -> (!BENodeP,!BackEnd);
@@ -238,9 +247,9 @@ BEDeclareDynamicTypeSymbol :: !Int !Int !BackEnd -> BackEnd;
// void BEDeclareDynamicTypeSymbol (int typeIndex,int moduleIndex);
BEDynamicTempTypeSymbol :: !BackEnd -> (!BESymbolP,!BackEnd);
// BESymbolP BEDynamicTempTypeSymbol ();
-kBEVersionCurrent:==0x02000207;
+kBEVersionCurrent:==0x02000208;
kBEVersionOldestDefinition:==0x02000204;
-kBEVersionOldestImplementation:==0x02000206;
+kBEVersionOldestImplementation:==0x02000208;
kBEDebug:==1;
kPredefinedModuleIndex:==1;
BENoAnnot:==0;
diff --git a/backend/backend.icl b/backend/backend.icl
index 6013282..6fd12cc 100644
--- a/backend/backend.icl
+++ b/backend/backend.icl
@@ -28,6 +28,7 @@ from StdString import String;
:: BECodeBlockP :== CPtr;
:: BEStringListP :== CPtr;
:: BENodeIdListP :== CPtr;
+:: BENodeIdRefCountListP :== CPtr;
:: BEAnnotation :== Int;
:: BEAttribution :== Int;
:: BESymbKind :== Int;
@@ -227,6 +228,18 @@ BEGuardNode a0 a1 a2 a3 a4 a5 a6 a7 = code {
};
// BENodeP BEGuardNode (BENodeP cond,BENodeDefP thenNodeDefs,BEStrictNodeIdP thenStricts,BENodeP then,BENodeDefP elseNodeDefs,BEStrictNodeIdP elseStricts,BENodeP elsje);
+BESetNodeDefRefCounts :: !BENodeP !BackEnd -> BackEnd;
+BESetNodeDefRefCounts a0 a1 = code {
+ ccall BESetNodeDefRefCounts "I:V:I"
+};
+// void BESetNodeDefRefCounts (BENodeP lhs);
+
+BEAddNodeIdsRefCounts :: !Int !BESymbolP !BENodeIdListP !BackEnd -> BackEnd;
+BEAddNodeIdsRefCounts a0 a1 a2 a3 = code {
+ ccall BEAddNodeIdsRefCounts "III:V:I"
+};
+// void BEAddNodeIdsRefCounts (int sequenceNumber,BESymbolP symbol,BENodeIdListP nodeIds);
+
BESwitchNode :: !BENodeIdP !BEArgP !BackEnd -> (!BENodeP,!BackEnd);
BESwitchNode a0 a1 a2 = code {
ccall BESwitchNode "II:I:I"
@@ -239,6 +252,18 @@ BECaseNode a0 a1 a2 a3 a4 a5 = code {
};
// BENodeP BECaseNode (int symbolArity,BESymbolP symbol,BENodeDefP nodeDefs,BEStrictNodeIdP strictNodeIds,BENodeP node);
+BEEnterLocalScope :: !BackEnd -> BackEnd;
+BEEnterLocalScope a0 = code {
+ ccall BEEnterLocalScope ":V:I"
+};
+// void BEEnterLocalScope ();
+
+BELeaveLocalScope :: !BENodeP !BackEnd -> BackEnd;
+BELeaveLocalScope a0 a1 = code {
+ ccall BELeaveLocalScope "I:V:I"
+};
+// void BELeaveLocalScope (BENodeP node);
+
BEPushNode :: !Int !BESymbolP !BEArgP !BENodeIdListP !BackEnd -> (!BENodeP,!BackEnd);
BEPushNode a0 a1 a2 a3 a4 = code {
ccall BEPushNode "IIII:I:I"
@@ -646,9 +671,9 @@ BEDynamicTempTypeSymbol a0 = code {
ccall BEDynamicTempTypeSymbol ":I:I"
};
// BESymbolP BEDynamicTempTypeSymbol ();
-kBEVersionCurrent:==0x02000207;
+kBEVersionCurrent:==0x02000208;
kBEVersionOldestDefinition:==0x02000204;
-kBEVersionOldestImplementation:==0x02000206;
+kBEVersionOldestImplementation:==0x02000208;
kBEDebug:==1;
kPredefinedModuleIndex:==1;
BENoAnnot:==0;