@@ -177,46 +177,62 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) =
177177|> ListSet.setify( typeEquiv g)
178178|> List.filter( isInterfaceTy g)
179179let aintfs = flatten aintfs
180- let aintfsUser = flatten aintfsUser
181180let fintfs = flatten fintfs
182181
183182let unimpl = ListSet.subtract( fun fity aity -> typeAEquiv g aenv aity fity) fintfs aintfs
184- ( unimpl|> List.forall( fun ity -> errorR( Error( FSComp.SR.DefinitionsInSigAndImplNotCompatibleMissingInterface( implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName, NicePrint.minimalStringOfType denv ity), m)); false )) &&
183+ ( unimpl
184+ |> List.forall( fun ity ->
185+ let errorMessage = FSComp.SR.DefinitionsInSigAndImplNotCompatibleMissingInterface( implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName, NicePrint.minimalStringOfType denv ity)
186+ errorR( Error( errorMessage, m)); false )) &&
187+
188+ let aintfsUser = flatten aintfsUser
189+
185190let hidden = ListSet.subtract( typeAEquiv g aenv) aintfsUser fintfs
186- let warningOrError = if implTycon.IsFSharpInterfaceTyconthen error else warning
187- hidden|> List.iter ( fun ity -> warningOrError( InterfaceNotRevealed( denv, ity, implTycon.Range)))
191+ let continueChecks , warningOrError = if implTycon.IsFSharpInterfaceTyconthen false , errorR else true , warning
192+ ( hidden|> List.forall ( fun ity -> warningOrError( InterfaceNotRevealed( denv, ity, implTycon.Range)); continueChecks )) &&
188193
189194let aNull = IsUnionTypeWithNullAsTrueValue g implTycon
190195let fNull = IsUnionTypeWithNullAsTrueValue g sigTycon
191196if aNull&& not fNullthen
192- errorR( Error( FSComp.SR.DefinitionsInSigAndImplNotCompatibleImplementationSaysNull( implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName), m))
197+ errorR( Error( FSComp.SR.DefinitionsInSigAndImplNotCompatibleImplementationSaysNull( implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName), m))
198+ false
193199elif fNull&& not aNullthen
194- errorR( Error( FSComp.SR.DefinitionsInSigAndImplNotCompatibleSignatureSaysNull( implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName), m))
200+ errorR( Error( FSComp.SR.DefinitionsInSigAndImplNotCompatibleSignatureSaysNull( implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName), m))
201+ false
202+ else
195203
196204let aNull2 = TypeNullIsExtraValue g m( generalizedTyconRef( mkLocalTyconRef implTycon))
197205let fNull2 = TypeNullIsExtraValue g m( generalizedTyconRef( mkLocalTyconRef implTycon))
198206if aNull2&& not fNull2then
199207 errorR( Error( FSComp.SR.DefinitionsInSigAndImplNotCompatibleImplementationSaysNull2( implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName), m))
208+ false
200209elif fNull2&& not aNull2then
201210 errorR( Error( FSComp.SR.DefinitionsInSigAndImplNotCompatibleSignatureSaysNull2( implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName), m))
211+ false
212+ else
202213
203214let aSealed = isSealedTy g( generalizedTyconRef( mkLocalTyconRef implTycon))
204215let fSealed = isSealedTy g( generalizedTyconRef( mkLocalTyconRef sigTycon))
205- if aSealed&& not fSealedthen
216+ if aSealed&& not fSealedthen
206217 errorR( Error( FSComp.SR.DefinitionsInSigAndImplNotCompatibleImplementationSealed( implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName), m))
207- if not aSealed&& fSealedthen
218+ false
219+ elif not aSealed&& fSealedthen
208220 errorR( Error( FSComp.SR.DefinitionsInSigAndImplNotCompatibleImplementationIsNotSealed( implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName), m))
221+ false
222+ else
209223
210224let aPartial = isAbstractTycon implTycon
211225let fPartial = isAbstractTycon sigTycon
212226if aPartial&& not fPartialthen
213227 errorR( Error( FSComp.SR.DefinitionsInSigAndImplNotCompatibleImplementationIsAbstract( implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName), m))
214-
215- if not aPartial&& fPartialthen
228+ false
229+ elif not aPartial&& fPartialthen
216230 errorR( Error( FSComp.SR.DefinitionsInSigAndImplNotCompatibleSignatureIsAbstract( implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName), m))
217-
218- if not ( typeAEquiv g aenv( superOfTycon g implTycon) ( superOfTycon g sigTycon)) then
231+ false
232+ elif not ( typeAEquiv g aenv( superOfTycon g implTycon) ( superOfTycon g sigTycon)) then
219233 errorR( Error( FSComp.SR.DefinitionsInSigAndImplNotCompatibleTypesHaveDifferentBaseTypes( implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName), m))
234+ false
235+ else
220236
221237 checkTypars m aenv implTypars sigTypars&&
222238 checkTypeRepr m aenv implTycon sigTycon.TypeReprInfo&&