message: Avoid checking if parens are required for non-Node objects.
diff: @@ -2,6 +2,7 @@ var assert = require("assert");
  var linesModule = require("./lines");
  var types = require("./types");
  var getFieldValue = types.getFieldValue;
  +var Node = types.namedTypes.Node;
  var Printable = types.namedTypes.Printable;
  var Expression = types.namedTypes.Expression;
  var ReturnStatement = types.namedTypes.ReturnStatement;
  @@ -498,10 +499,12 @@ function findChildReprints(newPath, oldPath, reprints) {
  // path.needsParens() && !hasParens(oldNode) check below, the absence of
  // a closing parenthesis after the FunctionExpression would trigger
  // pretty-printing unnecessarily.
  - if (!newPath.canBeFirstInStatement() &&
  + if (Node.check(newNode) &&
  + !newPath.canBeFirstInStatement() &&
  newPath.firstInStatement() &&
  - !hasOpeningParen(oldPath))
  + !hasOpeningParen(oldPath)) {
  return false;
  + }
  // If this node needs parentheses and will not be wrapped with
  // parentheses when reprinted, then return false to skip reprinting and
  @@ -525,7 +528,7 @@ function findChildReprints(newPath, oldPath, reprints) {
  var originalReprintCount = reprints.length;
  for (var k in keys) {
  - if (k.charAt(0) === "_" || k === 'extra') {
  + if (k.charAt(0) === "_") {
  // Ignore "private" AST properties added by e.g. Babel plugins and
  // parsers like Babylon.
  continue;
  