@@ -574,7 +574,7 @@ class Semantic {
574
574
val res = withEnv(env) { eval(body, thisV, klass) }
575
575
val errors2 = res.value.promote(msg, source)
576
576
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
578
578
else
579
579
promoted.add(fun)
580
580
Nil
@@ -607,37 +607,34 @@ class Semantic {
607
607
if classRef.memberClasses.nonEmpty || ! warm.isFullyFilled then
608
608
return PromoteError (msg, source, trace.toVector) :: Nil
609
609
610
- val fields = classRef.fields
611
- val methods = classRef.membersBasedOnFlags(Flags .Method , Flags .Deferred | Flags .Accessor )
612
610
val buffer = new mutable.ArrayBuffer [Error ]
613
611
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
+ }
622
631
}
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
+ }
637
634
}
638
635
639
636
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
641
638
}
642
639
643
640
end extension
0 commit comments