// 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.

#include "bin/io_buffer.h"

namespace dart {
namespace bin {

Dart_Handle IOBuffer::Allocate(intptr_t size, uint8_t** buffer) {
  uint8_t* data = Allocate(size);
  Dart_Handle result =
      Dart_NewExternalTypedData(Dart_TypedData_kUint8, data, size);
  Dart_NewWeakPersistentHandle(result, data, size, IOBuffer::Finalizer);

  if (Dart_IsError(result)) {
    Free(data);
    Dart_PropagateError(result);
  }
  if (buffer != NULL) {
    *buffer = data;
  }
  return result;
}


uint8_t* IOBuffer::Allocate(intptr_t size) {
  return new uint8_t[size];
}

}  // namespace bin
}  // namespace dart
