compiler/passes/normalize.cpp
// 2 types of generic actuals:
//  1. Generic type symbol as a leaf, where that type does not have
//     defaults for every field)
//       e.g. Owned(MyGenericClass)
//  2. Call to a generic type with a type query expression within
//       e.g. MyGenericClass(?) / MyGenericClass(?t) / MyGenericClass(t=?t)
2 types of generic actuals:
1. Generic type symbol as a leaf, where that type does not have
defaults for every field)
e.g.
2 types of generic actuals : 1 . Generic type symbol as a leaf where that type does not have defaults for every field ) e . g .
static bool doesCallContainGenericActual(CallExpr* call) {
  for_actuals(actual, call) {
    if (isGenericActual(actual)) {
      return true;
    } else if (NamedExpr* named = toNamedExpr(actual)) {
      if (isGenericActual(named->actual)) {
        return true;
      }
    } else if (CallExpr* subcall = toCallExpr(actual)) {
      if (doesCallContainGenericActual(subcall)) {
        return true;
      }
    }
  }
  return false;
}
static bool doesCallContainGenericActual ( CallExpr * call ) { for_actuals ( actual , call ) { if ( isGenericActual ( actual ) ) { return true ; } else if ( NamedExpr * named = toNamedExpr ( actual ) ) { if ( isGenericActual ( named -> actual ) ) { return true ; } } else if ( CallExpr * subcall = toCallExpr ( actual ) ) { if ( doesCallContainGenericActual ( subcall ) ) { return true ; } } } return false ; }
2 types of generic actuals:
1.
2 types of generic actuals : 1 .