anchor.diff:      return js_ast.Fun(formals, block);
     }
   
  -  List<js_ast.Parameter> _emitParameters(FunctionNode f) {
  +  js_ast.Parameter _emitParameter(VariableDeclaration node,
  +      {bool withoutInitializer = false}) {
  +    var initializer = node.initializer;
  +    var id = _emitVariableDef(node);
  +    if (initializer == null || withoutInitializer) return id;
  +    return js_ast.DestructuredVariable(
  +        name: id, defaultValue: _visitExpression(initializer));
  +  }
  +
  +  List<js_ast.Parameter> _emitParameters(FunctionNode f,
  +      {bool isForwarding = false}) {
  +    // Destructure optional positional parameters in place.
  +    // Given:
  +    //  - (arg1, arg2, [opt1, opt2 = def2])
  +    // Emit:
  +    //  - (arg1, arg2, opt1 = null, opt2 = def2)
  +    // Note, if [isForwarding] is set, omit initializers as this actually a
  +    // forwarded call not a parameter list. E.g., the second in:
  +    //  - foo(arg1, opt1 = def1) => super(arg1, opt1).
       var positional = f.positionalParameters;
  -    var result = List<js_ast.Parameter>.of(positional.map(_emitVariableDef));
  +    var result = List<js_ast.Parameter>.of(positional
  +        .map((p) => _emitParameter(p, withoutInitializer: isForwarding)));
       if (positional.isNotEmpty &&
           f.requiredParameterCount == positional.length &&
           positional.last.annotations.any(isJsRestAnnotation)) {
  
positive.code:       for (var ctor in superclass.constructors) {
          var savedUri = _currentUri;
          _currentUri = ctor.enclosingClass.fileUri;
          var jsParams = _emitParameters(ctor.function);
          _currentUri = savedUri;
          var name = ctor.name.name;
          var ctorBody = [
  
negative.code:       }
      }
  
      for (var p in f.positionalParameters) {
        var jsParam = _emitIdentifier(p.name);
        initParameter(p, jsParam);
      }
      for (var p in f.namedParameters) {
  