title: How does Bluebird's util.toFastProperties function make an object's properties "fast"?
body: <p>In Bluebird's <a href="https://github.com/petkaantonov/bluebird/blob/7454401269cfa47e5b001354388c062509103de7/src/util.js#L180"><code>util.js</code> file</a>, it has the following function:</p>
  
  <pre><code>function toFastProperties(obj) {
      /*jshint -W027*/
      function f() {}
      f.prototype = obj;
      ASSERT("%HasFastProperties", true, obj);
      return f;
      eval(obj);
  }
  </code></pre>
  
  <p>For some reason, there's a statement after the return function, which I'm not sure why it's there.</p>
  
  <p>As well, it seems that it is deliberate, as the author had silenced the JSHint warning about this:</p>
  
  <blockquote>
    <p>Unreachable 'eval' after 'return'. (W027)</p>
  </blockquote>
  
  <p>What exactly does this function do? Does <code>util.toFastProperties</code> really make an object's properties "faster"?</p>
  
  <p>I've searched through Bluebird's GitHub repository for any comments in the source code or an explanation in their list of issues, but I couldn't find any.</p>