// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "mojo/dart/embedder/snapshotter/vm.h"

#include "base/logging.h"
#include "tonic/dart_error.h"
#include "tonic/dart_state.h"

namespace mojo {
namespace dart {
extern const uint8_t* vm_isolate_snapshot_buffer;
extern const uint8_t* isolate_snapshot_buffer;
}
}

static const char* kDartArgs[] = {
    "--enable_mirrors=false",
};

void InitDartVM() {
  CHECK(Dart_SetVMFlags(arraysize(kDartArgs), kDartArgs));
  CHECK(Dart_Initialize(
      mojo::dart::vm_isolate_snapshot_buffer,
      nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
      nullptr, nullptr, nullptr, nullptr) == nullptr);
}

Dart_Isolate CreateDartIsolate() {
  CHECK(mojo::dart::isolate_snapshot_buffer);
  char* error = nullptr;
  auto isolate_data = new SnapshotterDartState();
  CHECK(isolate_data != nullptr);
  Dart_Isolate isolate = Dart_CreateIsolate("dart:snapshot",
                                            "main",
                                            mojo::dart::isolate_snapshot_buffer,
                                            nullptr,
                                            isolate_data,
                                            &error);
  CHECK(isolate) << error;
  Dart_ExitIsolate();
  isolate_data->SetIsolate(isolate);
  return isolate;
}
