From ea6af6f222247a5c2d4d289d4ffffbd8074f0cbb Mon Sep 17 00:00:00 2001 From: Shaz Qadeer Date: Tue, 2 Jan 2024 19:13:10 -0800 Subject: [PATCH] update --- Source/Core/AST/AbsyCmd.cs | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/Source/Core/AST/AbsyCmd.cs b/Source/Core/AST/AbsyCmd.cs index 7a2103a8f..9287dc836 100644 --- a/Source/Core/AST/AbsyCmd.cs +++ b/Source/Core/AST/AbsyCmd.cs @@ -3319,8 +3319,13 @@ public override void Resolve(ResolutionContext rc) // checking calls from atomic actions need type information, hence postponed to type checking } - private void TypecheckCallCmdInYieldProcedureDecl(YieldProcedureDecl callerDecl, TypecheckingContext tc) + private void TypecheckCallCmdInYieldProcedureDecl(TypecheckingContext tc) { + if (tc.Proc is not YieldProcedureDecl callerDecl) + { + return; + } + var callerModifiedVars = new HashSet(callerDecl.ModifiedVars); void CheckModifies(IEnumerable modifiedVars) @@ -3574,6 +3579,8 @@ public override void Typecheck(TypecheckingContext tc) Contract.Assume(this.Proc != null); // we assume the CallCmd has been successfully resolved before calling this Typecheck method + var errorCount = tc.ErrorCount; + (this as ICarriesAttributes).TypecheckAttributes(tc); List expectedLayerRanges = null; @@ -3647,12 +3654,6 @@ public override void Typecheck(TypecheckingContext tc) } } - // Type checking of layers requires call inputs to be resolved - if (tc.Proc is YieldProcedureDecl callerDecl1) - { - TypecheckCallCmdInYieldProcedureDecl(callerDecl1, tc); - } - this.CheckAssignments(tc); List /*!*/ @@ -3693,6 +3694,11 @@ public override void Typecheck(TypecheckingContext tc) TypeParameters = SimpleTypeParamInstantiation.From(Proc.TypeParameters, actualTypeParams); + if (tc.ErrorCount > errorCount) + { + return; + } + TypecheckCallCmdInYieldProcedureDecl(tc); TypecheckCallCmdInActionDecl(tc); }