// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// WARNING: Do not edit - generated code.

#include "config.h"
#include "DartWebkitClassIds.h"
#include "Dart$(INTERFACE).h"

$INCLUDES
namespace WebCore {

Dart_Handle $(WEBCORE_CLASS_NAME_ESCAPED)_toDart(PassRefPtr< $WEBCORE_CLASS_NAME > value) {
    return Dart$INTERFACE::toDart(value);
}

namespace Dart$(INTERFACE)Internal {
$CALLBACKS
}

Dart_NativeFunction Dart$(INTERFACE)::resolver(Dart_Handle nameHandle, int argumentCount)
{
    String name = DartUtilities::toString(nameHandle);

$RESOLVER
    return 0;
}

const char* const Dart$(INTERFACE)::dartImplementationClassName = "$DART_IMPLEMENTATION_CLASS";
const char* const Dart$(INTERFACE)::dartImplementationLibraryName = "$DART_IMPLEMENTATION_LIBRARY";
const int Dart$(INTERFACE)::dartClassId = $(INTERFACE)ClassId;
}
