module T::Private::Sealed

def self.declare(mod, decl_file)

def self.declare(mod, decl_file)
  if !mod.is_a?(Module)
    raise "#{mod} is not a class or module and cannot be declared `sealed!`"
  end
  if sealed_module?(mod)
    raise "#{mod} was already declared `sealed!` and cannot be re-declared `sealed!`"
  end
  if T::Private::Final.final_module?(mod)
    raise "#{mod} was already declared `final!` and cannot be declared `sealed!`"
  end
  mod.extend(mod.is_a?(Class) ? NoInherit : NoIncludeExtend)
  if !decl_file
    raise "Couldn't determine declaration file for sealed class."
  end
  mod.instance_variable_set(:@sorbet_sealed_module_decl_file, decl_file)
  mod.instance_variable_set(:@sorbet_sealed_module_all_subclasses, [])
end