Skip to content

Commit

Permalink
Уточнено определение тривиальной сигнатуры (#251, #359)
Browse files Browse the repository at this point in the history
  • Loading branch information
Mazdaywik committed Jul 21, 2021
1 parent 65e816b commit c1de4f5
Showing 1 changed file with 49 additions and 3 deletions.
52 changes: 49 additions & 3 deletions src/compiler/OptTree-Spec.ref
Original file line number Diff line number Diff line change
Expand Up @@ -669,7 +669,7 @@ SpecCall-Aux {
(e.Name) (e.SpecPattern) (e.Body) s.NextNumber e.Signatures
(e.OldArg) (e.NewArg) (e.Sg) (e.Solutions) (e.History)
s.NeedRelationCheck
, <IsTrivialSignature e.NewArg> : True
, <IsTrivialSignature e.NewArg (e.Body)> : True
= ((e.SpecPattern) (e.Body) s.NextNumber e.Signatures)
(CallBrackets (Symbol Name e.Name) e.OldArg)
/* пусто */ (/* пусто */);
Expand Down Expand Up @@ -1006,9 +1006,55 @@ RemoveLastGhostBracket {
}

IsTrivialSignature {
e.Arg, e.Arg : (Var 'e' e._) = True;
e.Arg (e.Body), <IsHardExpr e.Arg> : False = False (e.Arg) (e.Body);
e.Arg (e.Body) = <DoIsTrivialSignature e.Arg (/* scanned */) (e.Body)>;
}

DoIsTrivialSignature {
e.Arg (e.ScannedSentences) (/* кончились предложения */)
= True (e.Arg) (e.ScannedSentences);

e.Arg (e.ScannedSentences) (((e.Pattern) e.Tail) e.Sentences)
, <GenericMatch (e.Pattern) (e.Arg)> : Clear e._
= <DoIsTrivialSignature
e.Arg (e.ScannedSentences ((e.Pattern) e.Tail)) (e.Sentences)
>;

e.Arg (e.ScannedSentences) (e.Sentences)
= False (e.Arg) (e.ScannedSentences e.Sentences);
}

IsHardExpr {
e.Expr
, <IsHardExpr-Aux e.Expr>
: {
e._ OpenE e._ = False;
e._ Closure e._ = False;
e._ (s.Mode e.Index) e._ (s.Mode e.Index) e._ = False;
e._ = True;
}
}

e.Arg = False;
/*
<IsHardExpr-Aux e.Expr> == t.IsHardExpr-Aux*
t.IsHardExpr-Aux ::= OpenE | (s.Mode e.Index) | Closure
*/
IsHardExpr-Aux {
e.Expr-B (Var 'e' e.Index1) e.Expr-M (Var 'e' e.Index2) e.Expr-E = OpenE;

e.Expr
= <Map
{
(Var s.Mode e.Index) = (s.Mode e.Index);

(Brackets e.InBrackets) = <IsHardExpr-Aux e.InBrackets>;
(ADT-Brackets (e.Name) e.InBrackets) = <IsHardExpr-Aux e.InBrackets>;
(ClosureBrackets e._) = Closure;

t.Other = /* пропускаем */;
}
e.Expr
>;
}

OrderUniqueVars {
Expand Down

0 comments on commit c1de4f5

Please sign in to comment.