anchor.diff:        entries[2 * i] = visitExpression(node.entries[i].key);
         entries[2 * i + 1] = visitExpression(node.entries[i].value);
       }
  -    List<js.Expression> args =
  -        <js.Expression>[new js.ArrayInitializer(entries)];
  +    List<js.Expression> args = entries.isEmpty
  +         ? <js.Expression>[]
  +         : <js.Expression>[new js.ArrayInitializer(entries)];
       return buildStaticInvoke(
           new Selector.call(constructor.name, constructor.library, 2),
           constructor,
  
positive.code:       return js.propertyCall(interceptorLibrary, selector.name, arguments);
      } else {
        js.Expression elementAccess = glue.staticFunctionAccess(target);
        List<js.Expression> compiledArguments =
            selector.makeArgumentsList(target.implementation,
                                       arguments,
                                       compileConstant);
        return new js.Call(elementAccess, compiledArguments);
      }
    }
  
    @override
    js.Expression visitInvokeConstructor(tree_ir.InvokeConstructor node) {
      if (node.constant != null) return giveup(node);
      registry.registerInstantiatedClass(node.target.enclosingClass);
      return buildStaticInvoke(node.selector,
                               node.target,
                               visitArguments(node.arguments));
    }
  
    void registerMethodInvoke(tree_ir.InvokeMethod node) {
  
negative.code:     return buildConstant(glue.getConstantForVariable(parameter).value);
    }
  
    // TODO(karlklose): get rid of the selector argument.
    js.Expression buildStaticInvoke(Selector selector,
                                    Element target,
                                    List<js.Expression> arguments) {
  