Пример #1
0
 private void InferTypes(B.SystemPlan plan)
 {
     plan.InferTypeAliases();
     foreach (A.TypeDecl t in Types)
     {
         foreach (var n in t.Names)
         {
             plan.AddType(n, t.Super);
         }
         plan.AddType(t.Super, null, silent: true);
     }
     foreach (A.HandlerDecl h in Handlers)
     {
         if (h.RHS is A.PushReaction pr)
         {
             if (plan.HasType(pr.Name))
             {
                 plan.GetTypePlan(pr.Name).InferConstructor(pr.Args, h, plan.GetTypePlan);
             }
             else
             {
                 Console.WriteLine($"[A2B] Unknown pushed type '{pr.Name}'");
             }
         }
         else if (h.RHS is A.WrapReaction wr)
         {
             if (plan.HasType(wr.Name))
             {
                 plan.GetTypePlan(wr.Name).InferConstructor(wr.Args, h, plan.GetTypePlan);
             }
             else
             {
                 Console.WriteLine($"[A2B] Unknown wrapped type '{wr.Name}'");
             }
         }
     }
 }