anchor.diff:      values.remove(node.variable);
     }
   }
  +
  +
  +class ContainsTry extends RecursiveVisitor {
  +  bool _found = false;
  +  ContainsTry._();
  +
  +  /// Scans [root] for evidence of try-catch and try-finally.
  +  static bool analyze(Node root) {
  +    ContainsTry visitor = new ContainsTry._();
  +    visitor.visit(root);
  +    return visitor._found;
  +  }
  +
  +  visit(Node node) {
  +    if (_found) return;  // Early exit if we know the answer.
  +    super.visit(node);
  +  }
  +
  +  processLetHandler(LetHandler node) {
  +    _found = true;
  +  }
  +}
  
positive.code: 
  import 'optimizers.dart';
  
  import '../common/names.dart' show
      Selectors;
  import '../compiler.dart' as dart2js show
      Compiler;
  import '../constants/constant_system.dart';
  
negative.code:     if (specializeFieldAccess(node)) return;
      if (specializeIndexableAccess(node)) return;
      if (specializeArrayAccess(node)) return;
      if (specializeSingleUseClosureCall(node)) return;
      if (specializeClosureCall(node)) return;
  
      AbstractValue receiver = getValue(node.receiver.definition);
  