@@ -574,7 +574,7 @@ class Semantic {
574574 val res = withEnv(env) { eval(body, thisV, klass) }
575575 val errors2 = res.value.promote(msg, source)
576576 if (res.errors.nonEmpty || errors2.nonEmpty)
577- UnsafePromotion (msg, source, trace.toVector, res.errors ++ errors2) :: Nil
577+ UnsafePromotion (msg, source, trace.toVector, ( res.errors ++ errors2).head ) :: Nil
578578 else
579579 promoted.add(fun)
580580 Nil
@@ -607,37 +607,34 @@ class Semantic {
607607 if classRef.memberClasses.nonEmpty || ! warm.isFullyFilled then
608608 return PromoteError (msg, source, trace.toVector) :: Nil
609609
610- val fields = classRef.fields
611- val methods = classRef.membersBasedOnFlags(Flags .Method , Flags .Deferred | Flags .Accessor )
612610 val buffer = new mutable.ArrayBuffer [Error ]
613611
614- fields.exists { denot =>
615- val f = denot.symbol
616- if ! f.isOneOf(Flags .Deferred | Flags .Private | Flags .Protected ) && f.hasSource then
617- val trace2 = trace.add(f.defTree)
618- val res = warm.select(f, source)
619- locally {
620- given Trace = trace2
621- buffer ++= res.ensureHot(msg, source).errors
612+ warm.klass.baseClasses.exists { klass =>
613+ klass.hasSource && klass.info.decls.exists { member =>
614+ if member.isOneOf(Flags .Method | Flags .Lazy | Flags .Deferred ) then {
615+ if ! member.isConstructor && member.hasSource then
616+ val trace2 = trace.add(member.defTree)
617+ locally {
618+ given Trace = trace2
619+ val args = member.info.paramInfoss.flatten.map(_ => ArgInfo (Hot , EmptyTree ))
620+ val res = warm.call(member, args, superType = NoType , source = source)
621+ buffer ++= res.ensureHot(msg, source).errors
622+ }
623+ } else if ! member.isType then {
624+ if ! member.isOneOf(Flags .Deferred | Flags .Private | Flags .Protected ) && member.hasSource then
625+ val trace2 = trace.add(member.defTree)
626+ val res = warm.select(member, source)
627+ locally {
628+ given Trace = trace2
629+ buffer ++= res.ensureHot(msg, source).errors
630+ }
622631 }
623- buffer.nonEmpty
624- }
625-
626- buffer.nonEmpty || methods.exists { denot =>
627- val m = denot.symbol
628- if ! m.isConstructor && m.hasSource then
629- val trace2 = trace.add(m.defTree)
630- locally {
631- given Trace = trace2
632- val args = m.info.paramInfoss.flatten.map(_ => ArgInfo (Hot , EmptyTree ))
633- val res = warm.call(m, args, superType = NoType , source = source)
634- buffer ++= res.ensureHot(msg, source).errors
635- }
636- buffer.nonEmpty
632+ buffer.nonEmpty
633+ }
637634 }
638635
639636 if buffer.isEmpty then Nil
640- else UnsafePromotion (msg, source, trace.toVector, buffer.toList ) :: Nil
637+ else UnsafePromotion (msg, source, trace.toVector, buffer( 0 ) ) :: Nil
641638 }
642639
643640 end extension
0 commit comments