simple-squiggle

A restricted subset of Squiggle
Log | Files | Refs | README

wrapNativeSuper.js (1087B)


      1 import getPrototypeOf from "./getPrototypeOf.js";
      2 import setPrototypeOf from "./setPrototypeOf.js";
      3 import isNativeFunction from "./isNativeFunction.js";
      4 import construct from "./construct.js";
      5 export default function _wrapNativeSuper(Class) {
      6   var _cache = typeof Map === "function" ? new Map() : undefined;
      7 
      8   _wrapNativeSuper = function _wrapNativeSuper(Class) {
      9     if (Class === null || !isNativeFunction(Class)) return Class;
     10 
     11     if (typeof Class !== "function") {
     12       throw new TypeError("Super expression must either be null or a function");
     13     }
     14 
     15     if (typeof _cache !== "undefined") {
     16       if (_cache.has(Class)) return _cache.get(Class);
     17 
     18       _cache.set(Class, Wrapper);
     19     }
     20 
     21     function Wrapper() {
     22       return construct(Class, arguments, getPrototypeOf(this).constructor);
     23     }
     24 
     25     Wrapper.prototype = Object.create(Class.prototype, {
     26       constructor: {
     27         value: Wrapper,
     28         enumerable: false,
     29         writable: true,
     30         configurable: true
     31       }
     32     });
     33     return setPrototypeOf(Wrapper, Class);
     34   };
     35 
     36   return _wrapNativeSuper(Class);
     37 }