@Override
 public void process(Node externs, Node root) {
   if (languageOutIsAtLeast(ES6) || !compiler.getOptions().rewritePolyfills) {
     return; // no rewriting in this case.
   }
   this.globals = new GlobalNamespace(compiler, externs, root);
   hotSwapScript(root, null);
 }
 /**
  * Some nodes must be visited pre-order in order to rewrite the references to {@code this}
  * correctly. Everything else is translated post-order in {@link #visit}.
  */
 @Override
 public boolean shouldTraverse(NodeTraversal t, Node n, Node parent) {
   switch (n.getType()) {
     case Token.REST:
       visitRestParam(n, parent);
       break;
     case Token.GETTER_DEF:
     case Token.SETTER_DEF:
       if (compiler.getOptions().getLanguageOut() == LanguageMode.ECMASCRIPT3) {
         cannotConvert(n, "ES5 getters/setters (consider using --language_out=ES5)");
         return false;
       }
       break;
   }
   return true;
 }
 private boolean languageOutIsAtLeast(LanguageMode mode) {
   return compiler.getOptions().getLanguageOut().compareTo(mode) >= 0;
 }