@@ -107,7 +107,7 @@ object Summarization {
107
107
108
108
case Typed (expr, tpt) =>
109
109
if (tpt.tpe.hasAnnotation(defn.UncheckedAnnot )) Summary .empty
110
- else analyze(expr)
110
+ else analyze(expr) ++ effectsOfType(tpt.tpe, tpt)
111
111
112
112
case NamedArg (name, arg) =>
113
113
analyze(arg)
@@ -201,20 +201,7 @@ object Summarization {
201
201
202
202
case tdef : TypeDef =>
203
203
if tdef.isClassDef then Summary .empty
204
- else {
205
- var summary = Summary .empty
206
- val tp = tdef.symbol.info
207
- val traverser = new TypeTraverser {
208
- def traverse (tp : Type ): Unit = tp match {
209
- case TermRef (_ : SingletonType , _) =>
210
- summary = summary + analyze(tp, tdef.rhs)
211
- case _ =>
212
- traverseChildren(tp)
213
- }
214
- }
215
- traverser.traverse(tp)
216
- summary
217
- }
204
+ else Summary (effectsOfType(tdef.symbol.info, tdef.rhs))
218
205
219
206
case _ : Import | _ : Export =>
220
207
Summary .empty
@@ -227,6 +214,19 @@ object Summarization {
227
214
else summary
228
215
}
229
216
217
+ private def effectsOfType (tp : Type , source : Tree )(implicit env : Env ): Effects =
218
+ var summary = Summary .empty
219
+ val traverser = new TypeTraverser {
220
+ def traverse (tp : Type ): Unit = tp match {
221
+ case TermRef (_ : SingletonType , _) =>
222
+ summary = summary + analyze(tp, source)
223
+ case _ =>
224
+ traverseChildren(tp)
225
+ }
226
+ }
227
+ traverser.traverse(tp)
228
+ summary.effs
229
+
230
230
def analyze (tp : Type , source : Tree )(implicit env : Env ): Summary =
231
231
trace(" summarizing " + tp.show, init, s => s.asInstanceOf [Summary ].show) {
232
232
val summary : Summary = tp match {
@@ -257,8 +257,8 @@ object Summarization {
257
257
}
258
258
Summary (pots2, effs)
259
259
260
- case _ : TermParamRef =>
261
- // possible from type definitions
260
+ case _ : TermParamRef | _ : RecThis =>
261
+ // possible from checking effects of types
262
262
Summary .empty
263
263
264
264
case _ =>
0 commit comments