@@ -232,9 +232,6 @@ object ProtoTypes {
232
232
/** A map in which typed arguments can be stored to be later integrated in `typedArgs`. */
233
233
var typedArg : SimpleIdentityMap [untpd.Tree , Tree ] = SimpleIdentityMap .Empty
234
234
235
- /** A map recording the typer states and constraints in which arguments stored in myTypedArg were typed */
236
- var evalState : SimpleIdentityMap [untpd.Tree , (TyperState , Constraint )] = SimpleIdentityMap .Empty
237
-
238
235
/** The tupled version of this prototype, if it has been computed */
239
236
var tupled : Type = NoType
240
237
@@ -265,25 +262,10 @@ object ProtoTypes {
265
262
266
263
override def notApplied : Type = WildcardType
267
264
268
- /** Forget the types of any arguments that have been typed producing a constraint
269
- * - that is in a typer state that is not yet committed into the one of the current context `ctx`,
270
- * - or that has been retracted from its typestate because oif a failed operation.
271
- * This is necessary to avoid "orphan" TypeParamRefs that are referred to from
272
- * type variables in the typed arguments, but that are not registered in the
273
- * current constraint. Test cases are pos/t1756.scala and pos/i3538.scala.
274
- * @return True if all arguments have types (in particular, no types were forgotten).
265
+ /** @return True if all arguments have types.
275
266
*/
276
- def allArgTypesAreCurrent ()(implicit ctx : Context ): Boolean = {
277
- state.evalState foreachBinding { (arg, tstateConstr) =>
278
- if ((tstateConstr._1.uncommittedAncestor.constraint `ne` ctx.typerState.constraint) ||
279
- tstateConstr._2.isRetracted) {
280
- typr.println(i " need to invalidate $arg / ${state.typedArg(arg)}, ${tstateConstr._2}, current = ${ctx.typerState.constraint}" )
281
- state.typedArg = state.typedArg.remove(arg)
282
- state.evalState = state.evalState.remove(arg)
283
- }
284
- }
267
+ def allArgTypesAreCurrent ()(implicit ctx : Context ): Boolean =
285
268
state.typedArg.size == args.length
286
- }
287
269
288
270
private def isUndefined (tp : Type ): Boolean = tp match {
289
271
case _ : WildcardType => true
@@ -307,15 +289,8 @@ object ProtoTypes {
307
289
targ = arg.withType(WildcardType )
308
290
case _ =>
309
291
targ = typerFn(arg)
310
- if (! ctx.reporter.hasUnreportedErrors) {
311
- // FIXME: This can swallow warnings by updating the typerstate from a nested
312
- // context that gets discarded later. But we do have to update the
313
- // typerstate if there are no errors. If we also omitted the next two lines
314
- // when warning were emitted, `pos/t1756.scala` would fail when run with -feature.
315
- // It would produce an orphan type parameter for CI when pickling.
292
+ if (! ctx.reporter.hasUnreportedErrors)
316
293
state.typedArg = state.typedArg.updated(arg, targ)
317
- state.evalState = state.evalState.updated(arg, (ctx.typerState, ctx.typerState.constraint))
318
- }
319
294
}
320
295
}
321
296
targ
0 commit comments