code: function fixArgumentLength(fn) {
    var staticFn = function(a) {
      var args = arguments;
      return fn(a, args[1], args[2], args.length - 1);
    };
    staticFn.instance = function(b) {
      var args = arguments;
      return fn(this, b, args[1], args.length);
    };
    return staticFn;
  }
docs: This song and dance is to fix methods to a different length from what they actually accept in order to stay in line with spec. Additionally passing argument length, as some methods throw assertion errors based on this (undefined check is not enough). Fortunately for now spec is such that passing 3 actual arguments covers all requirements. Note that passing the argument length also forces the compiler to not rewrite length of the compiled function.