function evaluateWithSourceUrl(filename, content, context) {
  const vmContext = createContext()
  const vmGlobalThis = runInContext('this', vmContext)
  const vmFeralFunction = vmGlobalThis.Function

  Object.defineProperties(
    vmGlobalThis,
    Object.getOwnPropertyDescriptors(context)
  )

  // circular ref (used when globalThis is not present)
  if (!vmGlobalThis.globalThis) {
    vmGlobalThis.globalThis = vmGlobalThis
  }
  // Since the browserify test uses this vm util as a browser env simulation,
  // creating actual dom nodes that can leak the real global object is not possible,
  // therefore there is no way to access the real global object otherwise, but since we
  // have to (for the scuttling tests) - we intentionally export this util func to solve this:
  vmGlobalThis.getTrueGlobalThisForTestsOnly = () => vmGlobalThis
  // perform eval
  let result
  try {
    result = runInContext(`${content}\n//# sourceURL=${filename}`, vmContext)
  } catch (e) {
    console.log(/** @type {Error} */ (e).stack)
    throw e
  }
  // pull out test result value from context (not always used)
  return { result, vmGlobalThis, vmContext, vmFeralFunction }
}
@param {string} filename
@param {string} content
@param {object} context