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