propagateDynamicScopes method

void propagateDynamicScopes(
  1. HTOptimizationResult result
)

Implementation

void propagateDynamicScopes(HTOptimizationResult result) {
  var changed = true;
  while (changed) {
    changed = false;
    for (final optimization in result.functions.values) {
      if (optimization.localSlotCount > 65535 &&
          !optimization.requiresDynamicScope) {
        optimization.requiresDynamicScope = true;
        changed = true;
      }
      if (!optimization.requiresDynamicScope) continue;
      for (final upvalue in optimization.upvalues) {
        final owner = upvalue.scope.function;
        if (owner == null) continue;
        final ownerOptimization = result.functions[owner.declaration]!;
        if (!ownerOptimization.requiresDynamicScope) {
          ownerOptimization.requiresDynamicScope = true;
          changed = true;
        }
      }
    }
  }
}