From 68b7a6995dfd47f32a89958beef7791d317313e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D0=B7=D0=B4=D0=B0=D0=B9=D1=89=D0=B8=D0=BA?= Date: Sat, 18 Jul 2020 18:49:27 +0300 Subject: [PATCH] =?UTF-8?q?FIXED:=20=D0=BF=D0=BE=D1=8F=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=BB=D0=B8=D1=81=D1=8C=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D0=B5=20e.Call=20=D0=BF=D1=80=D0=B8=20=D0=BE?= =?UTF-8?q?=D0=B1=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B8=20=D1=81=D0=B8?= =?UTF-8?q?=D0=B3=D0=BD=D0=B0=D1=82=D1=83=D1=80=20(#319)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Когда обнаруживалось зацикливание по Хигману-Крускалу, после построения обобщённого вызова не восстанавливались вызовы в нём — оставались заглушки e.Call. --- autotests/opt-tree-spec5-call-vars.ref | 19 +++++++++++++++++++ src/compiler/OptTree-Spec.ref | 5 +++-- 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 autotests/opt-tree-spec5-call-vars.ref diff --git a/autotests/opt-tree-spec5-call-vars.ref b/autotests/opt-tree-spec5-call-vars.ref new file mode 100644 index 00000000..e7a3170a --- /dev/null +++ b/autotests/opt-tree-spec5-call-vars.ref @@ -0,0 +1,19 @@ +* TREE + +$ENTRY Go { + /* empty */ + = '*' : s.Sym + = : '*abcd' + = /* empty */; +} + +$SPEC G (e.RES) e.str; + +G { + (e.Res) t.Term e.Tail = ) e.Tail>; + (e.Res) /* empty */ = e.Res; +} + +H { + e.X = e.X; +} diff --git a/src/compiler/OptTree-Spec.ref b/src/compiler/OptTree-Spec.ref index 6eb192e9..45f9c98c 100644 --- a/src/compiler/OptTree-Spec.ref +++ b/src/compiler/OptTree-Spec.ref @@ -539,7 +539,7 @@ SpecCall-Aux { (e.Signature) (e.HistorySignature) (e.Argument) (e.SpecPattern) (e.StaticMatches) (e.Name) (e.Body) s.NextNumber (e.Signatures) (e.DynamicMatches) - (e.History) + (e.History) (e.Calls) >; False @@ -1412,7 +1412,7 @@ MakeGeneralization { (e.Signature) (e.HistorySignature) (e.Argument) (e.SpecPattern) (e.StaticMatches) (e.Name) (e.Body) s.NextNumber (e.Signatures) (e.DynamicMatches) - (e.History) + (e.History) (e.Calls) /* Получаем обобщение двух сигнатур */ = : t.NewCall^ + = : t.NewCall^ = t.Info t.NewCall