From 666747be3791774cddf41d6d855244b4f39b12a5 Mon Sep 17 00:00:00 2001 From: johnvg Date: Mon, 23 Jun 2003 14:17:22 +0000 Subject: optimize allocation of Par and Seq constructors to prevent heap overflow (>100 m) git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@1362 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d --- frontend/classify.icl | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/frontend/classify.icl b/frontend/classify.icl index 510cd47..6ef3cd5 100644 --- a/frontend/classify.icl +++ b/frontend/classify.icl @@ -204,11 +204,21 @@ add_dep_count (fi,ai) rc combine_counts :: !RefCounts !RefCounts -> .RefCounts combine_counts c1 c2 - = {Seq 0 [|rc1,rc2] \\ rc1 <-: c1 & rc2 <-: c2} + = {combine rc1 rc2 \\ rc1 <-: c1 & rc2 <-: c2} +where + combine (Seq 0 [|]) rc2 = rc2 + combine rc1 (Seq 0 [|]) = rc1 + combine (Seq i1 [|]) (Seq i2 l) = Seq (i1+i2) l + combine (Seq i1 l) (Seq i2 [|]) = Seq (i1+i2) l + combine rc1 rc2 = Seq 0 [|rc1,rc2] unify_counts :: !RefCounts !RefCounts -> RefCounts unify_counts c1 c2 - = {Par 0 [|rc1,rc2] \\ rc1 <-: c1 & rc2 <-: c2} + = {unify rc1 rc2 \\ rc1 <-: c1 & rc2 <-: c2} +where + unify (Seq 0 [|]) rc2 = rc2 + unify rc1 (Seq 0 [|]) = rc1 + unify rc1 rc2 = Par 0 [|rc1,rc2] show_counts group_members group_counts # (_,group_counts) = foldSt show group_members (0,group_counts) -- cgit v1.2.3