Deprecate obsolete repository
Change-Id: I08c42b7e6b35a572b5ffe83539d7002f8b731149
Reviewed-on: https://fuchsia-review.googlesource.com/c/tonic/+/418856
Reviewed-by: Mahesh Saripalli <maheshsr@google.com>
diff --git a/.clang-format b/.clang-format
deleted file mode 100644
index 6fdf1dc..0000000
--- a/.clang-format
+++ /dev/null
@@ -1,8 +0,0 @@
-# Defines the Chromium style for automatic reformatting.
-# http://clang.llvm.org/docs/ClangFormatStyleOptions.html
-BasedOnStyle: Chromium
-# This defaults to 'Auto'. Explicitly set it for a while, so that
-# 'vector<vector<int> >' in existing files gets formatted to
-# 'vector<vector<int>>'. ('Auto' means that clang-format will only use
-# 'int>>' if the file already contains at least one such instance.)
-Standard: Cpp11
diff --git a/AUTHORS b/AUTHORS
deleted file mode 100644
index 4c61558..0000000
--- a/AUTHORS
+++ /dev/null
@@ -1,9 +0,0 @@
-# This is the list of Fuchsia Authors.
-
-# Names should be added to this file as one of
-# Organization's name
-# Individual's name <submission email address>
-# Individual's name <submission email address> <email2> <emailN>
-
-Google Inc.
-The Chromium Authors
diff --git a/BUILD.gn b/BUILD.gn
deleted file mode 100644
index 9fd04e6..0000000
--- a/BUILD.gn
+++ /dev/null
@@ -1,46 +0,0 @@
-# Copyright 2016 The Fuchsia Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-config("config") {
- include_dirs = [ "//third_party" ]
-}
-
-source_set("tonic") {
- sources = [
- "dart_args.h",
- "dart_binding_macros.h",
- "dart_class_library.cc",
- "dart_class_library.h",
- "dart_class_provider.cc",
- "dart_class_provider.h",
- "dart_library_natives.cc",
- "dart_library_natives.h",
- "dart_list.cc",
- "dart_list.h",
- "dart_message_handler.cc",
- "dart_message_handler.h",
- "dart_microtask_queue.cc",
- "dart_microtask_queue.h",
- "dart_persistent_value.cc",
- "dart_persistent_value.h",
- "dart_state.cc",
- "dart_state.h",
- "dart_wrappable.cc",
- "dart_wrappable.h",
- "dart_wrapper_info.h",
- ]
-
- public_deps = [
- "common",
- "converter",
- "file_loader",
- "logging",
- "platform",
- "scopes",
- "typed_data",
- "//third_party/dart/runtime:dart_api",
- ]
-
- public_configs = [ ":config" ]
-}
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index ac6402f..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2016 The Fuchsia Authors. All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/PATENTS b/PATENTS
deleted file mode 100644
index 2746e78..0000000
--- a/PATENTS
+++ /dev/null
@@ -1,22 +0,0 @@
-Additional IP Rights Grant (Patents)
-
-"This implementation" means the copyrightable works distributed by
-Google as part of the Fuchsia project.
-
-Google hereby grants to you a perpetual, worldwide, non-exclusive,
-no-charge, royalty-free, irrevocable (except as stated in this
-section) patent license to make, have made, use, offer to sell, sell,
-import, transfer, and otherwise run, modify and propagate the contents
-of this implementation of Fuchsia, where such license applies only to
-those patent claims, both currently owned by Google and acquired in
-the future, licensable by Google that are necessarily infringed by
-this implementation. This grant does not include claims that would be
-infringed only as a consequence of further modification of this
-implementation. If you or your agent or exclusive licensee institute
-or order or agree to the institution of patent litigation or any other
-patent enforcement activity against any entity (including a
-cross-claim or counterclaim in a lawsuit) alleging that this
-implementation of Fuchsia constitutes direct or contributory patent
-infringement, or inducement of patent infringement, then any patent
-rights granted to you under this License for this implementation of
-Fuchsia shall terminate as of the date such litigation is filed.
diff --git a/README.md b/README.md
index f4889e3..3cc8b3b 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
-# Tonic
+# Obsolete
-A collection of C++ utilities for working with the DartVM API.
+This repository has moved into Fuchsia's main repository:
+https://fuchsia.googlesource.com/fuchsia/
+
diff --git a/common/BUILD.gn b/common/BUILD.gn
deleted file mode 100644
index d09cac0..0000000
--- a/common/BUILD.gn
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2018 The Fuchsia Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-source_set("common") {
- visibility = [ "../*" ]
-
- public_configs = [ "../:config" ]
-
- sources = [
- "build_config.h",
- "log.cc",
- "log.h",
- "macros.h",
- ]
-}
diff --git a/common/build_config.h b/common/build_config.h
deleted file mode 100644
index 92d0668..0000000
--- a/common/build_config.h
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright 2016 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// This file adds defines about the platform we're currently building on.
-// Operating System:
-// OS_WIN / OS_MACOSX / OS_LINUX / OS_POSIX (MACOSX or LINUX) /
-// OS_NACL (NACL_SFI or NACL_NONSFI) / OS_NACL_SFI / OS_NACL_NONSFI
-// Compiler:
-// COMPILER_MSVC / COMPILER_GCC
-// Processor:
-// ARCH_CPU_X86 / ARCH_CPU_X86_64 / ARCH_CPU_X86_FAMILY (X86 or X86_64)
-// ARCH_CPU_32_BITS / ARCH_CPU_64_BITS
-
-#ifndef TONIC_COMMON_BUILD_CONFIG_H_
-#define TONIC_COMMON_BUILD_CONFIG_H_
-
-#if defined(__Fuchsia__)
-#define OS_FUCHSIA 1
-#elif defined(ANDROID)
-#define OS_ANDROID 1
-#elif defined(__APPLE__)
-// only include TargetConditions after testing ANDROID as some android builds
-// on mac don't have this header available and it's not needed unless the target
-// is really mac/ios.
-#include <TargetConditionals.h>
-#define OS_MACOSX 1
-#if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
-#define OS_IOS 1
-#endif // defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
-#elif defined(__linux__)
-#define OS_LINUX 1
-// include a system header to pull in features.h for glibc/uclibc macros.
-#include <unistd.h>
-#if defined(__GLIBC__) && !defined(__UCLIBC__)
-// we really are using glibc, not uClibc pretending to be glibc
-#define LIBC_GLIBC 1
-#endif
-#elif defined(_WIN32)
-#define OS_WIN 1
-#elif defined(__FreeBSD__)
-#define OS_FREEBSD 1
-#elif defined(__OpenBSD__)
-#define OS_OPENBSD 1
-#elif defined(__sun)
-#define OS_SOLARIS 1
-#elif defined(__QNXNTO__)
-#define OS_QNX 1
-#else
-#error Please add support for your platform in tonic/common/build_config.h
-#endif
-
-// For access to standard BSD features, use OS_BSD instead of a
-// more specific macro.
-#if defined(OS_FREEBSD) || defined(OS_OPENBSD)
-#define OS_BSD 1
-#endif
-
-// For access to standard POSIXish features, use OS_POSIX instead of a
-// more specific macro.
-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_FREEBSD) || \
- defined(OS_OPENBSD) || defined(OS_SOLARIS) || defined(OS_ANDROID) || \
- defined(OS_NACL) || defined(OS_QNX)
-#define OS_POSIX 1
-#endif
-
-// Processor architecture detection. For more info on what's defined, see:
-// http://msdn.microsoft.com/en-us/library/b0084kay.aspx
-// http://www.agner.org/optimize/calling_conventions.pdf
-// or with gcc, run: "echo | gcc -E -dM -"
-#if defined(_M_X64) || defined(__x86_64__)
-#define ARCH_CPU_X86_FAMILY 1
-#define ARCH_CPU_X86_64 1
-#define ARCH_CPU_64_BITS 1
-#define ARCH_CPU_LITTLE_ENDIAN 1
-#elif defined(_M_IX86) || defined(__i386__)
-#define ARCH_CPU_X86_FAMILY 1
-#define ARCH_CPU_X86 1
-#define ARCH_CPU_32_BITS 1
-#define ARCH_CPU_LITTLE_ENDIAN 1
-#elif defined(__ARMEL__)
-#define ARCH_CPU_ARM_FAMILY 1
-#define ARCH_CPU_ARMEL 1
-#define ARCH_CPU_32_BITS 1
-#define ARCH_CPU_LITTLE_ENDIAN 1
-#elif defined(__aarch64__)
-#define ARCH_CPU_ARM_FAMILY 1
-#define ARCH_CPU_ARM64 1
-#define ARCH_CPU_64_BITS 1
-#define ARCH_CPU_LITTLE_ENDIAN 1
-#elif defined(__pnacl__)
-#define ARCH_CPU_32_BITS 1
-#define ARCH_CPU_LITTLE_ENDIAN 1
-#elif defined(__MIPSEL__)
-#if defined(__LP64__)
-#define ARCH_CPU_MIPS64_FAMILY 1
-#define ARCH_CPU_MIPS64EL 1
-#define ARCH_CPU_64_BITS 1
-#define ARCH_CPU_LITTLE_ENDIAN 1
-#else
-#define ARCH_CPU_MIPS_FAMILY 1
-#define ARCH_CPU_MIPSEL 1
-#define ARCH_CPU_32_BITS 1
-#define ARCH_CPU_LITTLE_ENDIAN 1
-#endif
-#else
-#error Please add support for your architecture in build/build_config.h
-#endif
-
-#endif // TONIC_COMMON_BUILD_CONFIG_H_
diff --git a/common/log.cc b/common/log.cc
deleted file mode 100644
index 34adf53..0000000
--- a/common/log.cc
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2018 The Fuchsia 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 "tonic/common/log.h"
-
-#include <cstdarg>
-#include <cstdio>
-#include <memory>
-
-namespace tonic {
-
-namespace {
-
-std::function<void(const char*)> log_handler;
-
-} // namespace
-
-void Log(const char* format, ...) {
- va_list ap;
- va_start(ap, format);
- int result = vsnprintf(nullptr, 0, format, ap);
- va_end(ap);
-
- if (result < 0)
- return;
-
- int size = result + 1;
- std::unique_ptr<char[]> message(new char[size]);
- va_start(ap, format);
- result = vsnprintf(message.get(), size, format, ap);
- va_end(ap);
-
- if (result < 0)
- return;
-
- if (log_handler) {
- log_handler(message.get());
- } else {
- printf("%s\n", message.get());
- }
-}
-
-void SetLogHandler(std::function<void(const char*)> handler) {
- log_handler = handler;
-}
-
-} // namespace tonic
diff --git a/common/log.h b/common/log.h
deleted file mode 100644
index 4f31d02..0000000
--- a/common/log.h
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 2018 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef TONIC_COMMON_LOG_H_
-#define TONIC_COMMON_LOG_H_
-
-#include <functional>
-
-namespace tonic {
-
-void Log(const char* format, ...);
-
-void SetLogHandler(std::function<void(const char*)> handler);
-
-} // namespace tonic
-
-#endif // TONIC_COMMON_LOG_H_
diff --git a/common/macros.h b/common/macros.h
deleted file mode 100644
index 6a5b0bf..0000000
--- a/common/macros.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2018 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef TONIC_COMMON_MACROS_H_
-#define TONIC_COMMON_MACROS_H_
-
-#include <cassert>
-#include <cstdio>
-#include <cstdlib>
-
-#include "tonic/common/log.h"
-
-#define TONIC_DISALLOW_COPY(TypeName) TypeName(const TypeName&) = delete;
-
-#define TONIC_DISALLOW_ASSIGN(TypeName) \
- void operator=(const TypeName&) = delete;
-
-#define TONIC_DISALLOW_COPY_AND_ASSIGN(TypeName) \
- TONIC_DISALLOW_COPY(TypeName) \
- TONIC_DISALLOW_ASSIGN(TypeName)
-
-#define TONIC_CHECK(condition) { \
- if (!(condition)) { tonic::Log("assertion failed " #condition); abort(); } \
- }
-
-#ifndef NDEBUG
-#define TONIC_DCHECK TONIC_CHECK
-#else // NDEBUG
-#define TONIC_DCHECK (void)
-#endif // NDEBUG
-
-#endif // TONIC_COMMON_MACROS_H_
diff --git a/converter/BUILD.gn b/converter/BUILD.gn
deleted file mode 100644
index 8c2fe1c..0000000
--- a/converter/BUILD.gn
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright 2016 The Fuchsia Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-source_set("converter") {
- visibility = [ "../*" ]
-
- configs += [ "../:config" ]
-
- sources = [
- "dart_converter.cc",
- "dart_converter.h",
- ]
-
- deps = [
- "../common",
- ]
-
- public_deps = [
- "//third_party/dart/runtime:dart_api",
- ]
-}
diff --git a/converter/dart_converter.cc b/converter/dart_converter.cc
deleted file mode 100644
index ce58f0f..0000000
--- a/converter/dart_converter.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright 2016 The Fuchsia 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 "tonic/converter/dart_converter.h"
-
-// This file exists to ensure dart_converter.h doesn't miss any dependencies.
diff --git a/converter/dart_converter.h b/converter/dart_converter.h
deleted file mode 100644
index d7e6333..0000000
--- a/converter/dart_converter.h
+++ /dev/null
@@ -1,396 +0,0 @@
-// Copyright 2016 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_CONVERTER_TONIC_DART_CONVERTER_H_
-#define LIB_CONVERTER_TONIC_DART_CONVERTER_H_
-
-#include <string>
-#include <vector>
-
-#include "third_party/dart/runtime/include/dart_api.h"
-#include "tonic/common/macros.h"
-
-namespace tonic {
-
-// DartConvert converts types back and forth from Sky to Dart. The template
-// parameter |T| determines what kind of type conversion to perform.
-template <typename T, typename Enable = void>
-struct DartConverter {};
-
-// This is to work around the fact that typedefs do not create new types. If you
-// have a typedef, and want it to use a different converter, specialize this
-// template and override the types here.
-// Ex:
-// typedef int ColorType; // Want to use a different converter.
-// class ColorConverterType {}; // Dummy type.
-// template<> struct DartConvertType<ColorConverterType> {
-// using ConverterType = ColorConverterType;
-// using ValueType = ColorType;
-// };
-template <typename T>
-struct DartConverterTypes {
- using ConverterType = T;
- using ValueType = T;
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// Boolean
-
-template <>
-struct DartConverter<bool> {
- static Dart_Handle ToDart(bool val) { return Dart_NewBoolean(val); }
-
- static void SetReturnValue(Dart_NativeArguments args, bool val) {
- Dart_SetBooleanReturnValue(args, val);
- }
-
- static bool FromDart(Dart_Handle handle) {
- bool result = 0;
- Dart_BooleanValue(handle, &result);
- return result;
- }
-
- static bool FromArguments(Dart_NativeArguments args,
- int index,
- Dart_Handle& exception) {
- bool result = false;
- Dart_GetNativeBooleanArgument(args, index, &result);
- return result;
- }
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// Numbers
-
-template <typename T>
-struct DartConverterInteger {
- static Dart_Handle ToDart(T val) { return Dart_NewInteger(val); }
-
- static void SetReturnValue(Dart_NativeArguments args, T val) {
- Dart_SetIntegerReturnValue(args, val);
- }
-
- static T FromDart(Dart_Handle handle) {
- int64_t result = 0;
- Dart_IntegerToInt64(handle, &result);
- return static_cast<T>(result);
- }
-
- static T FromArguments(Dart_NativeArguments args,
- int index,
- Dart_Handle& exception) {
- int64_t result = 0;
- Dart_GetNativeIntegerArgument(args, index, &result);
- return static_cast<T>(result);
- }
-};
-
-template <>
-struct DartConverter<int> : public DartConverterInteger<int> {};
-
-template <>
-struct DartConverter<long int> : public DartConverterInteger<long int> {};
-
-template <>
-struct DartConverter<unsigned> : public DartConverterInteger<unsigned> {};
-
-template <>
-struct DartConverter<long long> : public DartConverterInteger<long long> {};
-
-template <>
-struct DartConverter<unsigned long>
- : public DartConverterInteger<unsigned long> {};
-
-template <>
-struct DartConverter<unsigned long long> {
- // TODO(abarth): The Dart VM API doesn't yet have an entry-point for
- // an unsigned 64-bit type. We will need to add a Dart API for
- // constructing an integer from uint64_t.
- //
- // (In the meantime, we have asserts below to check that we're never
- // converting values that have the 64th bit set.)
-
- static Dart_Handle ToDart(unsigned long long val) {
- TONIC_DCHECK(val <= 0x7fffffffffffffffLL);
- return Dart_NewInteger(static_cast<int64_t>(val));
- }
-
- static void SetReturnValue(Dart_NativeArguments args,
- unsigned long long val) {
- TONIC_DCHECK(val <= 0x7fffffffffffffffLL);
- Dart_SetIntegerReturnValue(args, val);
- }
-
- static unsigned long long FromDart(Dart_Handle handle) {
- int64_t result = 0;
- Dart_IntegerToInt64(handle, &result);
- return result;
- }
-
- static unsigned long long FromArguments(Dart_NativeArguments args,
- int index,
- Dart_Handle& exception) {
- int64_t result = 0;
- Dart_GetNativeIntegerArgument(args, index, &result);
- return result;
- }
-};
-
-template <typename T>
-struct DartConverterFloatingPoint {
- static Dart_Handle ToDart(T val) { return Dart_NewDouble(val); }
-
- static void SetReturnValue(Dart_NativeArguments args, T val) {
- Dart_SetDoubleReturnValue(args, val);
- }
-
- static T FromDart(Dart_Handle handle) {
- double result = 0;
- Dart_DoubleValue(handle, &result);
- return result;
- }
-
- static T FromArguments(Dart_NativeArguments args,
- int index,
- Dart_Handle& exception) {
- double result = 0;
- Dart_GetNativeDoubleArgument(args, index, &result);
- return result;
- }
-};
-
-template <>
-struct DartConverter<float> : public DartConverterFloatingPoint<float> {};
-
-template <>
-struct DartConverter<double> : public DartConverterFloatingPoint<double> {};
-
-////////////////////////////////////////////////////////////////////////////////
-// Enum Classes
-
-template <typename T>
-struct DartConverter<T, typename std::enable_if<std::is_enum<T>::value>::type> {
- static Dart_Handle ToDart(T val) {
- return Dart_NewInteger(
- static_cast<typename std::underlying_type<T>::type>(val));
- }
-
- static void SetReturnValue(Dart_NativeArguments args, T val) {
- Dart_SetIntegerReturnValue(
- args, static_cast<typename std::underlying_type<T>::type>(val));
- }
-
- static T FromDart(Dart_Handle handle) {
- int64_t result = 0;
- Dart_IntegerToInt64(handle, &result);
- return static_cast<T>(result);
- }
-
- static T FromArguments(Dart_NativeArguments args,
- int index,
- Dart_Handle& exception) {
- int64_t result = 0;
- Dart_GetNativeIntegerArgument(args, index, &result);
- return static_cast<T>(result);
- }
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// Strings
-
-template <>
-struct DartConverter<std::string> {
- static Dart_Handle ToDart(const std::string& val) {
- return Dart_NewStringFromUTF8(reinterpret_cast<const uint8_t*>(val.data()),
- val.length());
- }
-
- static void SetReturnValue(Dart_NativeArguments args,
- const std::string& val) {
- Dart_SetReturnValue(args, ToDart(val));
- }
-
- static std::string FromDart(Dart_Handle handle) {
- uint8_t* data = nullptr;
- intptr_t length = 0;
- if (Dart_IsError(Dart_StringToUTF8(handle, &data, &length)))
- return std::string();
- return std::string(reinterpret_cast<char*>(data), length);
- }
-
- static std::string FromArguments(Dart_NativeArguments args,
- int index,
- Dart_Handle& exception) {
- return FromDart(Dart_GetNativeArgument(args, index));
- }
-};
-
-template <>
-struct DartConverter<std::u16string> {
- static Dart_Handle ToDart(const std::u16string& val) {
- return Dart_NewStringFromUTF16(
- reinterpret_cast<const uint16_t*>(val.data()), val.length());
- }
-
- static void SetReturnValue(Dart_NativeArguments args,
- const std::u16string& val) {
- Dart_SetReturnValue(args, ToDart(val));
- }
-
- static std::u16string FromDart(Dart_Handle handle) {
- intptr_t length = 0;
- Dart_StringLength(handle, &length);
- std::vector<uint16_t> data(length);
- Dart_StringToUTF16(handle, data.data(), &length);
- return std::u16string(reinterpret_cast<char16_t*>(data.data()), length);
- }
-
- static std::u16string FromArguments(Dart_NativeArguments args,
- int index,
- Dart_Handle& exception) {
- return FromDart(Dart_GetNativeArgument(args, index));
- }
-};
-
-template <>
-struct DartConverter<const char*> {
- static Dart_Handle ToDart(const char* val) {
- return Dart_NewStringFromCString(val);
- }
-
- static void SetReturnValue(Dart_NativeArguments args, const char* val) {
- Dart_SetReturnValue(args, ToDart(val));
- }
-
- static const char* FromDart(Dart_Handle handle) {
- const char* result = nullptr;
- Dart_StringToCString(handle, &result);
- return result;
- }
-
- static const char* FromArguments(Dart_NativeArguments args,
- int index,
- Dart_Handle& exception) {
- return FromDart(Dart_GetNativeArgument(args, index));
- }
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// Collections
-
-template <typename T, typename Enable = void>
-struct DartListFactory {
- static Dart_Handle NewList(intptr_t length) { return Dart_NewList(length); }
-};
-
-template <>
-struct DartListFactory<std::string> {
- static Dart_Handle NewList(intptr_t length) {
- return Dart_NewListOf(Dart_CoreType_String, length);
- }
-};
-
-template <typename T>
-struct DartConverter<std::vector<T>> {
- using ValueType = typename DartConverterTypes<T>::ValueType;
- using ConverterType = typename DartConverterTypes<T>::ConverterType;
-
- static Dart_Handle ToDart(const std::vector<ValueType>& val) {
- Dart_Handle list = DartListFactory<ValueType>::NewList(val.size());
- if (Dart_IsError(list))
- return list;
- for (size_t i = 0; i < val.size(); i++) {
- Dart_Handle result =
- Dart_ListSetAt(list, i, DartConverter<ConverterType>::ToDart(val[i]));
- if (Dart_IsError(result))
- return result;
- }
- return list;
- }
-
- static void SetReturnValue(Dart_NativeArguments args,
- const std::vector<ValueType>& val) {
- Dart_SetReturnValue(args, ToDart(val));
- }
-
- static std::vector<ValueType> FromDart(Dart_Handle handle) {
- std::vector<ValueType> result;
-
- if (!Dart_IsList(handle))
- return result;
-
- intptr_t length = 0;
- Dart_ListLength(handle, &length);
-
- if (length == 0)
- return result;
-
- result.reserve(length);
-
- std::vector<Dart_Handle> items(length);
- Dart_Handle items_result =
- Dart_ListGetRange(handle, 0, length, items.data());
- TONIC_DCHECK(!Dart_IsError(items_result));
-
- for (intptr_t i = 0; i < length; ++i) {
- TONIC_DCHECK(items[i]);
- result.push_back(DartConverter<ConverterType>::FromDart(items[i]));
- }
- return result;
- }
-
- static std::vector<ValueType> FromArguments(Dart_NativeArguments args,
- int index,
- Dart_Handle& exception) {
- return FromDart(Dart_GetNativeArgument(args, index));
- }
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// Dart_Handle
-
-template <>
-struct DartConverter<Dart_Handle> {
- static Dart_Handle ToDart(Dart_Handle val) { return val; }
-
- static void SetReturnValue(Dart_NativeArguments args, Dart_Handle val) {
- Dart_SetReturnValue(args, val);
- }
-
- static Dart_Handle FromDart(Dart_Handle handle) { return handle; }
-
- static Dart_Handle FromArguments(Dart_NativeArguments args,
- int index,
- Dart_Handle& exception) {
- return Dart_GetNativeArgument(args, index);
- }
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// Convience wrappers using type inference
-
-template <typename T>
-Dart_Handle ToDart(const T& object) {
- return DartConverter<T>::ToDart(object);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// std::string support
-
-inline Dart_Handle StdStringToDart(const std::string& val) {
- return DartConverter<std::string>::ToDart(val);
-}
-
-inline std::string StdStringFromDart(Dart_Handle handle) {
- return DartConverter<std::string>::FromDart(handle);
-}
-
-// Alias Dart_NewStringFromCString for less typing.
-inline Dart_Handle ToDart(const char* val) {
- return Dart_NewStringFromCString(val);
-}
-
-} // namespace tonic
-
-#endif // LIB_CONVERTER_TONIC_DART_CONVERTER_H_
diff --git a/dart_args.h b/dart_args.h
deleted file mode 100644
index 0ee6f5c..0000000
--- a/dart_args.h
+++ /dev/null
@@ -1,234 +0,0 @@
-// Copyright 2015 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_DART_ARGS_H_
-#define LIB_TONIC_DART_ARGS_H_
-
-#include <type_traits>
-#include <utility>
-
-#include "third_party/dart/runtime/include/dart_api.h"
-#include "tonic/converter/dart_converter.h"
-#include "tonic/dart_wrappable.h"
-
-namespace tonic {
-
-class DartArgIterator {
- public:
- DartArgIterator(Dart_NativeArguments args, int start_index = 1)
- : args_(args), index_(start_index), had_exception_(false) {}
-
- template <typename T>
- T GetNext() {
- if (had_exception_)
- return T();
- Dart_Handle exception = nullptr;
- T arg = DartConverter<T>::FromArguments(args_, index_++, exception);
- if (exception) {
- had_exception_ = true;
- Dart_ThrowException(exception);
- }
- return arg;
- }
-
- bool had_exception() const { return had_exception_; }
-
- Dart_NativeArguments args() const { return args_; }
-
- private:
- Dart_NativeArguments args_;
- int index_;
- bool had_exception_;
-
- TONIC_DISALLOW_COPY_AND_ASSIGN(DartArgIterator);
-};
-
-// Classes for generating and storing an argument pack of integer indices
-// (based on well-known "indices trick", see: http://goo.gl/bKKojn):
-template <size_t... indices>
-struct IndicesHolder {};
-
-template <size_t requested_index, size_t... indices>
-struct IndicesGenerator {
- using type = typename IndicesGenerator<requested_index - 1,
- requested_index - 1,
- indices...>::type;
-};
-
-template <size_t... indices>
-struct IndicesGenerator<0, indices...> {
- using type = IndicesHolder<indices...>;
-};
-
-template <typename T>
-class IndicesForSignature {};
-
-template <typename ResultType, typename... ArgTypes>
-struct IndicesForSignature<ResultType (*)(ArgTypes...)> {
- static const size_t count = sizeof...(ArgTypes);
- using type = typename IndicesGenerator<count>::type;
-};
-
-template <typename C, typename ResultType, typename... ArgTypes>
-struct IndicesForSignature<ResultType (C::*)(ArgTypes...)> {
- static const size_t count = sizeof...(ArgTypes);
- using type = typename IndicesGenerator<count>::type;
-};
-
-template <typename C, typename ResultType, typename... ArgTypes>
-struct IndicesForSignature<ResultType (C::*)(ArgTypes...) const> {
- static const size_t count = sizeof...(ArgTypes);
- using type = typename IndicesGenerator<count>::type;
-};
-
-template <size_t index, typename ArgType>
-struct DartArgHolder {
- using ValueType = typename std::remove_const<
- typename std::remove_reference<ArgType>::type>::type;
-
- ValueType value;
-
- explicit DartArgHolder(DartArgIterator* it)
- : value(it->GetNext<ValueType>()) {}
-};
-
-template <typename T>
-void DartReturn(T result, Dart_NativeArguments args) {
- DartConverter<T>::SetReturnValue(args, std::move(result));
-}
-
-template <typename IndicesType, typename T>
-class DartDispatcher {};
-
-template <size_t... indices, typename... ArgTypes>
-struct DartDispatcher<IndicesHolder<indices...>, void (*)(ArgTypes...)>
- : public DartArgHolder<indices, ArgTypes>... {
- using FunctionPtr = void (*)(ArgTypes...);
-
- DartArgIterator* it_;
-
- explicit DartDispatcher(DartArgIterator* it)
- : DartArgHolder<indices, ArgTypes>(it)..., it_(it) {}
-
- void Dispatch(FunctionPtr func) {
- (*func)(DartArgHolder<indices, ArgTypes>::value...);
- }
-};
-
-template <size_t... indices, typename ResultType, typename... ArgTypes>
-struct DartDispatcher<IndicesHolder<indices...>, ResultType (*)(ArgTypes...)>
- : public DartArgHolder<indices, ArgTypes>... {
- using FunctionPtr = ResultType (*)(ArgTypes...);
- using CtorResultType = ResultType;
-
- DartArgIterator* it_;
-
- explicit DartDispatcher(DartArgIterator* it)
- : DartArgHolder<indices, ArgTypes>(it)..., it_(it) {}
-
- void Dispatch(FunctionPtr func) {
- DartReturn((*func)(DartArgHolder<indices, ArgTypes>::value...),
- it_->args());
- }
-
- ResultType DispatchCtor(FunctionPtr func) {
- return (*func)(DartArgHolder<indices, ArgTypes>::value...);
- }
-};
-
-template <size_t... indices, typename C, typename... ArgTypes>
-struct DartDispatcher<IndicesHolder<indices...>, void (C::*)(ArgTypes...)>
- : public DartArgHolder<indices, ArgTypes>... {
- using FunctionPtr = void (C::*)(ArgTypes...);
-
- DartArgIterator* it_;
-
- explicit DartDispatcher(DartArgIterator* it)
- : DartArgHolder<indices, ArgTypes>(it)..., it_(it) {}
-
- void Dispatch(FunctionPtr func) {
- (GetReceiver<C>(it_->args())->*func)(
- DartArgHolder<indices, ArgTypes>::value...);
- }
-};
-
-template <size_t... indices,
- typename C,
- typename ReturnType,
- typename... ArgTypes>
-struct DartDispatcher<IndicesHolder<indices...>,
- ReturnType (C::*)(ArgTypes...) const>
- : public DartArgHolder<indices, ArgTypes>... {
- using FunctionPtr = ReturnType (C::*)(ArgTypes...) const;
-
- DartArgIterator* it_;
-
- explicit DartDispatcher(DartArgIterator* it)
- : DartArgHolder<indices, ArgTypes>(it)..., it_(it) {}
-
- void Dispatch(FunctionPtr func) {
- DartReturn((GetReceiver<C>(it_->args())->*func)(
- DartArgHolder<indices, ArgTypes>::value...),
- it_->args());
- }
-};
-
-template <size_t... indices,
- typename C,
- typename ResultType,
- typename... ArgTypes>
-struct DartDispatcher<IndicesHolder<indices...>, ResultType (C::*)(ArgTypes...)>
- : public DartArgHolder<indices, ArgTypes>... {
- using FunctionPtr = ResultType (C::*)(ArgTypes...);
-
- DartArgIterator* it_;
-
- explicit DartDispatcher(DartArgIterator* it)
- : DartArgHolder<indices, ArgTypes>(it)..., it_(it) {}
-
- void Dispatch(FunctionPtr func) {
- DartReturn((GetReceiver<C>(it_->args())->*func)(
- DartArgHolder<indices, ArgTypes>::value...),
- it_->args());
- }
-};
-
-template <typename Sig>
-void DartCall(Sig func, Dart_NativeArguments args) {
- DartArgIterator it(args);
- using Indices = typename IndicesForSignature<Sig>::type;
- DartDispatcher<Indices, Sig> decoder(&it);
- if (it.had_exception())
- return;
- decoder.Dispatch(func);
-}
-
-template <typename Sig>
-void DartCallStatic(Sig func, Dart_NativeArguments args) {
- DartArgIterator it(args, 0);
- using Indices = typename IndicesForSignature<Sig>::type;
- DartDispatcher<Indices, Sig> decoder(&it);
- if (it.had_exception())
- return;
- decoder.Dispatch(func);
-}
-
-template <typename Sig>
-void DartCallConstructor(Sig func, Dart_NativeArguments args) {
- DartArgIterator it(args);
- using Indices = typename IndicesForSignature<Sig>::type;
- using Wrappable = typename DartDispatcher<Indices, Sig>::CtorResultType;
- Wrappable wrappable;
- {
- DartDispatcher<Indices, Sig> decoder(&it);
- if (it.had_exception())
- return;
- wrappable = decoder.DispatchCtor(func);
- }
- wrappable->AssociateWithDartWrapper(args);
-}
-
-} // namespace tonic
-
-#endif // LIB_TONIC_DART_ARGS_H_
diff --git a/dart_binding_macros.h b/dart_binding_macros.h
deleted file mode 100644
index a46eb60..0000000
--- a/dart_binding_macros.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2015 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_DART_BINDING_MACROS_H_
-#define LIB_TONIC_DART_BINDING_MACROS_H_
-
-#include "tonic/dart_args.h"
-
-#define DART_NATIVE_CALLBACK(CLASS, METHOD) \
- static void CLASS##_##METHOD(Dart_NativeArguments args) { \
- tonic::DartCall(&CLASS::METHOD, args); \
- }
-
-#define DART_NATIVE_CALLBACK_STATIC(CLASS, METHOD) \
- static void CLASS##_##METHOD(Dart_NativeArguments args) { \
- tonic::DartCallStatic(&CLASS::METHOD, args); \
- }
-
-#define DART_REGISTER_NATIVE(CLASS, METHOD) \
- {#CLASS "_" #METHOD, CLASS##_##METHOD, \
- tonic::IndicesForSignature<decltype(&CLASS::METHOD)>::count + 1, true},
-
-#define DART_REGISTER_NATIVE_STATIC(CLASS, METHOD) \
- { \
-#CLASS "_" #METHOD, CLASS##_##METHOD, \
- tonic::IndicesForSignature < decltype(&CLASS::METHOD)> ::count, true \
- }
-
-#define DART_BIND_ALL(CLASS, FOR_EACH) \
- FOR_EACH(DART_NATIVE_CALLBACK) \
- void CLASS::RegisterNatives(tonic::DartLibraryNatives* natives) { \
- natives->Register({FOR_EACH(DART_REGISTER_NATIVE)}); \
- }
-
-#endif // LIB_TONIC_DART_BINDING_MACROS_H_
diff --git a/dart_class_library.cc b/dart_class_library.cc
deleted file mode 100644
index d211ab3..0000000
--- a/dart_class_library.cc
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2015 The Fuchsia 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 "tonic/dart_class_library.h"
-
-#include "tonic/common/macros.h"
-#include "tonic/dart_wrapper_info.h"
-
-namespace tonic {
-
-DartClassLibrary::DartClassLibrary() {}
-
-DartClassLibrary::~DartClassLibrary() {
- // Note that we don't need to delete these persistent handles because this
- // object lives as long as the isolate. The handles will get deleted when the
- // isolate dies.
-}
-
-Dart_PersistentHandle DartClassLibrary::GetClass(const DartWrapperInfo& info) {
- const auto& result = info_cache_.insert(std::make_pair(&info, nullptr));
- if (!result.second) {
- // Already present, return value.
- return result.first->second;
- }
- return GetAndCacheClass(info.library_name, info.interface_name,
- &result.first->second);
-}
-
-Dart_PersistentHandle DartClassLibrary::GetClass(
- const std::string& library_name,
- const std::string& interface_name) {
- auto key = std::make_pair(library_name, interface_name);
- const auto& result = name_cache_.insert(std::make_pair(key, nullptr));
- if (!result.second) {
- // Already present, return value.
- return result.first->second;
- }
- return GetAndCacheClass(library_name.c_str(), interface_name.c_str(),
- &result.first->second);
-}
-
-Dart_PersistentHandle DartClassLibrary::GetAndCacheClass(
- const char* library_name,
- const char* interface_name,
- Dart_PersistentHandle* cache_slot) {
- auto it = providers_.find(library_name);
- TONIC_DCHECK(it != providers_.end());
-
- Dart_Handle class_handle = it->second->GetClassByName(interface_name);
- *cache_slot = Dart_NewPersistentHandle(class_handle);
- return *cache_slot;
-}
-
-} // namespace tonic
diff --git a/dart_class_library.h b/dart_class_library.h
deleted file mode 100644
index 211e945..0000000
--- a/dart_class_library.h
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2015 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_DART_CLASS_LIBRARY_H_
-#define LIB_TONIC_DART_CLASS_LIBRARY_H_
-
-#include <memory>
-#include <string>
-#include <unordered_map>
-
-#include "third_party/dart/runtime/include/dart_api.h"
-#include "tonic/dart_class_provider.h"
-
-namespace tonic {
-struct DartWrapperInfo;
-
-class DartClassLibrary {
- public:
- explicit DartClassLibrary();
- ~DartClassLibrary();
-
- void add_provider(const std::string& library_name,
- std::unique_ptr<DartClassProvider> provider) {
- providers_.insert(std::make_pair(library_name, std::move(provider)));
- }
-
- Dart_PersistentHandle GetClass(const DartWrapperInfo& info);
- Dart_PersistentHandle GetClass(const std::string& library_name,
- const std::string& interface_name);
-
- private:
- Dart_PersistentHandle GetAndCacheClass(const char* library_name,
- const char* interface_name,
- Dart_PersistentHandle* cache_slot);
-
- // TODO(abarth): Move this class somewhere more general.
- // We should also use a more reasonable hash function, such as described in
- // http://www.boost.org/doc/libs/1_35_0/doc/html/boost/hash_combine_id241013.html
- struct PairHasher {
- template <typename T, typename U>
- std::size_t operator()(const std::pair<T, U>& pair) const {
- return std::hash<T>()(pair.first) + 37 * std::hash<U>()(pair.second);
- }
- };
-
- std::unordered_map<std::string, std::unique_ptr<DartClassProvider>>
- providers_;
- std::unordered_map<const DartWrapperInfo*, Dart_PersistentHandle> info_cache_;
- std::unordered_map<std::pair<std::string, std::string>,
- Dart_PersistentHandle,
- PairHasher>
- name_cache_;
-
- TONIC_DISALLOW_COPY_AND_ASSIGN(DartClassLibrary);
-};
-
-} // namespace tonic
-
-#endif // LIB_TONIC_DART_CLASS_LIBRARY_H_
diff --git a/dart_class_provider.cc b/dart_class_provider.cc
deleted file mode 100644
index 53c13fc..0000000
--- a/dart_class_provider.cc
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2015 The Fuchsia 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 "tonic/dart_class_provider.h"
-
-#include "tonic/converter/dart_converter.h"
-#include "tonic/dart_state.h"
-#include "tonic/logging/dart_error.h"
-
-namespace tonic {
-
-DartClassProvider::DartClassProvider(DartState* dart_state,
- const char* class_name) {
- library_.Set(dart_state, Dart_LookupLibrary(ToDart(class_name)));
-}
-
-DartClassProvider::~DartClassProvider() {}
-
-Dart_Handle DartClassProvider::GetClassByName(const char* class_name) {
- Dart_Handle name_handle = ToDart(class_name);
- Dart_Handle class_handle =
- Dart_GetType(library_.value(), name_handle, 0, nullptr);
- TONIC_DCHECK(!Dart_IsError(class_handle));
- return class_handle;
-}
-
-} // namespace tonic
diff --git a/dart_class_provider.h b/dart_class_provider.h
deleted file mode 100644
index 654f10d..0000000
--- a/dart_class_provider.h
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2015 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_DART_CLASS_PROVIDER_H_
-#define LIB_TONIC_DART_CLASS_PROVIDER_H_
-
-#include "third_party/dart/runtime/include/dart_api.h"
-#include "tonic/dart_persistent_value.h"
-
-namespace tonic {
-class DartState;
-
-class DartClassProvider {
- public:
- DartClassProvider(DartState* dart_state, const char* library_name);
- ~DartClassProvider();
-
- Dart_Handle GetClassByName(const char* class_name);
-
- private:
- DartPersistentValue library_;
-
- TONIC_DISALLOW_COPY_AND_ASSIGN(DartClassProvider);
-};
-
-} // namespace tonic
-
-#endif // LIB_TONIC_DART_CLASS_PROVIDER_H_
diff --git a/dart_library_natives.cc b/dart_library_natives.cc
deleted file mode 100644
index becb8a4..0000000
--- a/dart_library_natives.cc
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2015 The Fuchsia 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 "tonic/dart_library_natives.h"
-
-#include "tonic/converter/dart_converter.h"
-
-namespace tonic {
-
-DartLibraryNatives::DartLibraryNatives() {}
-
-DartLibraryNatives::~DartLibraryNatives() {}
-
-void DartLibraryNatives::Register(std::initializer_list<Entry> entries) {
- for (const Entry& entry : entries) {
- symbols_.emplace(entry.native_function, entry.symbol);
- entries_.emplace(entry.symbol, entry);
- }
-}
-
-Dart_NativeFunction DartLibraryNatives::GetNativeFunction(
- Dart_Handle name,
- int argument_count,
- bool* auto_setup_scope) {
- std::string name_string = StdStringFromDart(name);
- auto it = entries_.find(name_string);
- if (it == entries_.end())
- return nullptr;
- const Entry& entry = it->second;
- if (entry.argument_count != argument_count)
- return nullptr;
- *auto_setup_scope = entry.auto_setup_scope;
- return entry.native_function;
-}
-
-const uint8_t* DartLibraryNatives::GetSymbol(
- Dart_NativeFunction native_function) {
- auto it = symbols_.find(native_function);
- if (it == symbols_.end())
- return nullptr;
- return reinterpret_cast<const uint8_t*>(it->second);
-}
-
-} // namespace tonic
diff --git a/dart_library_natives.h b/dart_library_natives.h
deleted file mode 100644
index bfcae50..0000000
--- a/dart_library_natives.h
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2015 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_DART_LIBRARY_NATIVES_H_
-#define LIB_TONIC_DART_LIBRARY_NATIVES_H_
-
-#include <initializer_list>
-#include <string>
-#include <unordered_map>
-
-#include "third_party/dart/runtime/include/dart_api.h"
-#include "tonic/common/macros.h"
-
-namespace tonic {
-
-class DartLibraryNatives {
- public:
- DartLibraryNatives();
- ~DartLibraryNatives();
-
- struct Entry {
- const char* symbol;
- Dart_NativeFunction native_function;
- int argument_count;
- bool auto_setup_scope;
- };
-
- void Register(std::initializer_list<Entry> entries);
-
- Dart_NativeFunction GetNativeFunction(Dart_Handle name,
- int argument_count,
- bool* auto_setup_scope);
- const uint8_t* GetSymbol(Dart_NativeFunction native_function);
-
- private:
- std::unordered_map<std::string, Entry> entries_;
- std::unordered_map<Dart_NativeFunction, const char*> symbols_;
-
- TONIC_DISALLOW_COPY_AND_ASSIGN(DartLibraryNatives);
-};
-
-} // namespace tonic
-
-#endif // LIB_TONIC_DART_LIBRARY_NATIVES_H_
diff --git a/dart_list.cc b/dart_list.cc
deleted file mode 100644
index 53b42d0..0000000
--- a/dart_list.cc
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2017 The Fuchsia 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 "tonic/dart_list.h"
-
-#include "tonic/logging/dart_error.h"
-
-namespace tonic {
-
-DartList::DartList(Dart_Handle dart_handle) : dart_handle_(dart_handle) {
- TONIC_DCHECK(Dart_IsList(dart_handle_));
-
- intptr_t length;
- is_valid_ = !LogIfError(Dart_ListLength(dart_handle_, &length));
- size_ = length;
-}
-
-DartList::DartList() {
- dart_handle_ = Dart_Null();
- size_ = 0;
- is_valid_ = false;
-}
-
-DartList::DartList(DartList&& other)
- : dart_handle_(other.dart_handle_),
- size_(other.size_),
- is_valid_(other.is_valid_) {
- other.dart_handle_ = nullptr;
- other.size_ = 0;
- other.is_valid_ = false;
-}
-
-void DartList::Set(size_t index, Dart_Handle value) {
- LogIfError(Dart_ListSetAt(dart_handle_, index, value));
-}
-
-DartList DartConverter<DartList>::FromArguments(Dart_NativeArguments args,
- int index,
- Dart_Handle& exception) {
- Dart_Handle list = Dart_GetNativeArgument(args, index);
- if (LogIfError(list) || !Dart_IsList(list)) {
- exception = Dart_NewApiError("Invalid Argument");
- return DartList();
- }
-
- return DartList(list);
-}
-
-} // namespace tonic
diff --git a/dart_list.h b/dart_list.h
deleted file mode 100644
index 302cce7..0000000
--- a/dart_list.h
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2017 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_DART_LIST_H_
-#define LIB_TONIC_DART_LIST_H_
-
-#include <stddef.h>
-
-#include "third_party/dart/runtime/include/dart_api.h"
-#include "tonic/converter/dart_converter.h"
-
-namespace tonic {
-
-class DartList {
- public:
- DartList(DartList&& other);
-
- void Set(size_t index, Dart_Handle value);
- Dart_Handle Get(size_t index);
-
- template <class T>
- void Set(size_t index, T value) {
- Set(index, DartConverter<T>::ToDart(value));
- }
-
- template <class T>
- T Get(size_t index) {
- return DartConverter<T>::FromDart(Get(index));
- }
-
- Dart_Handle dart_handle() const { return dart_handle_; }
- size_t size() const { return size_; }
- bool is_valid() const { return is_valid_; }
-
- explicit operator bool() const { return is_valid_; }
-
- private:
- explicit DartList(Dart_Handle list);
- friend struct DartConverter<DartList>;
-
- DartList();
- Dart_Handle dart_handle_;
- size_t size_;
- bool is_valid_;
-
- DartList(const DartList& other) = delete;
-};
-
-template <>
-struct DartConverter<DartList> {
- static DartList FromArguments(Dart_NativeArguments args,
- int index,
- Dart_Handle& exception);
-};
-
-} // namespace tonic
-
-#endif // LIB_TONIC_DART_LIST_H_
diff --git a/dart_message_handler.cc b/dart_message_handler.cc
deleted file mode 100644
index dec186a..0000000
--- a/dart_message_handler.cc
+++ /dev/null
@@ -1,149 +0,0 @@
-// Copyright 2016 The Fuchsia 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 "tonic/dart_message_handler.h"
-
-#include "third_party/dart/runtime/include/dart_api.h"
-#include "third_party/dart/runtime/include/dart_native_api.h"
-#include "third_party/dart/runtime/include/dart_tools_api.h"
-#include "tonic/common/macros.h"
-#include "tonic/dart_state.h"
-#include "tonic/logging/dart_error.h"
-
-namespace tonic {
-
-DartMessageHandler::DartMessageHandler()
- : handled_first_message_(false),
- isolate_exited_(false),
- isolate_had_uncaught_exception_error_(false),
- isolate_had_fatal_error_(false),
- isolate_last_error_(kNoError),
- task_dispatcher_(nullptr) {}
-
-DartMessageHandler::~DartMessageHandler() {
- task_dispatcher_ = nullptr;
-}
-
-void DartMessageHandler::Initialize(TaskDispatcher dispatcher) {
- // Only can be called once.
- TONIC_CHECK(!task_dispatcher_ && dispatcher);
- task_dispatcher_ = dispatcher;
- Dart_SetMessageNotifyCallback(MessageNotifyCallback);
-}
-
-void DartMessageHandler::OnMessage(DartState* dart_state) {
- auto task_dispatcher_ = dart_state->message_handler().task_dispatcher_;
-
- // Schedule a task to run on the message loop thread.
- auto weak_dart_state = dart_state->GetWeakPtr();
- task_dispatcher_([weak_dart_state]() {
- if (auto dart_state = weak_dart_state.lock()) {
- dart_state->message_handler().OnHandleMessage(dart_state.get());
- }
- });
-}
-
-void DartMessageHandler::UnhandledError(Dart_Handle error) {
- TONIC_DCHECK(Dart_CurrentIsolate());
- TONIC_DCHECK(Dart_IsError(error));
-
- isolate_last_error_ = GetErrorHandleType(error);
- // Remember that we had an uncaught exception error.
- isolate_had_uncaught_exception_error_ = true;
- if (Dart_IsFatalError(error)) {
- isolate_had_fatal_error_ = true;
- // Stop handling messages.
- Dart_SetMessageNotifyCallback(nullptr);
- // Shut down the isolate.
- Dart_ShutdownIsolate();
- }
-}
-
-void DartMessageHandler::OnHandleMessage(DartState* dart_state) {
- if (isolate_had_fatal_error_) {
- // Don't handle any more messages.
- return;
- }
-
- DartIsolateScope scope(dart_state->isolate());
- DartApiScope dart_api_scope;
- Dart_Handle result = Dart_Null();
- bool error = false;
-
- // On the first message, check if we should pause on isolate start.
- if (!handled_first_message()) {
- set_handled_first_message(true);
- if (Dart_ShouldPauseOnStart()) {
- // Mark that we are paused on isolate start.
- Dart_SetPausedOnStart(true);
- }
- }
-
- if (Dart_IsPausedOnStart()) {
- // We are paused on isolate start. Only handle service messages until we are
- // requested to resume.
- if (Dart_HasServiceMessages()) {
- bool resume = Dart_HandleServiceMessages();
- if (!resume) {
- return;
- }
- Dart_SetPausedOnStart(false);
- // We've resumed, handle normal messages that are in the queue.
- result = Dart_HandleMessage();
- error = LogIfError(result);
- dart_state->MessageEpilogue(result);
- if (!Dart_CurrentIsolate()) {
- isolate_exited_ = true;
- return;
- }
- }
- } else if (Dart_IsPausedOnExit()) {
- // We are paused on isolate exit. Only handle service messages until we are
- // requested to resume.
- if (Dart_HasServiceMessages()) {
- bool resume = Dart_HandleServiceMessages();
- if (!resume) {
- return;
- }
- Dart_SetPausedOnExit(false);
- }
- } else {
- // We are processing messages normally.
- result = Dart_HandleMessage();
- // If the Dart program has set a return code, then it is intending to shut
- // down by way of a fatal error, and so there is no need to emit a log
- // message.
- if (dart_state->has_set_return_code() && Dart_IsError(result) &&
- Dart_IsFatalError(result)) {
- error = true;
- } else {
- error = LogIfError(result);
- }
- dart_state->MessageEpilogue(result);
- if (!Dart_CurrentIsolate()) {
- isolate_exited_ = true;
- return;
- }
- }
-
- if (error) {
- UnhandledError(result);
- } else if (!Dart_HasLivePorts()) {
- // The isolate has no live ports and would like to exit.
- if (!Dart_IsPausedOnExit() && Dart_ShouldPauseOnExit()) {
- // Mark that we are paused on exit.
- Dart_SetPausedOnExit(true);
- } else {
- isolate_exited_ = true;
- }
- }
-}
-
-void DartMessageHandler::MessageNotifyCallback(Dart_Isolate dest_isolate) {
- auto dart_state = DartState::From(dest_isolate);
- TONIC_CHECK(dart_state);
- dart_state->message_handler().OnMessage(dart_state);
-}
-
-} // namespace tonic
diff --git a/dart_message_handler.h b/dart_message_handler.h
deleted file mode 100644
index 7ce7e38..0000000
--- a/dart_message_handler.h
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2016 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_DART_MESSAGE_HANDLER_H_
-#define LIB_TONIC_DART_MESSAGE_HANDLER_H_
-
-#include <functional>
-
-#include "third_party/dart/runtime/include/dart_api.h"
-#include "tonic/logging/dart_error.h"
-
-namespace tonic {
-class DartState;
-
-class DartMessageHandler {
- public:
- using TaskDispatcher = std::function<void(std::function<void(void)>)>;
-
- DartMessageHandler();
-
- ~DartMessageHandler();
-
- // Messages for the current isolate will be scheduled on |runner|.
- void Initialize(TaskDispatcher dispatcher);
-
- // Handle an unhandled error. If the error is fatal then shut down the
- // isolate. The message handler's isolate must be the current isolate.
- void UnhandledError(Dart_Handle error);
-
- // Did the isolate exit?
- bool isolate_exited() const { return isolate_exited_; }
-
- // Did the isolate have an uncaught exception error?
- bool isolate_had_uncaught_exception_error() const {
- return isolate_had_uncaught_exception_error_;
- }
-
- DartErrorHandleType isolate_last_error() const { return isolate_last_error_; }
-
- protected:
- // Called from an unknown thread for each message.
- void OnMessage(DartState* dart_state);
- // By default, called on the task runner's thread for each message.
- void OnHandleMessage(DartState* dart_state);
-
- bool handled_first_message() const { return handled_first_message_; }
-
- void set_handled_first_message(bool handled_first_message) {
- handled_first_message_ = handled_first_message;
- }
-
- bool handled_first_message_;
- bool isolate_exited_;
- bool isolate_had_uncaught_exception_error_;
- bool isolate_had_fatal_error_;
- DartErrorHandleType isolate_last_error_;
- TaskDispatcher task_dispatcher_;
-
- private:
- static void MessageNotifyCallback(Dart_Isolate dest_isolate);
-};
-
-} // namespace tonic
-
-#endif // LIB_TONIC_DART_MESSAGE_HANDLER_H_
diff --git a/dart_microtask_queue.cc b/dart_microtask_queue.cc
deleted file mode 100644
index 57f7d93..0000000
--- a/dart_microtask_queue.cc
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright 2016 The Fuchsia 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 "tonic/dart_microtask_queue.h"
-
-#include "tonic/common/build_config.h"
-#include "tonic/dart_state.h"
-#include "tonic/logging/dart_invoke.h"
-
-#ifdef OS_IOS
-#include <pthread.h>
-#endif
-
-namespace tonic {
-namespace {
-
-#ifdef OS_IOS
-// iOS doesn't support the thread_local keyword.
-
-pthread_key_t g_queue_key;
-pthread_once_t g_queue_key_once = PTHREAD_ONCE_INIT;
-
-void MakeKey() {
- pthread_key_create(&g_queue_key, nullptr);
-}
-
-void SetQueue(DartMicrotaskQueue* queue) {
- pthread_once(&g_queue_key_once, MakeKey);
- pthread_setspecific(g_queue_key, queue);
-}
-
-DartMicrotaskQueue* GetQueue() {
- return static_cast<tonic::DartMicrotaskQueue*>(
- pthread_getspecific(g_queue_key));
-}
-
-#else
-
-thread_local DartMicrotaskQueue* g_queue = nullptr;
-
-void SetQueue(DartMicrotaskQueue* queue) {
- g_queue = queue;
-}
-
-DartMicrotaskQueue* GetQueue() {
- return g_queue;
-}
-
-#endif
-
-} // namespace
-
-DartMicrotaskQueue::DartMicrotaskQueue() : last_error_(kNoError) {}
-
-DartMicrotaskQueue::~DartMicrotaskQueue() = default;
-
-void DartMicrotaskQueue::StartForCurrentThread() {
- SetQueue(new DartMicrotaskQueue());
-}
-
-DartMicrotaskQueue* DartMicrotaskQueue::GetForCurrentThread() {
- return GetQueue();
-}
-
-void DartMicrotaskQueue::ScheduleMicrotask(Dart_Handle callback) {
- queue_.emplace_back(DartState::Current(), callback);
-}
-
-void DartMicrotaskQueue::RunMicrotasks() {
- while (!queue_.empty()) {
- MicrotaskQueue local;
- std::swap(queue_, local);
- for (const auto& callback : local) {
- if (auto dart_state = callback.dart_state().lock()) {
- DartState::Scope dart_scope(dart_state.get());
- Dart_Handle result = Dart_InvokeClosure(callback.value(), 0, nullptr);
- // If the Dart program has set a return code, then it is intending to shut
- // down by way of a fatal error, and so there is no need to emit a log
- // message.
- if (!dart_state->has_set_return_code() || !Dart_IsError(result) ||
- !Dart_IsFatalError(result)) {
- LogIfError(result);
- }
- DartErrorHandleType error = GetErrorHandleType(result);
- if (error != kNoError) {
- last_error_ = error;
- }
- dart_state->MessageEpilogue(result);
- if (!Dart_CurrentIsolate())
- return;
- }
- }
- }
-}
-
-void DartMicrotaskQueue::Destroy() {
- TONIC_DCHECK(this == GetForCurrentThread());
- SetQueue(nullptr);
- delete this;
-}
-
-DartErrorHandleType DartMicrotaskQueue::GetLastError() {
- return last_error_;
-}
-
-} // namespace tonic
diff --git a/dart_microtask_queue.h b/dart_microtask_queue.h
deleted file mode 100644
index bcb0427..0000000
--- a/dart_microtask_queue.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2016 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_DART_MICROTASK_QUEUE_H_
-#define LIB_TONIC_DART_MICROTASK_QUEUE_H_
-
-#include <vector>
-
-#include "third_party/dart/runtime/include/dart_api.h"
-#include "tonic/dart_persistent_value.h"
-#include "tonic/logging/dart_error.h"
-
-namespace tonic {
-
-class DartMicrotaskQueue {
- public:
- DartMicrotaskQueue();
- ~DartMicrotaskQueue();
-
- static void StartForCurrentThread();
-
- static DartMicrotaskQueue* GetForCurrentThread();
-
- void ScheduleMicrotask(Dart_Handle callback);
- void RunMicrotasks();
- void Destroy();
-
- bool HasMicrotasks() const { return !queue_.empty(); }
-
- DartErrorHandleType GetLastError();
-
- private:
- typedef std::vector<DartPersistentValue> MicrotaskQueue;
-
- DartErrorHandleType last_error_;
- MicrotaskQueue queue_;
-};
-
-} // namespace tonic
-
-#endif // LIB_TONIC_DART_MICROTASK_QUEUE_H_
diff --git a/dart_persistent_value.cc b/dart_persistent_value.cc
deleted file mode 100644
index 997eb27..0000000
--- a/dart_persistent_value.cc
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2015 The Fuchsia 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 "tonic/dart_persistent_value.h"
-
-#include "tonic/dart_state.h"
-#include "tonic/scopes/dart_isolate_scope.h"
-
-namespace tonic {
-
-DartPersistentValue::DartPersistentValue() : value_(nullptr) {}
-
-DartPersistentValue::DartPersistentValue(DartPersistentValue&& other)
- : dart_state_(other.dart_state_), value_(other.value_) {
- other.dart_state_.reset();
- other.value_ = nullptr;
-}
-
-DartPersistentValue::DartPersistentValue(DartState* dart_state,
- Dart_Handle value)
- : value_(nullptr) {
- Set(dart_state, value);
-}
-
-DartPersistentValue::~DartPersistentValue() {
- Clear();
-}
-
-void DartPersistentValue::Set(DartState* dart_state, Dart_Handle value) {
- TONIC_DCHECK(is_empty());
- dart_state_ = dart_state->GetWeakPtr();
- value_ = Dart_NewPersistentHandle(value);
-}
-
-void DartPersistentValue::Clear() {
- if (!value_) {
- return;
- }
-
- auto dart_state = dart_state_.lock();
- if (!dart_state) {
- return;
- }
-
- DartIsolateScope scope(dart_state->isolate());
- Dart_DeletePersistentHandle(value_);
- dart_state_.reset();
- value_ = nullptr;
-}
-
-Dart_Handle DartPersistentValue::Get() {
- if (!value_)
- return nullptr;
- return Dart_HandleFromPersistent(value_);
-}
-
-Dart_Handle DartPersistentValue::Release() {
- Dart_Handle local = Get();
- Clear();
- return local;
-}
-} // namespace tonic
diff --git a/dart_persistent_value.h b/dart_persistent_value.h
deleted file mode 100644
index 3628329..0000000
--- a/dart_persistent_value.h
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2015 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_DART_PERSISTENT_VALUE_H_
-#define LIB_TONIC_DART_PERSISTENT_VALUE_H_
-
-#include <memory>
-
-#include "third_party/dart/runtime/include/dart_api.h"
-#include "tonic/common/macros.h"
-
-namespace tonic {
-class DartState;
-
-// DartPersistentValue is a bookkeeping class to help pair calls to
-// Dart_NewPersistentHandle with Dart_DeletePersistentHandle. Consider using
-// this class instead of holding a Dart_PersistentHandle directly so that you
-// don't leak the Dart_PersistentHandle.
-class DartPersistentValue {
- public:
- DartPersistentValue();
- DartPersistentValue(DartPersistentValue&& other);
- DartPersistentValue(DartState* dart_state, Dart_Handle value);
- ~DartPersistentValue();
-
- Dart_PersistentHandle value() const { return value_; }
- bool is_empty() const { return !value_; }
-
- void Set(DartState* dart_state, Dart_Handle value);
- void Clear();
- Dart_Handle Get();
- Dart_Handle Release();
-
- const std::weak_ptr<DartState>& dart_state() const { return dart_state_; }
-
- private:
- std::weak_ptr<DartState> dart_state_;
- Dart_PersistentHandle value_;
-
- TONIC_DISALLOW_COPY_AND_ASSIGN(DartPersistentValue);
-};
-
-} // namespace tonic
-
-#endif // LIB_TONIC_DART_PERSISTENT_VALUE_H_
diff --git a/dart_state.cc b/dart_state.cc
deleted file mode 100644
index 6b9c265..0000000
--- a/dart_state.cc
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2015 The Fuchsia 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 "tonic/dart_state.h"
-
-#include "tonic/converter/dart_converter.h"
-#include "tonic/dart_class_library.h"
-#include "tonic/dart_message_handler.h"
-#include "tonic/file_loader/file_loader.h"
-
-namespace tonic {
-
-DartState::Scope::Scope(DartState* dart_state)
- : scope_(dart_state->isolate()) {}
-
-DartState::Scope::Scope(std::shared_ptr<DartState> dart_state)
- : scope_(dart_state->isolate()) {}
-
-DartState::Scope::~Scope() {}
-
-DartState::DartState(int dirfd, std::function<void(Dart_Handle)> message_epilogue)
- : isolate_(nullptr),
- class_library_(new DartClassLibrary),
- message_handler_(new DartMessageHandler()),
- file_loader_(new FileLoader(dirfd)),
- message_epilogue_(message_epilogue),
- has_set_return_code_(false) {}
-
-DartState::~DartState() {}
-
-void DartState::SetIsolate(Dart_Isolate isolate) {
- isolate_ = isolate;
- if (!isolate_)
- return;
- DidSetIsolate();
-}
-
-DartState* DartState::From(Dart_Isolate isolate) {
- auto isolate_data = static_cast<std::shared_ptr<DartState>*>(
- Dart_IsolateData(isolate));
- return isolate_data->get();
-}
-
-DartState* DartState::Current() {
- auto isolate_data = static_cast<std::shared_ptr<DartState>*>(
- Dart_CurrentIsolateData());
- return isolate_data->get();
-}
-
-std::weak_ptr<DartState> DartState::GetWeakPtr() {
- return shared_from_this();
-}
-
-void DartState::SetReturnCode(uint32_t return_code) {
- if (set_return_code_callback_) {
- set_return_code_callback_(return_code);
- }
- has_set_return_code_ = true;
-}
-
-void DartState::SetReturnCodeCallback(std::function<void(uint32_t)> callback) {
- set_return_code_callback_ = callback;
-}
-
-void DartState::DidSetIsolate() {}
-
-Dart_Handle DartState::HandleLibraryTag(Dart_LibraryTag tag,
- Dart_Handle library,
- Dart_Handle url) {
- return Current()->file_loader().HandleLibraryTag(tag, library, url);
-}
-
-} // namespace tonic
diff --git a/dart_state.h b/dart_state.h
deleted file mode 100644
index 1c0b774..0000000
--- a/dart_state.h
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright 2015 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_DART_STATE_H_
-#define LIB_TONIC_DART_STATE_H_
-
-#include <functional>
-#include <memory>
-
-#include "third_party/dart/runtime/include/dart_api.h"
-#include "tonic/common/macros.h"
-#include "tonic/dart_persistent_value.h"
-#include "tonic/scopes/dart_api_scope.h"
-#include "tonic/scopes/dart_isolate_scope.h"
-
-namespace tonic {
-class DartClassLibrary;
-class DartMessageHandler;
-class FileLoader;
-
-// DartState represents the state associated with a given Dart isolate. The
-// lifetime of this object is controlled by the DartVM. If you want to hold a
-// reference to a DartState instance, please hold a std::weak_ptr<DartState>.
-//
-// DartState is analogous to gin::PerIsolateData and JSC::ExecState.
-class DartState : public std::enable_shared_from_this<DartState> {
- public:
- class Scope {
- public:
- explicit Scope(DartState* dart_state);
- explicit Scope(std::shared_ptr<DartState> dart_state);
- ~Scope();
-
- private:
- DartIsolateScope scope_;
- DartApiScope api_scope_;
- };
-
- DartState(int dirfd = -1,
- std::function<void(Dart_Handle)> message_epilogue = nullptr);
- virtual ~DartState();
-
- static DartState* From(Dart_Isolate isolate);
- static DartState* Current();
-
- std::weak_ptr<DartState> GetWeakPtr();
-
- Dart_Isolate isolate() { return isolate_; }
- void SetIsolate(Dart_Isolate isolate);
-
- DartClassLibrary& class_library() { return *class_library_; }
- DartMessageHandler& message_handler() { return *message_handler_; }
- FileLoader& file_loader() { return *file_loader_; }
-
- void MessageEpilogue(Dart_Handle message_result) {
- if (message_epilogue_) {
- message_epilogue_(message_result);
- }
- }
- void SetReturnCode(uint32_t return_code);
- void SetReturnCodeCallback(std::function<void(uint32_t)> callback);
- bool has_set_return_code() const { return has_set_return_code_; }
-
- virtual void DidSetIsolate();
-
- static Dart_Handle HandleLibraryTag(Dart_LibraryTag tag,
- Dart_Handle library,
- Dart_Handle url);
-
- private:
- Dart_Isolate isolate_;
- std::unique_ptr<DartClassLibrary> class_library_;
- std::unique_ptr<DartMessageHandler> message_handler_;
- std::unique_ptr<FileLoader> file_loader_;
- std::function<void(Dart_Handle)> message_epilogue_;
- std::function<void(uint32_t)> set_return_code_callback_;
- bool has_set_return_code_;
-
- protected:
- TONIC_DISALLOW_COPY_AND_ASSIGN(DartState);
-};
-
-} // namespace tonic
-
-#endif // LIB_TONIC_DART_STATE_H_
diff --git a/dart_wrappable.cc b/dart_wrappable.cc
deleted file mode 100644
index eed7908..0000000
--- a/dart_wrappable.cc
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright 2015 The Fuchsia 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 "tonic/dart_wrappable.h"
-
-#include "tonic/dart_class_library.h"
-#include "tonic/dart_state.h"
-#include "tonic/dart_wrapper_info.h"
-#include "tonic/logging/dart_error.h"
-
-namespace tonic {
-
-DartWrappable::~DartWrappable() {
- TONIC_CHECK(!dart_wrapper_);
-}
-
-Dart_Handle DartWrappable::CreateDartWrapper(DartState* dart_state) {
- TONIC_DCHECK(!dart_wrapper_);
- const DartWrapperInfo& info = GetDartWrapperInfo();
-
- Dart_PersistentHandle type = dart_state->class_library().GetClass(info);
- TONIC_DCHECK(!LogIfError(type));
-
- intptr_t native_fields[kNumberOfNativeFields];
- native_fields[kPeerIndex] = reinterpret_cast<intptr_t>(this);
- native_fields[kWrapperInfoIndex] = reinterpret_cast<intptr_t>(&info);
- Dart_Handle wrapper =
- Dart_AllocateWithNativeFields(type, kNumberOfNativeFields, native_fields);
- TONIC_DCHECK(!LogIfError(wrapper));
-
- this->RetainDartWrappableReference(); // Balanced in FinalizeDartWrapper.
- dart_wrapper_ = Dart_NewWeakPersistentHandle(
- wrapper, this, GetAllocationSize(), &FinalizeDartWrapper);
-
- return wrapper;
-}
-
-void DartWrappable::AssociateWithDartWrapper(Dart_NativeArguments args) {
- TONIC_DCHECK(!dart_wrapper_);
-
- Dart_Handle wrapper = Dart_GetNativeArgument(args, 0);
- TONIC_CHECK(!LogIfError(wrapper));
-
- intptr_t native_fields[kNumberOfNativeFields];
- TONIC_CHECK(!LogIfError(Dart_GetNativeFieldsOfArgument(
- args, 0, kNumberOfNativeFields, native_fields)));
- TONIC_CHECK(!native_fields[kPeerIndex]);
- TONIC_CHECK(!native_fields[kWrapperInfoIndex]);
-
- const DartWrapperInfo& info = GetDartWrapperInfo();
- TONIC_CHECK(!LogIfError(Dart_SetNativeInstanceField(
- wrapper, kPeerIndex, reinterpret_cast<intptr_t>(this))));
- TONIC_CHECK(!LogIfError(Dart_SetNativeInstanceField(
- wrapper, kWrapperInfoIndex, reinterpret_cast<intptr_t>(&info))));
-
- this->RetainDartWrappableReference(); // Balanced in FinalizeDartWrapper.
- dart_wrapper_ = Dart_NewWeakPersistentHandle(
- wrapper, this, GetAllocationSize(), &FinalizeDartWrapper);
-}
-
-void DartWrappable::ClearDartWrapper() {
- TONIC_DCHECK(dart_wrapper_);
- Dart_Handle wrapper = Dart_HandleFromWeakPersistent(dart_wrapper_);
- TONIC_CHECK(!LogIfError(Dart_SetNativeInstanceField(wrapper, kPeerIndex, 0)));
- TONIC_CHECK(
- !LogIfError(Dart_SetNativeInstanceField(wrapper, kWrapperInfoIndex, 0)));
- Dart_DeleteWeakPersistentHandle(Dart_CurrentIsolate(), dart_wrapper_);
- dart_wrapper_ = nullptr;
- this->ReleaseDartWrappableReference();
-}
-
-void DartWrappable::FinalizeDartWrapper(void* isolate_callback_data,
- Dart_WeakPersistentHandle wrapper,
- void* peer) {
- DartWrappable* wrappable = reinterpret_cast<DartWrappable*>(peer);
- wrappable->dart_wrapper_ = nullptr;
- wrappable->ReleaseDartWrappableReference(); // Balanced in CreateDartWrapper.
-}
-
-size_t DartWrappable::GetAllocationSize() {
- return GetDartWrapperInfo().size_in_bytes;
-}
-
-Dart_PersistentHandle DartWrappable::GetTypeForWrapper(
- tonic::DartState* dart_state,
- const tonic::DartWrapperInfo& wrapper_info) {
- return dart_state->class_library().GetClass(wrapper_info);
-}
-
-DartWrappable* DartConverterWrappable::FromDart(Dart_Handle handle) {
- intptr_t peer = 0;
- Dart_Handle result =
- Dart_GetNativeInstanceField(handle, DartWrappable::kPeerIndex, &peer);
- if (Dart_IsError(result))
- return nullptr;
- return reinterpret_cast<DartWrappable*>(peer);
-}
-
-DartWrappable* DartConverterWrappable::FromArguments(Dart_NativeArguments args,
- int index,
- Dart_Handle& exception) {
- intptr_t native_fields[DartWrappable::kNumberOfNativeFields];
- Dart_Handle result = Dart_GetNativeFieldsOfArgument(
- args, index, DartWrappable::kNumberOfNativeFields, native_fields);
- if (Dart_IsError(result)) {
- exception = Dart_NewStringFromCString(DartError::kInvalidArgument);
- return nullptr;
- }
- if (!native_fields[DartWrappable::kPeerIndex])
- return nullptr;
- return reinterpret_cast<DartWrappable*>(
- native_fields[DartWrappable::kPeerIndex]);
-}
-
-} // namespace tonic
diff --git a/dart_wrappable.h b/dart_wrappable.h
deleted file mode 100644
index ea88fdc..0000000
--- a/dart_wrappable.h
+++ /dev/null
@@ -1,190 +0,0 @@
-// Copyright 2015 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_DART_WRAPPABLE_H_
-#define LIB_TONIC_DART_WRAPPABLE_H_
-
-#include "third_party/dart/runtime/include/dart_api.h"
-#include "tonic/common/macros.h"
-#include "tonic/converter/dart_converter.h"
-#include "tonic/dart_state.h"
-#include "tonic/dart_wrapper_info.h"
-#include "tonic/logging/dart_error.h"
-
-#include <type_traits>
-
-namespace tonic {
-
-// DartWrappable is a base class that you can inherit from in order to be
-// exposed to Dart code as an interface.
-class DartWrappable {
- public:
- enum DartNativeFields {
- kPeerIndex, // Must be first to work with Dart_GetNativeReceiver.
- kWrapperInfoIndex,
- kNumberOfNativeFields,
- };
-
- DartWrappable() : dart_wrapper_(nullptr) {}
-
- // Subclasses that wish to expose a new interface must override this function
- // and provide information about their wrapper. There is no need to call your
- // base class's implementation of this function.
- // Implement using IMPLEMENT_WRAPPERTYPEINFO macro
- virtual const DartWrapperInfo& GetDartWrapperInfo() const = 0;
-
- // Override this to customize the object size reported to the Dart garbage
- // collector.
- // Implement using IMPLEMENT_WRAPPERTYPEINFO macro
- virtual size_t GetAllocationSize();
-
- virtual void RetainDartWrappableReference() const = 0;
-
- virtual void ReleaseDartWrappableReference() const = 0;
-
- Dart_Handle CreateDartWrapper(DartState* dart_state);
- void AssociateWithDartWrapper(Dart_NativeArguments args);
- void ClearDartWrapper(); // Warning: Might delete this.
- Dart_WeakPersistentHandle dart_wrapper() const { return dart_wrapper_; }
-
- protected:
- virtual ~DartWrappable();
-
- static Dart_PersistentHandle GetTypeForWrapper(
- tonic::DartState* dart_state,
- const tonic::DartWrapperInfo& wrapper_info);
-
- private:
- static void FinalizeDartWrapper(void* isolate_callback_data,
- Dart_WeakPersistentHandle wrapper,
- void* peer);
-
- Dart_WeakPersistentHandle dart_wrapper_;
-
- TONIC_DISALLOW_COPY_AND_ASSIGN(DartWrappable);
-};
-
-#define DEFINE_WRAPPERTYPEINFO() \
- public: \
- const tonic::DartWrapperInfo& GetDartWrapperInfo() const override { \
- return dart_wrapper_info_; \
- } \
- static Dart_PersistentHandle GetDartType(tonic::DartState* dart_state) { \
- return GetTypeForWrapper(dart_state, dart_wrapper_info_); \
- } \
- \
- private: \
- static const tonic::DartWrapperInfo& dart_wrapper_info_
-
-#define IMPLEMENT_WRAPPERTYPEINFO(LibraryName, ClassName) \
- static const tonic::DartWrapperInfo \
- kDartWrapperInfo_##LibraryName_##ClassName = { \
- #LibraryName, \
- #ClassName, \
- sizeof(ClassName), \
- }; \
- const tonic::DartWrapperInfo& ClassName::dart_wrapper_info_ = \
- kDartWrapperInfo_##LibraryName_##ClassName;
-
-struct DartConverterWrappable {
- static DartWrappable* FromDart(Dart_Handle handle);
- static DartWrappable* FromArguments(Dart_NativeArguments args,
- int index,
- Dart_Handle& exception);
-};
-
-template <typename T>
-struct DartConverter<
- T*,
- typename std::enable_if<
- std::is_convertible<T*, const DartWrappable*>::value>::type> {
- static Dart_Handle ToDart(DartWrappable* val) {
- if (!val)
- return Dart_Null();
- if (Dart_WeakPersistentHandle wrapper = val->dart_wrapper())
- return Dart_HandleFromWeakPersistent(wrapper);
- return val->CreateDartWrapper(DartState::Current());
- }
-
- static void SetReturnValue(Dart_NativeArguments args,
- DartWrappable* val,
- bool auto_scope = true) {
- if (!val)
- Dart_SetReturnValue(args, Dart_Null());
- else if (Dart_WeakPersistentHandle wrapper = val->dart_wrapper())
- Dart_SetWeakHandleReturnValue(args, wrapper);
- else
- Dart_SetReturnValue(args, val->CreateDartWrapper(DartState::Current()));
- }
-
- static T* FromDart(Dart_Handle handle) {
- // TODO(abarth): We're missing a type check.
- return static_cast<T*>(DartConverterWrappable::FromDart(handle));
- }
-
- static T* FromArguments(Dart_NativeArguments args,
- int index,
- Dart_Handle& exception,
- bool auto_scope = true) {
- // TODO(abarth): We're missing a type check.
- return static_cast<T*>(
- DartConverterWrappable::FromArguments(args, index, exception));
- }
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// Support for generic smart pointers that have a "get" method that returns a
-// pointer to a type that is Dart convertible as well as a constructor that
-// adopts a raw pointer to that type.
-
-template <template <typename T> class PTR, typename T>
-struct DartConverter<PTR<T>> {
- static Dart_Handle ToDart(const PTR<T>& val) {
- return DartConverter<T*>::ToDart(val.get());
- }
-
- static PTR<T> FromDart(Dart_Handle handle) {
- return DartConverter<T*>::FromDart(handle);
- }
-
- static PTR<T> FromArguments(Dart_NativeArguments args,
- int index,
- Dart_Handle& exception,
- bool auto_scope = true) {
- return PTR<T>(
- DartConverter<T*>::FromArguments(args, index, exception, auto_scope));
- }
-
- static void SetReturnValue(Dart_NativeArguments args,
- const PTR<T>& val,
- bool auto_scope = true) {
- DartConverter<T*>::SetReturnValue(args, val.get());
- }
-};
-
-template <template <typename T> class PTR, typename T>
-struct DartListFactory<
- PTR<T>,
- typename std::enable_if<
- std::is_convertible<T*, const DartWrappable*>::value>::type> {
- static Dart_Handle NewList(intptr_t length) {
- Dart_PersistentHandle type = T::GetDartType(DartState::Current());
- TONIC_DCHECK(!LogIfError(type));
- return Dart_NewListOfType(Dart_HandleFromPersistent(type), length);
- }
-};
-
-template <typename T>
-inline T* GetReceiver(Dart_NativeArguments args) {
- intptr_t receiver;
- Dart_Handle result = Dart_GetNativeReceiver(args, &receiver);
- TONIC_DCHECK(!Dart_IsError(result));
- if (!receiver)
- Dart_ThrowException(ToDart("Object has been disposed."));
- return static_cast<T*>(reinterpret_cast<DartWrappable*>(receiver));
-}
-
-} // namespace tonic
-
-#endif // LIB_TONIC_DART_WRAPPABLE_H_
diff --git a/dart_wrapper_info.h b/dart_wrapper_info.h
deleted file mode 100644
index d5b1f6f..0000000
--- a/dart_wrapper_info.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2015 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_DART_WRAPPER_INFO_H_
-#define LIB_TONIC_DART_WRAPPER_INFO_H_
-
-#include <cstddef>
-
-namespace tonic {
-class DartWrappable;
-
-typedef void (*DartWrappableAccepter)(DartWrappable*);
-
-struct DartWrapperInfo {
- const char* library_name;
- const char* interface_name;
- const size_t size_in_bytes;
-
- private:
- DartWrapperInfo(const DartWrapperInfo&) = delete;
- DartWrapperInfo& operator=(const DartWrapperInfo&) = delete;
-};
-
-} // namespace tonic
-
-#endif // LIB_TONIC_DART_WRAPPER_INFO_H_
diff --git a/file_loader/BUILD.gn b/file_loader/BUILD.gn
deleted file mode 100644
index 0d6425f..0000000
--- a/file_loader/BUILD.gn
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright 2016 The Fuchsia Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-source_set("file_loader") {
- visibility = [ "../*" ]
-
- configs += [ "../:config" ]
-
- sources = [
- "file_loader.cc",
- "file_loader.h",
- ]
-
- if (is_win) {
- sources += [ "file_loader_win.cc" ]
- } else if (is_fuchsia) {
- sources += [ "file_loader_fuchsia.cc" ]
- } else {
- sources += [ "file_loader_posix.cc" ]
- }
-
- deps = [
- "../common",
- "../converter",
- "../filesystem",
- "../parsers",
- "../platform",
- "//third_party/dart/runtime:dart_api",
- ]
-}
diff --git a/file_loader/file_loader.cc b/file_loader/file_loader.cc
deleted file mode 100644
index 0acae19..0000000
--- a/file_loader/file_loader.cc
+++ /dev/null
@@ -1,240 +0,0 @@
-// Copyright 2016 The Fuchsia 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 "tonic/file_loader/file_loader.h"
-
-#include <iostream>
-#include <memory>
-#include <utility>
-
-#include "filesystem/file.h"
-#include "filesystem/path.h"
-#include "filesystem/portable_unistd.h"
-#include "tonic/common/macros.h"
-#include "tonic/converter/dart_converter.h"
-#include "tonic/parsers/packages_map.h"
-#include "tonic/platform/platform_utils.h"
-
-namespace tonic {
-namespace {
-
-constexpr char kDartScheme[] = "dart:";
-
-constexpr char kFileScheme[] = "file:";
-constexpr size_t kFileSchemeLength = sizeof(kFileScheme) - 1;
-
-constexpr char kPackageScheme[] = "package:";
-constexpr size_t kPackageSchemeLength = sizeof(kPackageScheme) - 1;
-
-// Extract the scheme prefix ('package:' or 'file:' from )
-std::string ExtractSchemePrefix(std::string url) {
- if (url.find(kPackageScheme) == 0u)
- return kPackageScheme;
- if (url.find(kFileScheme) == 0u)
- return kFileScheme;
- return std::string();
-}
-
-// Extract the path from a package: or file: url.
-std::string ExtractPath(std::string url) {
- if (url.find(kPackageScheme) == 0u)
- return url.substr(kPackageSchemeLength);
- if (url.find(kFileScheme) == 0u)
- return url.substr(kFileSchemeLength);
- return url;
-}
-
-} // namespace
-
-FileLoader::FileLoader(int dirfd) : dirfd_(dirfd) {}
-
-FileLoader::~FileLoader() {
- for (auto kernel_buffer : kernel_buffers_)
- free(kernel_buffer);
-
- if (dirfd_ >= 0)
- close(dirfd_);
-}
-
-std::string FileLoader::SanitizeURIEscapedCharacters(const std::string& str) {
- std::string result;
- result.reserve(str.size());
- for (std::string::size_type i = 0; i < str.size(); ++i) {
- if (str[i] == '%') {
- if (i > str.size() - 3 || !isxdigit(str[i + 1]) || !isxdigit(str[i + 2]))
- return "";
- const std::string hex = str.substr(i + 1, 2);
- const unsigned char c = strtoul(hex.c_str(), nullptr, 16);
- if (!c)
- return "";
- result += c;
- i += 2;
- } else {
- result += str[i];
- }
- }
- return result;
-}
-
-bool FileLoader::LoadPackagesMap(const std::string& packages) {
- packages_ = packages;
- std::string packages_source;
- if (!ReadFileToString(packages_, &packages_source)) {
- tonic::Log("error: Unable to load .packages file '%s'.", packages_.c_str());
- return false;
- }
- packages_map_.reset(new PackagesMap());
- std::string error;
- if (!packages_map_->Parse(packages_source, &error)) {
- tonic::Log("error: Unable to parse .packages file '%s'. %s",
- packages_.c_str(), error.c_str());
- return false;
- }
- return true;
-}
-
-std::string FileLoader::GetFilePathForPackageURL(std::string url) {
- if (!packages_map_)
- return std::string();
- TONIC_DCHECK(url.find(kPackageScheme) == 0u);
- url = url.substr(kPackageSchemeLength);
-
- size_t slash = url.find(FileLoader::kPathSeparator);
- if (slash == std::string::npos)
- return std::string();
- std::string package = url.substr(0, slash);
- std::string library_path = url.substr(slash + 1);
- std::string package_path = packages_map_->Resolve(package);
- if (package_path.empty())
- return std::string();
- if (package_path.find(FileLoader::kFileURLPrefix) == 0u)
- return SanitizePath(package_path.substr(FileLoader::kFileURLPrefixLength) +
- library_path);
- return filesystem::GetDirectoryName(filesystem::AbsolutePath(packages_)) +
- FileLoader::kPathSeparator + package_path +
- FileLoader::kPathSeparator + library_path;
-}
-
-Dart_Handle FileLoader::HandleLibraryTag(Dart_LibraryTag tag,
- Dart_Handle library,
- Dart_Handle url) {
- TONIC_DCHECK(Dart_IsNull(library) || Dart_IsLibrary(library) ||
- Dart_IsString(library));
- TONIC_DCHECK(Dart_IsString(url));
- if (tag == Dart_kCanonicalizeUrl)
- return CanonicalizeURL(library, url);
- if (tag == Dart_kKernelTag)
- return Kernel(url);
- if (tag == Dart_kImportTag)
- return Import(url);
- return Dart_NewApiError("Unknown library tag.");
-}
-
-Dart_Handle FileLoader::CanonicalizeURL(Dart_Handle library, Dart_Handle url) {
- std::string string = StdStringFromDart(url);
- if (string.find(kDartScheme) == 0u)
- return url;
- if (string.find(kPackageScheme) == 0u)
- return StdStringToDart(SanitizePath(string));
- if (string.find(kFileScheme) == 0u)
- return StdStringToDart(SanitizePath(CanonicalizeFileURL(string)));
-
- std::string library_url = StdStringFromDart(Dart_LibraryUrl(library));
- std::string prefix = ExtractSchemePrefix(library_url);
- std::string base_path = ExtractPath(library_url);
- std::string simplified_path =
- filesystem::SimplifyPath(filesystem::GetDirectoryName(base_path) +
- FileLoader::kPathSeparator + string);
- return StdStringToDart(SanitizePath(prefix + simplified_path));
-}
-
-std::string FileLoader::GetFilePathForURL(std::string url) {
- if (url.find(kPackageScheme) == 0u)
- return GetFilePathForPackageURL(std::move(url));
- if (url.find(kFileScheme) == 0u)
- return GetFilePathForFileURL(std::move(url));
- return url;
-}
-
-Dart_Handle FileLoader::FetchBytes(const std::string& url,
- uint8_t*& buffer,
- intptr_t& buffer_size) {
- buffer = nullptr;
- buffer_size = -1;
-
- std::string path = filesystem::SimplifyPath(GetFilePathForURL(url));
- if (path.empty()) {
- std::string error_message = "error: Unable to read '" + url + "'.";
- return Dart_NewUnhandledExceptionError(
- Dart_NewStringFromCString(error_message.c_str()));
- }
- std::string absolute_path = filesystem::GetAbsoluteFilePath(path);
- auto result = filesystem::ReadFileToBytes(absolute_path);
- if (result.first == nullptr) {
- std::string error_message =
- "error: Unable to read '" + absolute_path + "'.";
- return Dart_NewUnhandledExceptionError(
- Dart_NewStringFromCString(error_message.c_str()));
- }
- buffer = result.first;
- buffer_size = result.second;
- return Dart_True();
-}
-
-Dart_Handle FileLoader::Import(Dart_Handle url) {
- std::string url_string = StdStringFromDart(url);
- uint8_t* buffer = nullptr;
- intptr_t buffer_size = -1;
- Dart_Handle result = FetchBytes(url_string, buffer, buffer_size);
- if (Dart_IsError(result)) {
- return result;
- }
- // The embedder must keep the buffer alive until isolate shutdown.
- kernel_buffers_.push_back(buffer);
- return Dart_LoadLibraryFromKernel(buffer, buffer_size);
-}
-
-namespace {
-void MallocFinalizer(void* isolate_callback_data,
- Dart_WeakPersistentHandle handle,
- void* peer) {
- free(peer);
-}
-} // namespace
-
-Dart_Handle FileLoader::Kernel(Dart_Handle url) {
- std::string url_string = StdStringFromDart(url);
- uint8_t* buffer = nullptr;
- intptr_t buffer_size = -1;
- Dart_Handle result = FetchBytes(url_string, buffer, buffer_size);
- if (Dart_IsError(result)) {
- return result;
- }
- result =
- Dart_NewExternalTypedData(Dart_TypedData_kUint8, buffer, buffer_size);
- Dart_NewWeakPersistentHandle(result, buffer, buffer_size, MallocFinalizer);
- return result;
-}
-
-// This is invoked upon a reload request.
-void FileLoader::SetPackagesUrl(Dart_Handle url) {
- if (url == Dart_Null()) {
- // No packages url specified.
- LoadPackagesMap(packages());
- return;
- }
- const std::string& packages_url = StdStringFromDart(url);
- LoadPackagesMap(packages_url);
-}
-
-std::string FileLoader::GetFilePathForFileURL(std::string url) {
- TONIC_DCHECK(url.find(FileLoader::kFileURLPrefix) == 0u);
- return SanitizePath(url.substr(FileLoader::kFileURLPrefixLength));
-}
-
-std::string FileLoader::GetFileURLForPath(const std::string& path) {
- return std::string(FileLoader::kFileURLPrefix) + path;
-}
-
-} // namespace tonic
diff --git a/file_loader/file_loader.h b/file_loader/file_loader.h
deleted file mode 100644
index 5a25058..0000000
--- a/file_loader/file_loader.h
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2016 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_FILE_LOADER_FILE_LOADER_H_
-#define LIB_TONIC_FILE_LOADER_FILE_LOADER_H_
-
-#include <memory>
-#include <set>
-#include <string>
-#include <vector>
-
-#include "third_party/dart/runtime/include/dart_api.h"
-#include "tonic/common/macros.h"
-#include "tonic/parsers/packages_map.h"
-
-namespace tonic {
-
-class FileLoader {
- public:
- FileLoader(int dirfd = -1);
- ~FileLoader();
-
- bool LoadPackagesMap(const std::string& packages);
-
- // The path to the `.packages` file the packages map was loaded from.
- const std::string& packages() const { return packages_; }
-
- Dart_Handle HandleLibraryTag(Dart_LibraryTag tag,
- Dart_Handle library,
- Dart_Handle url);
-
- Dart_Handle CanonicalizeURL(Dart_Handle library, Dart_Handle url);
- Dart_Handle Import(Dart_Handle url);
- Dart_Handle Kernel(Dart_Handle url);
- void SetPackagesUrl(Dart_Handle url);
-
- Dart_Handle FetchBytes(const std::string& url,
- uint8_t*& buffer,
- intptr_t& buffer_size);
-
- static const char kFileURLPrefix[];
- static const size_t kFileURLPrefixLength;
- static const std::string kPathSeparator;
-
- private:
- static std::string SanitizeURIEscapedCharacters(const std::string& str);
- static std::string SanitizePath(const std::string& path);
- static std::string CanonicalizeFileURL(const std::string& url);
-
- std::string GetFilePathForURL(std::string url);
- std::string GetFilePathForPackageURL(std::string url);
- std::string GetFilePathForFileURL(std::string url);
-
- std::string GetFileURLForPath(const std::string& path);
-
- bool ReadFileToString(const std::string& path, std::string* result);
- std::pair<uint8_t*, intptr_t> ReadFileToBytes(const std::string& path);
-
- int dirfd_;
- std::string packages_;
- std::unique_ptr<PackagesMap> packages_map_;
- std::vector<uint8_t*> kernel_buffers_;
-
- TONIC_DISALLOW_COPY_AND_ASSIGN(FileLoader);
-};
-
-} // namespace tonic
-
-#endif // LIB_TONIC_FILE_LOADER_FILE_LOADER_H_
diff --git a/file_loader/file_loader_fuchsia.cc b/file_loader/file_loader_fuchsia.cc
deleted file mode 100644
index 9e125a5..0000000
--- a/file_loader/file_loader_fuchsia.cc
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2017 The Fuchsia 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 "tonic/file_loader/file_loader.h"
-
-#include <dirent.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/types.h>
-
-#include <iostream>
-#include <memory>
-#include <utility>
-
-#include "filesystem/file.h"
-#include "filesystem/path.h"
-#include "tonic/common/macros.h"
-#include "tonic/converter/dart_converter.h"
-#include "tonic/parsers/packages_map.h"
-
-namespace tonic {
-
-const std::string FileLoader::kPathSeparator = "/";
-const char FileLoader::kFileURLPrefix[] = "file://";
-const size_t FileLoader::kFileURLPrefixLength =
- sizeof(FileLoader::kFileURLPrefix) - 1;
-
-namespace {
-
-const size_t kFileSchemeLength = FileLoader::kFileURLPrefixLength - 2;
-
-} // namespace
-
-std::string FileLoader::SanitizePath(const std::string& url) {
- return SanitizeURIEscapedCharacters(url);
-}
-
-std::string FileLoader::CanonicalizeFileURL(const std::string& url) {
- return url.substr(kFileSchemeLength);
-}
-
-bool FileLoader::ReadFileToString(const std::string& path,
- std::string* result) {
- if (dirfd_ == -1)
- return filesystem::ReadFileToString(path, result);
- const char* cpath = path.c_str();
- const int offset = (cpath[0] == '/') ? 1 : 0;
- filesystem::Descriptor fd(openat(dirfd_, &cpath[offset], O_RDONLY));
- return filesystem::ReadFileDescriptorToString(fd.get(), result);
-}
-
-std::pair<uint8_t*, intptr_t> FileLoader::ReadFileToBytes(
- const std::string& path) {
- if (dirfd_ == -1)
- return filesystem::ReadFileToBytes(path);
- const char* cpath = path.c_str();
- const int offset = (cpath[0] == '/') ? 1 : 0;
- filesystem::Descriptor fd(openat(dirfd_, &cpath[offset], O_RDONLY));
- return filesystem::ReadFileDescriptorToBytes(fd.get());
-}
-
-} // namespace tonic
diff --git a/file_loader/file_loader_posix.cc b/file_loader/file_loader_posix.cc
deleted file mode 100644
index 022b117..0000000
--- a/file_loader/file_loader_posix.cc
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2017 The Fuchsia 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 "tonic/file_loader/file_loader.h"
-
-#include <iostream>
-#include <memory>
-#include <utility>
-
-#include "filesystem/file.h"
-#include "filesystem/path.h"
-#include "tonic/common/macros.h"
-#include "tonic/converter/dart_converter.h"
-#include "tonic/parsers/packages_map.h"
-
-namespace tonic {
-
-const std::string FileLoader::kPathSeparator = "/";
-const char FileLoader::kFileURLPrefix[] = "file://";
-const size_t FileLoader::kFileURLPrefixLength =
- sizeof(FileLoader::kFileURLPrefix) - 1;
-
-namespace {
-
-const size_t kFileSchemeLength = FileLoader::kFileURLPrefixLength - 2;
-
-} // namespace
-
-std::string FileLoader::SanitizePath(const std::string& url) {
- return SanitizeURIEscapedCharacters(url);
-}
-
-std::string FileLoader::CanonicalizeFileURL(const std::string& url) {
- return url.substr(kFileSchemeLength);
-}
-
-bool FileLoader::ReadFileToString(const std::string& path,
- std::string* result) {
- TONIC_DCHECK(dirfd_ == -1);
- return filesystem::ReadFileToString(path, result);
-}
-
-std::pair<uint8_t*, intptr_t> FileLoader::ReadFileToBytes(
- const std::string& path) {
- TONIC_DCHECK(dirfd_ == -1);
- return filesystem::ReadFileToBytes(path);
-}
-
-} // namespace tonic
diff --git a/file_loader/file_loader_win.cc b/file_loader/file_loader_win.cc
deleted file mode 100644
index 7447dc3..0000000
--- a/file_loader/file_loader_win.cc
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2017 The Fuchsia 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 "tonic/file_loader/file_loader.h"
-
-#include <iostream>
-#include <memory>
-#include <utility>
-
-#include "filesystem/file.h"
-#include "filesystem/path.h"
-#include "tonic/common/macros.h"
-#include "tonic/parsers/packages_map.h"
-
-namespace tonic {
-namespace {
-
-void FindAndReplaceInPlace(std::string& str,
- const std::string& findStr,
- const std::string& replaceStr) {
- size_t pos = 0;
- while ((pos = str.find(findStr, pos)) != std::string::npos) {
- str.replace(pos, findStr.length(), replaceStr);
- pos += replaceStr.length();
- }
-}
-
-} // namespace
-
-const char FileLoader::kFileURLPrefix[] = "file:///";
-const size_t FileLoader::kFileURLPrefixLength =
- sizeof(FileLoader::kFileURLPrefix) - 1;
-const std::string FileLoader::kPathSeparator = "\\";
-
-std::string FileLoader::SanitizePath(const std::string& url) {
- std::string sanitized = url;
- FindAndReplaceInPlace(sanitized, "/", FileLoader::kPathSeparator);
- return SanitizeURIEscapedCharacters(sanitized);
-}
-
-std::string FileLoader::CanonicalizeFileURL(const std::string& url) {
- return SanitizePath(url.substr(FileLoader::kFileURLPrefixLength));
-}
-
-bool FileLoader::ReadFileToString(const std::string& path,
- std::string* result) {
- TONIC_DCHECK(dirfd_ == -1);
- return filesystem::ReadFileToString(path, result);
-}
-
-std::pair<uint8_t*, intptr_t> FileLoader::ReadFileToBytes(
- const std::string& path) {
- TONIC_DCHECK(dirfd_ == -1);
- return filesystem::ReadFileToBytes(path);
-}
-
-} // namespace tonic
diff --git a/filesystem/BUILD.gn b/filesystem/BUILD.gn
deleted file mode 100644
index c61511f..0000000
--- a/filesystem/BUILD.gn
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright 2018 The Fuchsia Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-group("filesystem") {
- public_deps = [
- "filesystem",
- ]
-}
diff --git a/filesystem/README.md b/filesystem/README.md
deleted file mode 100644
index a97e8f8..0000000
--- a/filesystem/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-Files
-=====
-
-A simple cross-platform library with minimal dependencies to work with files and paths.
\ No newline at end of file
diff --git a/filesystem/filesystem/BUILD.gn b/filesystem/filesystem/BUILD.gn
deleted file mode 100644
index 1fd704f..0000000
--- a/filesystem/filesystem/BUILD.gn
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright 2018 The Fuchsia Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-config("filesystem_config") {
- visibility = [ ":*" ]
-
- # We want callers to refer to headers in this folders using the "files"
- # prefix.
- include_dirs = [ ".." ]
-}
-
-source_set("filesystem") {
- visibility = [ "../*" ]
-
- configs += [ "../../:config" ]
-
- sources = [
- "eintr_wrapper.h",
- "file.cc",
- "file.h",
- "path.h",
- "portable_unistd.h",
- ]
-
- if (is_win) {
- sources += [ "path_win.cc" ]
- } else {
- sources += [ "path_posix.cc" ]
- }
-
- deps = [
- "../../common",
- ]
-
- public_configs = [ ":filesystem_config" ]
-}
diff --git a/filesystem/filesystem/eintr_wrapper.h b/filesystem/filesystem/eintr_wrapper.h
deleted file mode 100644
index ef4c6ae..0000000
--- a/filesystem/filesystem/eintr_wrapper.h
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2016 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef FILESYSTEM_EINTR_WRAPPER_H_
-#define FILESYSTEM_EINTR_WRAPPER_H_
-
-#include <errno.h>
-
-#include "tonic/common/build_config.h"
-
-#if defined(OS_WIN)
-
-// Windows has no concept of EINTR.
-#define HANDLE_EINTR(x) (x)
-#define IGNORE_EINTR(x) (x)
-
-#else
-
-#if defined(NDEBUG)
-
-#define HANDLE_EINTR(x) \
- ({ \
- decltype(x) eintr_wrapper_result; \
- do { \
- eintr_wrapper_result = (x); \
- } while (eintr_wrapper_result == -1 && errno == EINTR); \
- eintr_wrapper_result; \
- })
-
-#else
-
-#define HANDLE_EINTR(x) \
- ({ \
- int eintr_wrapper_counter = 0; \
- decltype(x) eintr_wrapper_result; \
- do { \
- eintr_wrapper_result = (x); \
- } while (eintr_wrapper_result == -1 && errno == EINTR && \
- eintr_wrapper_counter++ < 100); \
- eintr_wrapper_result; \
- })
-
-#endif // NDEBUG
-
-#define IGNORE_EINTR(x) \
- ({ \
- decltype(x) eintr_wrapper_result; \
- do { \
- eintr_wrapper_result = (x); \
- if (eintr_wrapper_result == -1 && errno == EINTR) { \
- eintr_wrapper_result = 0; \
- } \
- } while (0); \
- eintr_wrapper_result; \
- })
-
-#endif // defined(OS_WIN)
-
-#endif // FILESYSTEM_EINTR_WRAPPER_H_
diff --git a/filesystem/filesystem/file.cc b/filesystem/filesystem/file.cc
deleted file mode 100644
index 44dafc4..0000000
--- a/filesystem/filesystem/file.cc
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright 2016 The Fuchsia 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 "filesystem/file.h"
-
-#include <fcntl.h>
-#include <limits.h>
-#include <stdint.h>
-#include <sys/stat.h>
-
-#include "tonic/common/build_config.h"
-
-#if defined(OS_WIN)
-#define BINARY_MODE _O_BINARY
-#else
-#define BINARY_MODE 0
-#endif
-
-#if defined(OS_WIN)
-#include <BaseTsd.h>
-typedef SSIZE_T ssize_t;
-#endif
-
-#include "filesystem/eintr_wrapper.h"
-#include "filesystem/portable_unistd.h"
-
-namespace filesystem {
-namespace {
-
-template <typename T>
-bool ReadFileDescriptor(int fd, T* result) {
- if (!result) {
- return false;
- }
-
- result->clear();
-
- if (fd < 0)
- return false;
-
- constexpr size_t kBufferSize = 1 << 16;
- size_t offset = 0;
- ssize_t bytes_read = 0;
- do {
- offset += bytes_read;
- result->resize(offset + kBufferSize);
- bytes_read = HANDLE_EINTR(read(fd, &(*result)[offset], kBufferSize));
- } while (bytes_read > 0);
-
- if (bytes_read < 0) {
- result->clear();
- return false;
- }
-
- result->resize(offset + bytes_read);
- return true;
-}
-
-} // namespace
-
-std::pair<uint8_t*, intptr_t> ReadFileDescriptorToBytes(int fd) {
- std::pair<uint8_t*, intptr_t> failure_pair{nullptr, -1};
- struct stat st;
- if (fstat(fd, &st) != 0) {
- return failure_pair;
- }
- intptr_t file_size = st.st_size;
- uint8_t* ptr = (uint8_t*)malloc(file_size);
-
- size_t bytes_left = file_size;
- size_t offset = 0;
- while (bytes_left > 0) {
- ssize_t bytes_read = HANDLE_EINTR(read(fd, &ptr[offset], bytes_left));
- if (bytes_read < 0) {
- return failure_pair;
- }
- offset += bytes_read;
- bytes_left -= bytes_read;
- }
- return std::pair<uint8_t*, intptr_t>(ptr, file_size);
-}
-
-bool ReadFileToString(const std::string& path, std::string* result) {
- Descriptor fd(open(path.c_str(), O_RDONLY));
- return ReadFileDescriptor(fd.get(), result);
-}
-
-bool ReadFileDescriptorToString(int fd, std::string* result) {
- return ReadFileDescriptor(fd, result);
-}
-
-std::pair<uint8_t*, intptr_t> ReadFileToBytes(const std::string& path) {
- std::pair<uint8_t*, intptr_t> failure_pair{nullptr, -1};
- Descriptor fd(open(path.c_str(), O_RDONLY | BINARY_MODE));
- if (!fd.is_valid())
- return failure_pair;
- return ReadFileDescriptorToBytes(fd.get());
-}
-
-} // namespace filesystem
diff --git a/filesystem/filesystem/file.h b/filesystem/filesystem/file.h
deleted file mode 100644
index 7b85b97..0000000
--- a/filesystem/filesystem/file.h
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2016 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef FILESYSTEM_FILE_H_
-#define FILESYSTEM_FILE_H_
-
-#include <string>
-#include <vector>
-
-#include "filesystem/eintr_wrapper.h"
-#include "filesystem/portable_unistd.h"
-
-namespace filesystem {
-
-class Descriptor {
- public:
- using Handle = int;
-
- Descriptor(Handle handle) : handle_(handle) {}
-
- ~Descriptor() {
- if (is_valid()) {
- IGNORE_EINTR(::close(handle_));
- }
- }
-
- bool is_valid() { return handle_ >= 0; }
-
- Handle get() { return handle_; }
-
- private:
- Handle handle_ = -1;
-
- Descriptor(Descriptor&) = delete;
-
- void operator=(const Descriptor&) = delete;
-};
-
-// Reads the contents of the file at the given path or file descriptor and
-// stores the data in result. Returns true if the file was read successfully,
-// otherwise returns false. If this function returns false, |result| will be
-// the empty string.
-bool ReadFileToString(const std::string& path, std::string* result);
-bool ReadFileDescriptorToString(int fd, std::string* result);
-
-// Reads the contents of the file at the given path and if successful, returns
-// pair of read allocated bytes with data and size of the data if succesful.
-// pair of <nullptr, -1> if read failed.
-std::pair<uint8_t*, intptr_t> ReadFileToBytes(const std::string& path);
-std::pair<uint8_t*, intptr_t> ReadFileDescriptorToBytes(int fd);
-
-} // namespace filesystem
-
-#endif // FILESYSTEM_FILE_H_
diff --git a/filesystem/filesystem/path.h b/filesystem/filesystem/path.h
deleted file mode 100644
index 1c87a35..0000000
--- a/filesystem/filesystem/path.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2016 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef FILESYSTEM_PATH_H_
-#define FILESYSTEM_PATH_H_
-
-#include <string>
-
-namespace filesystem {
-
-// Resolves ".." and "." components of the path syntactically without consulting
-// the file system.
-std::string SimplifyPath(std::string path);
-
-// Returns the absolute path of a possibly relative path.
-// It doesn't consult the filesystem or simplify the path.
-std::string AbsolutePath(const std::string& path);
-
-// Returns the directory name component of the given path.
-std::string GetDirectoryName(const std::string& path);
-
-// Returns the basename component of the given path by stripping everything up
-// to and including the last slash.
-std::string GetBaseName(const std::string& path);
-
-// Returns the real path for the given path by unwinding symbolic links and
-// directory traversals.
-std::string GetAbsoluteFilePath(const std::string& path);
-
-} // namespace filesystem
-
-#endif // FILESYSTEM_PATH_H_
diff --git a/filesystem/filesystem/path_posix.cc b/filesystem/filesystem/path_posix.cc
deleted file mode 100644
index 0cb704b..0000000
--- a/filesystem/filesystem/path_posix.cc
+++ /dev/null
@@ -1,188 +0,0 @@
-// Copyright 2016 The Fuchsia 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 "filesystem/path.h"
-
-#include <dirent.h>
-#include <errno.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#include <functional>
-#include <list>
-#include <memory>
-
-#include "filesystem/portable_unistd.h"
-#include "tonic/common/build_config.h"
-
-namespace filesystem {
-namespace {
-
-size_t ResolveParentDirectoryTraversal(const std::string& path, size_t put) {
- if (put >= 2) {
- size_t previous_separator = path.rfind('/', put - 2);
- if (previous_separator != std::string::npos)
- return previous_separator + 1;
- }
- if (put == 1 && path[0] == '/') {
- return put;
- }
- return 0;
-}
-
-std::string GetCurrentDirectory() {
- char buffer[PATH_MAX];
- if (getcwd(buffer, sizeof(buffer)) == NULL) {
- return {};
- }
- return std::string(buffer);
-}
-
-} // namespace
-
-std::string SimplifyPath(std::string path) {
- if (path.empty())
- return ".";
-
- size_t put = 0;
- size_t get = 0;
- size_t traversal_root = 0;
- size_t component_start = 0;
-
- if (path[0] == '/') {
- put = 1;
- get = 1;
- component_start = 1;
- }
-
- while (get < path.size()) {
- char c = path[get];
-
- if (c == '.' && (get == component_start || get == component_start + 1)) {
- // We've seen "." or ".." so far in this component. We need to continue
- // searching.
- ++get;
- continue;
- }
-
- if (c == '/') {
- if (get == component_start || get == component_start + 1) {
- // We've found a "/" or a "./", which we can elide.
- ++get;
- component_start = get;
- continue;
- }
- if (get == component_start + 2) {
- // We've found a "../", which means we need to remove the previous
- // component.
- if (put == traversal_root) {
- path[put++] = '.';
- path[put++] = '.';
- path[put++] = '/';
- traversal_root = put;
- } else {
- put = ResolveParentDirectoryTraversal(path, put);
- }
- ++get;
- component_start = get;
- continue;
- }
- }
-
- size_t next_separator = path.find('/', get);
- if (next_separator == std::string::npos) {
- // We've reached the last component.
- break;
- }
- size_t next_component_start = next_separator + 1;
- ++next_separator;
- size_t component_size = next_component_start - component_start;
- if (put != component_start && component_size > 0) {
- path.replace(put, component_size,
- path.substr(component_start, component_size));
- }
- put += component_size;
- get = next_component_start;
- component_start = next_component_start;
- }
-
- size_t last_component_size = path.size() - component_start;
- if (last_component_size == 1 && path[component_start] == '.') {
- // The last component is ".", which we can elide.
- } else if (last_component_size == 2 && path[component_start] == '.' &&
- path[component_start + 1] == '.') {
- // The last component is "..", which means we need to remove the previous
- // component.
- if (put == traversal_root) {
- path[put++] = '.';
- path[put++] = '.';
- path[put++] = '/';
- traversal_root = put;
- } else {
- put = ResolveParentDirectoryTraversal(path, put);
- }
- } else {
- // Otherwise, we need to copy over the last component.
- if (put != component_start && last_component_size > 0) {
- path.replace(put, last_component_size,
- path.substr(component_start, last_component_size));
- }
- put += last_component_size;
- }
-
- if (put >= 2 && path[put - 1] == '/')
- --put; // Trim trailing /
- else if (put == 0)
- return "."; // Use . for otherwise empty paths to treat them as relative.
-
- path.resize(put);
- return path;
-}
-
-std::string AbsolutePath(const std::string& path) {
- if (path.size() > 0) {
- if (path[0] == '/') {
- // Path is already absolute.
- return path;
- }
- return GetCurrentDirectory() + "/" + path;
- } else {
- // Path is empty.
- return GetCurrentDirectory();
- }
-}
-
-std::string GetDirectoryName(const std::string& path) {
- size_t separator = path.rfind('/');
- if (separator == 0u)
- return "/";
- if (separator == std::string::npos)
- return std::string();
- return path.substr(0, separator);
-}
-
-std::string GetBaseName(const std::string& path) {
- size_t separator = path.rfind('/');
- if (separator == std::string::npos)
- return path;
- return path.substr(separator + 1);
-}
-
-std::string GetAbsoluteFilePath(const std::string& path) {
-#if defined(OS_FUCHSIA)
- // realpath() isn't supported by Fuchsia. See MG-425.
- return SimplifyPath(AbsolutePath(path));
-#else
- char buffer[PATH_MAX];
- if (realpath(path.c_str(), buffer) == nullptr)
- return std::string();
- return buffer;
-#endif // defined(OS_FUCHSIA)
-}
-
-} // namespace filesystem
diff --git a/filesystem/filesystem/path_win.cc b/filesystem/filesystem/path_win.cc
deleted file mode 100644
index c7da148..0000000
--- a/filesystem/filesystem/path_win.cc
+++ /dev/null
@@ -1,227 +0,0 @@
-// Copyright 2017 The Fuchsia 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 "filesystem/path.h"
-
-#include <windows.h>
-
-#include <direct.h>
-#include <errno.h>
-#include <shellapi.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include <algorithm>
-#include <functional>
-#include <list>
-#include <memory>
-
-namespace filesystem {
-namespace {
-
-size_t RootLength(const std::string& path) {
- if (path.size() == 0)
- return 0;
- if (path[0] == '/')
- return 1;
- if (path[0] == '\\') {
- if (path.size() < 2 || path[1] != '\\')
- return 1;
- // The path is a network share. Search for up to two '\'s, as they are
- // the server and share - and part of the root part.
- size_t index = path.find('\\', 2);
- if (index > 0) {
- index = path.find('\\', index + 1);
- if (index > 0)
- return index;
- }
- return path.size();
- }
- // If the path is of the form 'C:/' or 'C:\', with C being any letter, it's
- // a root part.
- if (path.length() >= 2 && path[1] == ':' &&
- (path[2] == '/' || path[2] == '\\') &&
- ((path[0] >= 'A' && path[0] <= 'Z') ||
- (path[0] >= 'a' && path[0] <= 'z'))) {
- return 3;
- }
- return 0;
-}
-
-size_t IsSeparator(const char sep) {
- return sep == '/' || sep == '\\';
-}
-
-size_t LastSeparator(const std::string& path) {
- return path.find_last_of("/\\");
-}
-
-size_t LastSeparator(const std::string& path, size_t pos) {
- return path.find_last_of("/\\", pos);
-}
-
-size_t FirstSeparator(const std::string& path, size_t pos) {
- return path.find_first_of("/\\", pos);
-}
-
-size_t ResolveParentDirectoryTraversal(const std::string& path,
- size_t put,
- size_t root_length) {
- if (put <= root_length) {
- return root_length;
- }
- size_t previous_separator = LastSeparator(path, put - 2);
- if (previous_separator != std::string::npos)
- return previous_separator + 1;
- return 0;
-}
-} // namespace
-
-std::string SimplifyPath(std::string path) {
- if (path.empty())
- return ".";
-
- size_t put = 0;
- size_t get = 0;
- size_t traversal_root = 0;
- size_t component_start = 0;
-
- size_t rootLength = RootLength(path);
- if (rootLength > 0) {
- put = rootLength;
- get = rootLength;
- component_start = rootLength;
- }
-
- while (get < path.size()) {
- char c = path[get];
-
- if (c == '.' && (get == component_start || get == component_start + 1)) {
- // We've seen "." or ".." so far in this component. We need to continue
- // searching.
- ++get;
- continue;
- }
-
- if (IsSeparator(c)) {
- if (get == component_start || get == component_start + 1) {
- // We've found a "/" or a "./", which we can elide.
- ++get;
- component_start = get;
- continue;
- }
- if (get == component_start + 2) {
- // We've found a "../", which means we need to remove the previous
- // component.
- if (put == traversal_root) {
- path[put++] = '.';
- path[put++] = '.';
- path[put++] = '\\';
- traversal_root = put;
- } else {
- put = ResolveParentDirectoryTraversal(path, put, rootLength);
- }
- ++get;
- component_start = get;
- continue;
- }
- }
-
- size_t next_separator = FirstSeparator(path, get);
- if (next_separator == std::string::npos) {
- // We've reached the last component.
- break;
- }
- size_t next_component_start = next_separator + 1;
- ++next_separator;
- size_t component_size = next_component_start - component_start;
- if (put != component_start && component_size > 0) {
- path.replace(put, component_size,
- path.substr(component_start, component_size));
- }
- put += component_size;
- get = next_component_start;
- component_start = next_component_start;
- }
-
- size_t last_component_size = path.size() - component_start;
- if (last_component_size == 1 && path[component_start] == '.') {
- // The last component is ".", which we can elide.
- } else if (last_component_size == 2 && path[component_start] == '.' &&
- path[component_start + 1] == '.') {
- // The last component is "..", which means we need to remove the previous
- // component.
- if (put == traversal_root) {
- path[put++] = '.';
- path[put++] = '.';
- path[put++] = '\\';
- traversal_root = put;
- } else {
- put = ResolveParentDirectoryTraversal(path, put, rootLength);
- }
- } else {
- // Otherwise, we need to copy over the last component.
- if (put != component_start && last_component_size > 0) {
- path.replace(put, last_component_size,
- path.substr(component_start, last_component_size));
- }
- put += last_component_size;
- }
-
- if (put >= 2 && IsSeparator(path[put - 1]))
- --put; // Trim trailing /
- else if (put == 0)
- return "."; // Use . for otherwise empty paths to treat them as relative.
-
- path.resize(put);
- std::replace(path.begin(), path.end(), '/', '\\');
- return path;
-}
-
-std::string AbsolutePath(const std::string& path) {
- char absPath[MAX_PATH];
- _fullpath(absPath, path.c_str(), MAX_PATH);
- return std::string(absPath);
-}
-
-std::string GetDirectoryName(const std::string& path) {
- size_t rootLength = RootLength(path);
- size_t separator = LastSeparator(path);
- if (separator < rootLength)
- separator = rootLength;
- if (separator == std::string::npos)
- return std::string();
- return path.substr(0, separator);
-}
-
-std::string GetBaseName(const std::string& path) {
- size_t separator = LastSeparator(path);
- if (separator == std::string::npos)
- return path;
- return path.substr(separator + 1);
-}
-
-std::string GetAbsoluteFilePath(const std::string& path) {
- HANDLE file =
- CreateFileA(path.c_str(), FILE_READ_ATTRIBUTES,
- FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
- OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
- if (file == INVALID_HANDLE_VALUE) {
- return std::string();
- }
- char buffer[MAX_PATH];
- DWORD ret =
- GetFinalPathNameByHandleA(file, buffer, MAX_PATH, FILE_NAME_NORMALIZED);
- if (ret == 0 || ret > MAX_PATH) {
- CloseHandle(file);
- return std::string();
- }
- std::string result(buffer);
- result.erase(0, strlen("\\\\?\\"));
- CloseHandle(file);
- return result;
-}
-
-} // namespace filesystem
diff --git a/filesystem/filesystem/portable_unistd.h b/filesystem/filesystem/portable_unistd.h
deleted file mode 100644
index c42611e..0000000
--- a/filesystem/filesystem/portable_unistd.h
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2017 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef FILESYSTEM_PORTABLE_UNISTD_H_
-#define FILESYSTEM_PORTABLE_UNISTD_H_
-
-#include "tonic/common/build_config.h"
-
-#if defined(OS_WIN)
-#include <direct.h>
-#include <io.h>
-#include <stdlib.h>
-
-#define STDERR_FILENO _fileno(stderr)
-#define PATH_MAX _MAX_PATH
-
-#define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR)
-#define S_ISREG(m) (((m)&S_IFMT) == S_IFREG)
-#define R_OK 4
-
-#define mkdir(path, mode) _mkdir(path)
-
-#else
-#include <unistd.h>
-#endif
-
-#endif // FILESYSTEM_PORTABLE_UNISTD_H_
diff --git a/filesystem/tests/BUILD.gn b/filesystem/tests/BUILD.gn
deleted file mode 100644
index 10524e3..0000000
--- a/filesystem/tests/BUILD.gn
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright 2018 The Fuchsia Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-executable("files_unittests") {
- testonly = true
-
- sources = [
- "directory_unittest.cc",
- "file_descriptor_unittest.cc",
- "file_unittest.cc",
- "files_unittest_main.cc",
- "path_unittest.cc",
- "scoped_temp_dir_unittest.cc",
- ]
-
- deps = [
- ":../:filesystem",
- ]
-}
diff --git a/filesystem/tests/directory_unittest.cc b/filesystem/tests/directory_unittest.cc
deleted file mode 100644
index 60895bc..0000000
--- a/filesystem/tests/directory_unittest.cc
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2017 The Fuchsia 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 "filesystem/directory.h"
-#include "filesystem/path.h"
-#include "filesystem/scoped_temp_dir.h"
-#include "gtest/gtest.h"
-
-namespace filesystem {
-
-TEST(Directory, CreateDirectory) {
- std::string cwd = GetCurrentDirectory();
-
- ScopedTempDir dir;
- EXPECT_TRUE(IsDirectory(dir.path()));
- EXPECT_EQ(0, chdir(dir.path().c_str()));
-
- EXPECT_TRUE(CreateDirectory("foo/bar"));
- EXPECT_TRUE(IsDirectory("foo"));
- EXPECT_TRUE(IsDirectory("foo/bar"));
- EXPECT_FALSE(IsDirectory("foo/bar/baz"));
-
- EXPECT_TRUE(CreateDirectory("foo/bar/baz"));
- EXPECT_TRUE(IsDirectory("foo/bar/baz"));
-
- EXPECT_TRUE(CreateDirectory("qux"));
- EXPECT_TRUE(IsDirectory("qux"));
-
- EXPECT_EQ(0, chdir(cwd.c_str()));
-
- std::string abs_path = dir.path() + "/another/one";
- EXPECT_TRUE(CreateDirectory(abs_path));
- EXPECT_TRUE(IsDirectory(abs_path));
-}
-
-} // namespace filesystem
diff --git a/filesystem/tests/file_descriptor_unittest.cc b/filesystem/tests/file_descriptor_unittest.cc
deleted file mode 100644
index be26df3..0000000
--- a/filesystem/tests/file_descriptor_unittest.cc
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2017 The Fuchsia 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 <fcntl.h>
-#include <sys/types.h>
-
-#include <string>
-#include <vector>
-
-#include "filesystem/scoped_temp_dir.h"
-#include "filesystem/unique_fd.h"
-#include "gtest/gtest.h"
-
-namespace filesystem {
-
-TEST(FileDescriptor, WriteAndRead) {
- files::ScopedTempDir temp_dir;
- std::string path;
- ASSERT_TRUE(temp_dir.NewTempFile(&path));
-
- fxl::UniqueFD fd(open(path.c_str(), O_RDWR));
- ASSERT_TRUE(fd.is_valid());
-
- std::string string = "one, two, three";
- EXPECT_TRUE(WriteFileDescriptor(fd.get(), string.data(), string.size()));
- EXPECT_EQ(0, lseek(fd.get(), 0, SEEK_SET));
-
- std::vector<char> buffer;
- buffer.resize(1024);
- ssize_t read = ReadFileDescriptor(fd.get(), buffer.data(), 1024);
- EXPECT_EQ(static_cast<ssize_t>(string.size()), read);
- EXPECT_EQ(string, buffer.data());
-}
-
-} // namespace filesystem
diff --git a/filesystem/tests/file_unittest.cc b/filesystem/tests/file_unittest.cc
deleted file mode 100644
index b78408c..0000000
--- a/filesystem/tests/file_unittest.cc
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2016 The Fuchsia 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 "filesystem/file.h"
-
-#include <fcntl.h>
-
-#include "filesystem/path.h"
-#include "filesystem/scoped_temp_dir.h"
-#include "gtest/gtest.h"
-
-namespace filesystem {
-namespace {
-
-TEST(File, GetFileSize) {
- ScopedTempDir dir;
- std::string path;
-
- ASSERT_TRUE(dir.NewTempFile(&path));
-
- uint64_t size;
- EXPECT_TRUE(GetFileSize(path, &size));
- EXPECT_EQ(0u, size);
-
- std::string content = "Hello World";
- ASSERT_TRUE(WriteFile(path, content.data(), content.size()));
- EXPECT_TRUE(GetFileSize(path, &size));
- EXPECT_EQ(content.size(), size);
-}
-
-TEST(File, WriteFileInTwoPhases) {
- ScopedTempDir dir;
- std::string path = dir.path() + "/destination";
-
- std::string content = "Hello World";
- ASSERT_TRUE(WriteFileInTwoPhases(path, content, dir.path()));
- std::string read_content;
- ASSERT_TRUE(ReadFileToString(path, &read_content));
- EXPECT_EQ(read_content, content);
-}
-
-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
-TEST(File, IsFileAt) {
- ScopedTempDir dir;
- std::string path;
-
- ASSERT_TRUE(dir.NewTempFile(&path));
-
- fxl::UniqueFD dirfd(open(dir.path().c_str(), O_RDONLY));
- ASSERT_TRUE(dirfd.get() != -1);
- EXPECT_TRUE(IsFileAt(dirfd.get(), GetBaseName(path)));
-}
-#endif
-
-} // namespace
-} // namespace filesystem
diff --git a/filesystem/tests/files_unittest_main.cc b/filesystem/tests/files_unittest_main.cc
deleted file mode 100644
index 34362c9..0000000
--- a/filesystem/tests/files_unittest_main.cc
+++ /dev/null
@@ -1,5 +0,0 @@
-// Copyright 2018 The Fuchsia 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 "gtest/gtest.h"
diff --git a/filesystem/tests/path_unittest.cc b/filesystem/tests/path_unittest.cc
deleted file mode 100644
index d5e9d85..0000000
--- a/filesystem/tests/path_unittest.cc
+++ /dev/null
@@ -1,234 +0,0 @@
-// Copyright 2016 The Fuchsia 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 "filesystem/path.h"
-#include "filesystem/directory.h"
-#include "filesystem/scoped_temp_dir.h"
-#include "gtest/gtest.h"
-#include "tonic/common/build_config.h"
-
-namespace filesystem {
-
-void ExpectPlatformPath(std::string expected, std::string actual) {
-#if defined(OS_WIN)
- std::replace(expected.begin(), expected.end(), '/', '\\');
-#endif
- EXPECT_EQ(expected, actual);
-}
-
-TEST(Path, SimplifyPath) {
- ExpectPlatformPath(".", SimplifyPath(""));
- ExpectPlatformPath(".", SimplifyPath("."));
- ExpectPlatformPath("..", SimplifyPath(".."));
- ExpectPlatformPath("...", SimplifyPath("..."));
-
- ExpectPlatformPath("/", SimplifyPath("/"));
- ExpectPlatformPath("/", SimplifyPath("/."));
- ExpectPlatformPath("/", SimplifyPath("/.."));
- ExpectPlatformPath("/...", SimplifyPath("/..."));
-
- ExpectPlatformPath("foo", SimplifyPath("foo"));
- ExpectPlatformPath("foo", SimplifyPath("foo/"));
- ExpectPlatformPath("foo", SimplifyPath("foo/."));
- ExpectPlatformPath("foo", SimplifyPath("foo/./"));
- ExpectPlatformPath(".", SimplifyPath("foo/.."));
- ExpectPlatformPath(".", SimplifyPath("foo/../"));
- ExpectPlatformPath("foo/...", SimplifyPath("foo/..."));
- ExpectPlatformPath("foo/...", SimplifyPath("foo/.../"));
- ExpectPlatformPath("foo/.b", SimplifyPath("foo/.b"));
- ExpectPlatformPath("foo/.b", SimplifyPath("foo/.b/"));
-
- ExpectPlatformPath("/foo", SimplifyPath("/foo"));
- ExpectPlatformPath("/foo", SimplifyPath("/foo/"));
- ExpectPlatformPath("/foo", SimplifyPath("/foo/."));
- ExpectPlatformPath("/foo", SimplifyPath("/foo/./"));
- ExpectPlatformPath("/", SimplifyPath("/foo/.."));
- ExpectPlatformPath("/", SimplifyPath("/foo/../"));
- ExpectPlatformPath("/foo/...", SimplifyPath("/foo/..."));
- ExpectPlatformPath("/foo/...", SimplifyPath("/foo/.../"));
- ExpectPlatformPath("/foo/.b", SimplifyPath("/foo/.b"));
- ExpectPlatformPath("/foo/.b", SimplifyPath("/foo/.b/"));
-
- ExpectPlatformPath("foo/bar", SimplifyPath("foo/bar"));
- ExpectPlatformPath("foo/bar", SimplifyPath("foo/bar/"));
- ExpectPlatformPath("foo/bar", SimplifyPath("foo/./bar"));
- ExpectPlatformPath("foo/bar", SimplifyPath("foo/./bar/"));
- ExpectPlatformPath("bar", SimplifyPath("foo/../bar"));
- ExpectPlatformPath("bar", SimplifyPath("foo/baz/../../bar"));
- ExpectPlatformPath("bar", SimplifyPath("foo/../bar/"));
- ExpectPlatformPath("foo/.../bar", SimplifyPath("foo/.../bar"));
- ExpectPlatformPath("foo/.../bar", SimplifyPath("foo/.../bar/"));
- ExpectPlatformPath("foo/.b/bar", SimplifyPath("foo/.b/bar"));
- ExpectPlatformPath("foo/.b/bar", SimplifyPath("foo/.b/bar/"));
-
- ExpectPlatformPath("/foo/bar", SimplifyPath("/foo/bar"));
- ExpectPlatformPath("/foo/bar", SimplifyPath("/foo/bar/"));
- ExpectPlatformPath("/foo/bar", SimplifyPath("/foo/./bar"));
- ExpectPlatformPath("/foo/bar", SimplifyPath("/foo/./bar/"));
- ExpectPlatformPath("/bar", SimplifyPath("/foo/../bar"));
- ExpectPlatformPath("/bar", SimplifyPath("/foo/../bar/"));
- ExpectPlatformPath("/foo/.../bar", SimplifyPath("/foo/.../bar"));
- ExpectPlatformPath("/foo/.../bar", SimplifyPath("/foo/.../bar/"));
- ExpectPlatformPath("/foo/.b/bar", SimplifyPath("/foo/.b/bar"));
- ExpectPlatformPath("/foo/.b/bar", SimplifyPath("/foo/.b/bar/"));
-
- ExpectPlatformPath("../foo", SimplifyPath("../foo"));
- ExpectPlatformPath("../../bar", SimplifyPath("../foo/../../bar"));
- ExpectPlatformPath("/bar", SimplifyPath("/foo/../../bar"));
-
- // Already clean
- ExpectPlatformPath(".", SimplifyPath(""));
- ExpectPlatformPath("abc", SimplifyPath("abc"));
- ExpectPlatformPath("abc/def", SimplifyPath("abc/def"));
- ExpectPlatformPath("a/b/c", SimplifyPath("a/b/c"));
- ExpectPlatformPath(".", SimplifyPath("."));
- ExpectPlatformPath("..", SimplifyPath(".."));
- ExpectPlatformPath("../..", SimplifyPath("../.."));
- ExpectPlatformPath("../../abc", SimplifyPath("../../abc"));
- ExpectPlatformPath("/abc", SimplifyPath("/abc"));
- ExpectPlatformPath("/", SimplifyPath("/"));
-
- // Remove trailing slash
- ExpectPlatformPath("abc", SimplifyPath("abc/"));
- ExpectPlatformPath("abc/def", SimplifyPath("abc/def/"));
- ExpectPlatformPath("a/b/c", SimplifyPath("a/b/c/"));
- ExpectPlatformPath(".", SimplifyPath("./"));
- ExpectPlatformPath("..", SimplifyPath("../"));
- ExpectPlatformPath("../..", SimplifyPath("../../"));
- ExpectPlatformPath("/abc", SimplifyPath("/abc/"));
-
- // Remove doubled slash
- ExpectPlatformPath("abc/def/ghi", SimplifyPath("abc//def//ghi"));
- ExpectPlatformPath("/abc", SimplifyPath("//abc"));
- ExpectPlatformPath("/abc", SimplifyPath("///abc"));
- ExpectPlatformPath("/abc", SimplifyPath("//abc//"));
- ExpectPlatformPath("abc", SimplifyPath("abc//"));
-
- // Remove . elements
- ExpectPlatformPath("abc/def", SimplifyPath("abc/./def"));
- ExpectPlatformPath("/abc/def", SimplifyPath("/./abc/def"));
- ExpectPlatformPath("abc", SimplifyPath("abc/."));
-
- // Remove .. elements
- ExpectPlatformPath("abc/def/jkl", SimplifyPath("abc/def/ghi/../jkl"));
- ExpectPlatformPath("abc/jkl", SimplifyPath("abc/def/../ghi/../jkl"));
- ExpectPlatformPath("abc", SimplifyPath("abc/def/.."));
- ExpectPlatformPath(".", SimplifyPath("abc/def/../.."));
- ExpectPlatformPath("/", SimplifyPath("/abc/def/../.."));
- ExpectPlatformPath("..", SimplifyPath("abc/def/../../.."));
- ExpectPlatformPath("/", SimplifyPath("/abc/def/../../.."));
- ExpectPlatformPath("../../mno",
- SimplifyPath("abc/def/../../../ghi/jkl/../../../mno"));
- ExpectPlatformPath("/mno", SimplifyPath("/../mno"));
-
- // Combinations
- ExpectPlatformPath("def", SimplifyPath("abc/./../def"));
- ExpectPlatformPath("def", SimplifyPath("abc//./../def"));
- ExpectPlatformPath("../../def", SimplifyPath("abc/../../././../def"));
-
-#if defined(OS_WIN)
- ExpectPlatformPath("a\\c", SimplifyPath("a\\b\\..\\c"));
- ExpectPlatformPath("X:\\a\\c", SimplifyPath("X:/a/b/../c"));
- ExpectPlatformPath("X:\\a\\b\\c", SimplifyPath("X:/a/b/./c"));
- ExpectPlatformPath("X:\\c", SimplifyPath("X:/../../c"));
-#endif
-}
-
-TEST(Path, AbsolutePath) {
-#if defined(OS_WIN)
- // We cut out the drive letter as it can be different on every system.
- EXPECT_EQ(":\\foo\\bar", AbsolutePath("\\foo\\bar").substr(1));
- EXPECT_EQ(":\\foo\\bar", AbsolutePath("/foo/bar").substr(1));
- EXPECT_EQ(":\\foo\\bar\\", AbsolutePath("\\foo\\bar\\").substr(1));
- EXPECT_EQ(":\\foo\\bar\\", AbsolutePath("/foo/bar/").substr(1));
- EXPECT_EQ("C:\\foo\\bar\\", AbsolutePath("C:\\foo\\bar\\"));
- EXPECT_EQ(GetCurrentDirectory() + "\\foo", AbsolutePath("foo"));
-#else
- EXPECT_EQ("/foo/bar", AbsolutePath("/foo/bar"));
- EXPECT_EQ("/foo/bar/", AbsolutePath("/foo/bar/"));
- EXPECT_EQ(GetCurrentDirectory() + "/foo", AbsolutePath("foo"));
-#endif
- EXPECT_EQ(GetCurrentDirectory(), AbsolutePath(""));
-}
-
-TEST(Path, GetDirectoryName) {
- EXPECT_EQ("foo", GetDirectoryName("foo/"));
- EXPECT_EQ("foo/bar", GetDirectoryName("foo/bar/"));
- EXPECT_EQ("foo", GetDirectoryName("foo/bar"));
- EXPECT_EQ("foo/bar", GetDirectoryName("foo/bar/.."));
- EXPECT_EQ("foo/bar/..", GetDirectoryName("foo/bar/../.."));
- EXPECT_EQ("", GetDirectoryName("foo"));
- EXPECT_EQ("/", GetDirectoryName("/"));
- EXPECT_EQ("", GetDirectoryName("a"));
- EXPECT_EQ("/", GetDirectoryName("/a"));
- EXPECT_EQ("/a", GetDirectoryName("/a/"));
- EXPECT_EQ("a", GetDirectoryName("a/"));
-#if defined(OS_WIN)
- EXPECT_EQ("C:\\", GetDirectoryName("C:\\"));
- EXPECT_EQ("C:\\foo", GetDirectoryName("C:\\foo\\"));
- EXPECT_EQ("C:\\foo", GetDirectoryName("C:\\foo\\bar"));
- EXPECT_EQ("foo\\bar", GetDirectoryName("foo\\bar\\"));
- EXPECT_EQ("foo", GetDirectoryName("foo\\bar"));
- EXPECT_EQ("\\", GetDirectoryName("\\"));
- EXPECT_EQ("\\", GetDirectoryName("\\a"));
-#endif
-}
-
-TEST(Path, GetBaseName) {
- EXPECT_EQ("", GetBaseName("foo/"));
- EXPECT_EQ("", GetBaseName("foo/bar/"));
- EXPECT_EQ("bar", GetBaseName("foo/bar"));
- EXPECT_EQ("..", GetBaseName("foo/bar/.."));
- EXPECT_EQ("..", GetBaseName("foo/bar/../.."));
- EXPECT_EQ("foo", GetBaseName("foo"));
- EXPECT_EQ("", GetBaseName("/"));
- EXPECT_EQ("a", GetBaseName("a"));
- EXPECT_EQ("a", GetBaseName("/a"));
- EXPECT_EQ("", GetBaseName("/a/"));
- EXPECT_EQ("", GetBaseName("a/"));
-#if defined(OS_WIN)
- EXPECT_EQ("", GetBaseName("C:\\"));
- EXPECT_EQ("", GetBaseName("C:\\foo\\"));
- EXPECT_EQ("bar", GetBaseName("C:\\foo\\bar"));
- EXPECT_EQ("", GetBaseName("foo\\bar\\"));
- EXPECT_EQ("bar", GetBaseName("foo\\bar"));
- EXPECT_EQ("", GetBaseName("\\"));
- EXPECT_EQ("a", GetBaseName("\\a"));
-#endif
-}
-
-TEST(Path, DeletePath) {
- ScopedTempDir dir;
-
- std::string sub_dir = dir.path() + "/dir";
- CreateDirectory(sub_dir);
- EXPECT_TRUE(IsDirectory(sub_dir));
- EXPECT_TRUE(DeletePath(sub_dir, false));
- EXPECT_FALSE(IsDirectory(sub_dir));
-}
-
-TEST(Path, DeletePathRecursively) {
- ScopedTempDir dir;
-
- std::string sub_dir = dir.path() + "/dir";
- CreateDirectory(sub_dir);
- EXPECT_TRUE(IsDirectory(sub_dir));
-
- std::string sub_sub_dir1 = sub_dir + "/dir1";
- CreateDirectory(sub_sub_dir1);
- EXPECT_TRUE(IsDirectory(sub_sub_dir1));
- std::string sub_sub_dir2 = sub_dir + "/dir2";
- CreateDirectory(sub_sub_dir2);
- EXPECT_TRUE(IsDirectory(sub_sub_dir2));
-
- EXPECT_FALSE(DeletePath(sub_dir, false));
- EXPECT_TRUE(IsDirectory(sub_dir));
- EXPECT_TRUE(IsDirectory(sub_sub_dir1));
-
- EXPECT_TRUE(DeletePath(sub_dir, true));
- EXPECT_FALSE(IsDirectory(sub_dir));
- EXPECT_FALSE(IsDirectory(sub_sub_dir1));
-}
-
-} // namespace filesystem
diff --git a/filesystem/tests/scoped_temp_dir_unittest.cc b/filesystem/tests/scoped_temp_dir_unittest.cc
deleted file mode 100644
index 289c602..0000000
--- a/filesystem/tests/scoped_temp_dir_unittest.cc
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2016 The Fuchsia 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 "filesystem/scoped_temp_dir.h"
-#include "filesystem/directory.h"
-#include "filesystem/path.h"
-#include "gtest/gtest.h"
-
-namespace filesystem {
-
-TEST(ScopedTempDir, Creation) {
- ScopedTempDir dir;
-
- EXPECT_TRUE(IsDirectory(dir.path()));
-}
-
-TEST(ScopedTempDir, Deletion) {
- std::string path;
- {
- ScopedTempDir dir;
- path = dir.path();
- }
-
- EXPECT_FALSE(IsDirectory(path));
-}
-
-TEST(ScopedTempDir, NewTempFile) {
- ScopedTempDir dir;
- std::string path;
- EXPECT_TRUE(dir.NewTempFile(&path));
- EXPECT_FALSE(path.empty());
-}
-
-TEST(ScopedTempDir, CustomParent) {
- ScopedTempDir root_dir;
- std::string parent = root_dir.path() + "/a/b/c";
- std::string path;
- {
- ScopedTempDir dir(parent);
- path = dir.path();
- EXPECT_TRUE(IsDirectory(path));
- EXPECT_EQ(path.substr(0, parent.size()), parent);
- EXPECT_NE("temp_dir_XXXXXX", GetBaseName(path));
-
- // Regression test - don't create temp_dir_XXXXXX dir next to the temp one.
- EXPECT_FALSE(
- files::IsDirectory(GetDirectoryName(path) + "/temp_dir_XXXXXX"));
- }
-
- // Verify that the tmp directory itself was deleted, but not the parent.
- EXPECT_FALSE(IsDirectory(path));
- EXPECT_TRUE(IsDirectory(parent));
-}
-
-} // namespace filesystem
diff --git a/logging/BUILD.gn b/logging/BUILD.gn
deleted file mode 100644
index 504a44d..0000000
--- a/logging/BUILD.gn
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright 2016 The Fuchsia Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-source_set("logging") {
- visibility = [ "../*" ]
-
- configs += [ "../:config" ]
-
- sources = [
- "dart_error.cc",
- "dart_error.h",
- "dart_invoke.cc",
- "dart_invoke.h",
- ]
-
- deps = [
- "../common",
- ]
-
- public_deps = [
- "//third_party/dart/runtime:dart_api",
- ]
-}
diff --git a/logging/dart_error.cc b/logging/dart_error.cc
deleted file mode 100644
index 52b0d0a..0000000
--- a/logging/dart_error.cc
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2016 The Fuchsia 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 "tonic/logging/dart_error.h"
-
-#include "tonic/common/macros.h"
-
-namespace tonic {
-namespace DartError {
-const char kInvalidArgument[] = "Invalid argument.";
-} // namespace DartError
-
-bool LogIfError(Dart_Handle handle) {
- if (Dart_IsError(handle)) {
- tonic::Log("Dart Error: %s", Dart_GetError(handle));
- return true;
- }
- return false;
-}
-
-DartErrorHandleType GetErrorHandleType(Dart_Handle handle) {
- if (Dart_IsCompilationError(handle)) {
- return kCompilationErrorType;
- } else if (Dart_IsApiError(handle)) {
- return kApiErrorType;
- } else if (Dart_IsError(handle)) {
- return kUnknownErrorType;
- } else {
- return kNoError;
- }
-}
-
-int GetErrorExitCode(Dart_Handle handle) {
- if (Dart_IsCompilationError(handle)) {
- return 254; // dart::bin::kCompilationErrorExitCode
- } else if (Dart_IsApiError(handle)) {
- return 253; // dart::bin::kApiErrorExitCode
- } else if (Dart_IsError(handle)) {
- return 255; // dart::bin::kErrorExitCode
- } else {
- return 0;
- }
-}
-
-} // namespace tonic
diff --git a/logging/dart_error.h b/logging/dart_error.h
deleted file mode 100644
index 5bd8159..0000000
--- a/logging/dart_error.h
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2016 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_LOGGING_DART_ERROR_H_
-#define LIB_TONIC_LOGGING_DART_ERROR_H_
-
-#include "third_party/dart/runtime/include/dart_api.h"
-
-namespace tonic {
-
-namespace DartError {
-extern const char kInvalidArgument[];
-} // namespace DartError
-
-bool LogIfError(Dart_Handle handle);
-
-enum DartErrorHandleType {
- kNoError,
- kUnknownErrorType,
- kApiErrorType,
- kCompilationErrorType,
-};
-
-DartErrorHandleType GetErrorHandleType(Dart_Handle handle);
-
-int GetErrorExitCode(Dart_Handle handle);
-
-} // namespace tonic
-
-#endif // LIB_TONIC_DART_ERROR_H_
diff --git a/logging/dart_invoke.cc b/logging/dart_invoke.cc
deleted file mode 100644
index 05d86d3..0000000
--- a/logging/dart_invoke.cc
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2016 The Fuchsia 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 "tonic/logging/dart_invoke.h"
-
-#include "tonic/common/macros.h"
-#include "tonic/logging/dart_error.h"
-
-namespace tonic {
-
-Dart_Handle DartInvokeField(Dart_Handle target,
- const char* name,
- std::initializer_list<Dart_Handle> args) {
- Dart_Handle field = Dart_NewStringFromCString(name);
- return Dart_Invoke(target, field, args.size(),
- const_cast<Dart_Handle*>(args.begin()));
-}
-
-Dart_Handle DartInvoke(Dart_Handle closure,
- std::initializer_list<Dart_Handle> args) {
- int argc = args.size();
- Dart_Handle* argv = const_cast<Dart_Handle*>(args.begin());
- Dart_Handle handle = Dart_InvokeClosure(closure, argc, argv);
- LogIfError(handle);
- return handle;
-}
-
-Dart_Handle DartInvokeVoid(Dart_Handle closure) {
- Dart_Handle handle = Dart_InvokeClosure(closure, 0, nullptr);
- LogIfError(handle);
- return handle;
-}
-
-} // namespace tonic
diff --git a/logging/dart_invoke.h b/logging/dart_invoke.h
deleted file mode 100644
index 4d2f115..0000000
--- a/logging/dart_invoke.h
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2016 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_LOGGING_DART_INVOKE_H_
-#define LIB_TONIC_LOGGING_DART_INVOKE_H_
-
-#include <initializer_list>
-
-#include "third_party/dart/runtime/include/dart_api.h"
-
-namespace tonic {
-
-Dart_Handle DartInvokeField(Dart_Handle target,
- const char* name,
- std::initializer_list<Dart_Handle> args);
-
-Dart_Handle DartInvoke(Dart_Handle closure,
- std::initializer_list<Dart_Handle> args);
-Dart_Handle DartInvokeVoid(Dart_Handle closure);
-
-} // namespace tonic
-
-#endif // LIB_TONIC_LOGGING_DART_INVOKE_H_
diff --git a/parsers/BUILD.gn b/parsers/BUILD.gn
deleted file mode 100644
index 94dd584..0000000
--- a/parsers/BUILD.gn
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright 2016 The Fuchsia Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-source_set("parsers") {
- visibility = [ "../*" ]
-
- configs += [ "../:config" ]
-
- deps = [
- "../common",
- ]
-
- sources = [
- "packages_map.cc",
- "packages_map.h",
- ]
-}
diff --git a/parsers/packages_map.cc b/parsers/packages_map.cc
deleted file mode 100644
index 58979b3..0000000
--- a/parsers/packages_map.cc
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2016 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Spec: https://github.com/lrhn/dep-pkgspec/blob/master/DEP-pkgspec.md
-
-#include "tonic/parsers/packages_map.h"
-
-#include <memory>
-
-namespace tonic {
-namespace {
-
-bool isLineBreak(char c) {
- return c == '\r' || c == '\n';
-}
-
-} // namespace
-
-PackagesMap::PackagesMap() {}
-
-PackagesMap::~PackagesMap() {}
-
-bool PackagesMap::Parse(const std::string& source, std::string* error) {
- map_.clear();
- const auto end = source.end();
- for (auto it = source.begin(); it != end; ++it) {
- const char c = *it;
-
- // Skip blank lines.
- if (isLineBreak(c))
- continue;
-
- // Skip comments.
- if (c == '#') {
- while (it != end && !isLineBreak(*it))
- ++it;
- continue;
- }
-
- if (c == ':') {
- map_.clear();
- *error = "Packages file contains a line that begins with ':'.";
- return false;
- }
-
- auto package_name_begin = it;
- auto package_name_end = end;
- bool found_separator = false;
- for (; it != end; ++it) {
- const char c = *it;
- if (c == ':' && !found_separator) {
- found_separator = true;
- package_name_end = it;
- continue;
- }
- if (isLineBreak(c))
- break;
- }
-
- if (!found_separator) {
- map_.clear();
- *error = "Packages file contains non-comment line that lacks a ':'.";
- return false;
- }
-
- std::string package_name(package_name_begin, package_name_end);
- std::string package_path(package_name_end + 1, it);
-
- auto result = map_.emplace(package_name, package_path);
- if (!result.second) {
- map_.clear();
- *error =
- std::string("Packages file contains multiple entries for package '") +
- package_name + "'.";
- return false;
- }
- }
-
- return true;
-}
-
-std::string PackagesMap::Resolve(const std::string& package_name) {
- return map_[package_name];
-}
-
-} // namespace tonic
diff --git a/parsers/packages_map.h b/parsers/packages_map.h
deleted file mode 100644
index 790bdbb..0000000
--- a/parsers/packages_map.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2016 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_PARSERS_PACKAGES_MAP_H_
-#define LIB_TONIC_PARSERS_PACKAGES_MAP_H_
-
-#include <string>
-#include <unordered_map>
-
-namespace tonic {
-
-class PackagesMap {
- public:
- PackagesMap();
- ~PackagesMap();
-
- bool Parse(const std::string& source, std::string* error);
- std::string Resolve(const std::string& package_name);
-
- private:
- std::unordered_map<std::string, std::string> map_;
-};
-
-} // namespace tonic
-
-#endif // LIB_TONIC_PARSERS_PACKAGES_MAP_H_
diff --git a/platform/BUILD.gn b/platform/BUILD.gn
deleted file mode 100644
index 8b6daca..0000000
--- a/platform/BUILD.gn
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright 2017 The Fuchsia Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-source_set("platform") {
- visibility = [ "../*" ]
-
- configs += [ "../:config" ]
-
- if (is_win) {
- set_sources_assignment_filter([ "*_posix.cc" ])
- } else {
- set_sources_assignment_filter([ "*_win.cc" ])
- }
-
- deps = [
- "../common",
- ]
-
- sources = [
- "platform_utils.h",
- "platform_utils_posix.cc",
- "platform_utils_win.cc",
- ]
-}
diff --git a/platform/platform_utils.h b/platform/platform_utils.h
deleted file mode 100644
index 85eca5d..0000000
--- a/platform/platform_utils.h
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2017 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_PLATFORM_UTILS_H_
-#define LIB_TONIC_PLATFORM_UTILS_H_
-
-namespace tonic {
-
-// Calls the equivalent of exit(status) for a given platform.
-void PlatformExit(int status);
-
-} // namespace tonic
-
-#endif // LIB_TONIC_PLATFORM_UTILS_H_
diff --git a/platform/platform_utils_posix.cc b/platform/platform_utils_posix.cc
deleted file mode 100644
index 6dd01a1..0000000
--- a/platform/platform_utils_posix.cc
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 2017 The Fuchsia 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 <cstdlib>
-#include "platform_utils.h"
-
-namespace tonic {
-
-void PlatformExit(int status) {
- exit(status);
-}
-
-} // namespace tonic
diff --git a/platform/platform_utils_win.cc b/platform/platform_utils_win.cc
deleted file mode 100644
index 8ebbc7e..0000000
--- a/platform/platform_utils_win.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2017 The Fuchsia 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 "platform_utils.h"
-
-#include <windows.h>
-
-namespace tonic {
-
-void PlatformExit(int status) {
- ::ExitProcess(status);
-}
-
-} // namespace tonic
diff --git a/scopes/BUILD.gn b/scopes/BUILD.gn
deleted file mode 100644
index ea9af51..0000000
--- a/scopes/BUILD.gn
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright 2016 The Fuchsia Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-source_set("scopes") {
- visibility = [ "../*" ]
-
- configs += [ "../:config" ]
-
- sources = [
- "dart_api_scope.h",
- "dart_isolate_scope.cc",
- "dart_isolate_scope.h",
- ]
-
- deps = [
- "../common",
- ]
-
- public_deps = [
- "//third_party/dart/runtime:dart_api",
- ]
-}
diff --git a/scopes/dart_api_scope.h b/scopes/dart_api_scope.h
deleted file mode 100644
index 2edcf44..0000000
--- a/scopes/dart_api_scope.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2016 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_SCOPES_DART_API_SCOPE_H_
-#define LIB_TONIC_SCOPES_DART_API_SCOPE_H_
-
-#include "third_party/dart/runtime/include/dart_api.h"
-#include "tonic/common/macros.h"
-
-namespace tonic {
-
-class DartApiScope {
- public:
- DartApiScope() { Dart_EnterScope(); }
- ~DartApiScope() {
- if (Dart_CurrentIsolate())
- Dart_ExitScope();
- }
-
- private:
- TONIC_DISALLOW_COPY_AND_ASSIGN(DartApiScope);
-};
-
-} // namespace tonic
-
-#endif // LIB_TONIC_SCOPES_DART_API_SCOPE_H_
diff --git a/scopes/dart_isolate_scope.cc b/scopes/dart_isolate_scope.cc
deleted file mode 100644
index dcab11a..0000000
--- a/scopes/dart_isolate_scope.cc
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2016 The Fuchsia 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 "tonic/scopes/dart_isolate_scope.h"
-
-namespace tonic {
-
-DartIsolateScope::DartIsolateScope(Dart_Isolate isolate) {
- isolate_ = isolate;
- previous_ = Dart_CurrentIsolate();
- if (previous_ == isolate_)
- return;
- if (previous_)
- Dart_ExitIsolate();
- Dart_EnterIsolate(isolate_);
-}
-
-DartIsolateScope::~DartIsolateScope() {
- Dart_Isolate current = Dart_CurrentIsolate();
- TONIC_DCHECK(!current || current == isolate_);
- if (previous_ == isolate_)
- return;
- if (current)
- Dart_ExitIsolate();
- if (previous_)
- Dart_EnterIsolate(previous_);
-}
-
-} // namespace tonic
diff --git a/scopes/dart_isolate_scope.h b/scopes/dart_isolate_scope.h
deleted file mode 100644
index 5da7d00..0000000
--- a/scopes/dart_isolate_scope.h
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2016 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_SCOPES_DART_ISOLATE_SCOPE_H_
-#define LIB_TONIC_SCOPES_DART_ISOLATE_SCOPE_H_
-
-#include "third_party/dart/runtime/include/dart_api.h"
-#include "tonic/common/macros.h"
-
-namespace tonic {
-
-// DartIsolateScope is a helper class for entering and exiting a given isolate.
-class DartIsolateScope {
- public:
- explicit DartIsolateScope(Dart_Isolate isolate);
- ~DartIsolateScope();
-
- private:
- Dart_Isolate isolate_;
- Dart_Isolate previous_;
-
- TONIC_DISALLOW_COPY_AND_ASSIGN(DartIsolateScope);
-};
-
-} // namespace tonic
-
-#endif // LIB_TONIC_SCOPES_DART_ISOLATE_SCOPE_H_
diff --git a/typed_data/BUILD.gn b/typed_data/BUILD.gn
deleted file mode 100644
index e456cf4..0000000
--- a/typed_data/BUILD.gn
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright 2016 The Fuchsia Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-source_set("typed_data") {
- visibility = [ "../*" ]
-
- configs += [ "../:config" ]
-
- sources = [
- "dart_byte_data.cc",
- "dart_byte_data.h",
- "typed_list.cc",
- "typed_list.h",
-
- # Deprecated.
- "float32_list.h",
- "float64_list.h",
- "int32_list.h",
- "uint16_list.h",
- "uint8_list.h",
- ]
-
- deps = [
- "../common",
- ]
-
- public_deps = [
- "../converter",
- "../logging",
- "//third_party/dart/runtime:dart_api",
- ]
-}
diff --git a/typed_data/dart_byte_data.cc b/typed_data/dart_byte_data.cc
deleted file mode 100644
index a3f3a52..0000000
--- a/typed_data/dart_byte_data.cc
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 2015 The Fuchsia 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 "tonic/typed_data/dart_byte_data.h"
-
-#include "tonic/logging/dart_error.h"
-
-namespace tonic {
-
-Dart_Handle DartByteData::Create(const void* data, size_t length) {
- auto handle = DartByteData{data, length}.dart_handle();
- // The destructor should release the typed data.
- return handle;
-}
-
-DartByteData::DartByteData()
- : data_(nullptr), length_in_bytes_(0), dart_handle_(nullptr) {}
-
-DartByteData::DartByteData(const void* data, size_t length)
- : data_(nullptr),
- length_in_bytes_(0),
- dart_handle_(Dart_NewTypedData(Dart_TypedData_kByteData, length)) {
- if (!Dart_IsError(dart_handle_)) {
- Dart_TypedData_Type type;
- auto acquire_result = Dart_TypedDataAcquireData(dart_handle_, &type, &data_,
- &length_in_bytes_);
-
- if (!Dart_IsError(acquire_result)) {
- ::memcpy(data_, data, length_in_bytes_);
- }
- }
-}
-
-DartByteData::DartByteData(Dart_Handle list)
- : data_(nullptr), length_in_bytes_(0), dart_handle_(list) {
- if (Dart_IsNull(list))
- return;
-
- Dart_TypedData_Type type;
- Dart_TypedDataAcquireData(list, &type, &data_, &length_in_bytes_);
- TONIC_DCHECK(!LogIfError(list));
- if (type != Dart_TypedData_kByteData)
- Dart_ThrowException(ToDart("Non-genuine ByteData passed to engine."));
-}
-
-DartByteData::DartByteData(DartByteData&& other)
- : data_(other.data_),
- length_in_bytes_(other.length_in_bytes_),
- dart_handle_(other.dart_handle_) {
- other.data_ = nullptr;
- other.dart_handle_ = nullptr;
-}
-
-DartByteData::~DartByteData() {
- Release();
-}
-
-std::vector<char> DartByteData::Copy() const {
- const char* ptr = static_cast<const char*>(data_);
- return std::vector<char>(ptr, ptr + length_in_bytes_);
-}
-
-void DartByteData::Release() const {
- if (data_) {
- Dart_TypedDataReleaseData(dart_handle_);
- data_ = nullptr;
- }
-}
-
-DartByteData DartConverter<DartByteData>::FromArguments(
- Dart_NativeArguments args,
- int index,
- Dart_Handle& exception) {
- Dart_Handle data = Dart_GetNativeArgument(args, index);
- TONIC_DCHECK(!LogIfError(data));
- return DartByteData(data);
-}
-
-void DartConverter<DartByteData>::SetReturnValue(Dart_NativeArguments args,
- DartByteData val) {
- Dart_SetReturnValue(args, val.dart_handle());
-}
-
-} // namespace tonic
diff --git a/typed_data/dart_byte_data.h b/typed_data/dart_byte_data.h
deleted file mode 100644
index aa2deba..0000000
--- a/typed_data/dart_byte_data.h
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2016 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_TYPED_DATA_DART_BYTE_DATA_H_
-#define LIB_TONIC_TYPED_DATA_DART_BYTE_DATA_H_
-
-#include <vector>
-
-#include "third_party/dart/runtime/include/dart_api.h"
-#include "tonic/converter/dart_converter.h"
-
-namespace tonic {
-
-class DartByteData {
- public:
- static Dart_Handle Create(const void* data, size_t length);
-
- explicit DartByteData(Dart_Handle list);
- DartByteData(DartByteData&& other);
- DartByteData();
- ~DartByteData();
-
- const void* data() const { return data_; }
- void* data() { return data_; }
- size_t length_in_bytes() const { return length_in_bytes_; }
- Dart_Handle dart_handle() const { return dart_handle_; }
-
- std::vector<char> Copy() const;
- void Release() const;
-
- explicit operator bool() const { return data_ != nullptr; }
-
- private:
- mutable void* data_;
- intptr_t length_in_bytes_;
- Dart_Handle dart_handle_;
-
- DartByteData(const DartByteData& other) = delete;
- DartByteData(const void* data, size_t length);
-};
-
-template <>
-struct DartConverter<DartByteData> {
- static void SetReturnValue(Dart_NativeArguments args, DartByteData val);
- static DartByteData FromArguments(Dart_NativeArguments args,
- int index,
- Dart_Handle& exception);
-};
-
-} // namespace tonic
-
-#endif // LIB_TONIC_TYPED_DATA_DART_BYTE_DATA_H_
diff --git a/typed_data/float32_list.h b/typed_data/float32_list.h
deleted file mode 100644
index fe2d60d..0000000
--- a/typed_data/float32_list.h
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2015 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_TYPED_DATA_FLOAT32_LIST_H_
-#define LIB_TONIC_TYPED_DATA_FLOAT32_LIST_H_
-
-#warning float32_list.h is deprecated; use typed_list.h instead.
-
-#include "tonic/typed_data/typed_list.h"
-
-#endif // LIB_TONIC_TYPED_DATA_FLOAT32_LIST_H_
diff --git a/typed_data/float64_list.h b/typed_data/float64_list.h
deleted file mode 100644
index 0a329e3..0000000
--- a/typed_data/float64_list.h
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2015 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_TYPED_DATA_FLOAT64_LIST_H_
-#define LIB_TONIC_TYPED_DATA_FLOAT64_LIST_H_
-
-#warning float64_list.h is deprecated; use typed_list.h instead.
-
-#include "tonic/typed_data/typed_list.h"
-
-#endif // LIB_TONIC_TYPED_DATA_FLOAT64_LIST_H_
diff --git a/typed_data/int32_list.h b/typed_data/int32_list.h
deleted file mode 100644
index 8c31520..0000000
--- a/typed_data/int32_list.h
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2016 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_TYPED_DATA_INT32_LIST_H_
-#define LIB_TONIC_TYPED_DATA_INT32_LIST_H_
-
-#warning int32_list.h is deprecated; use typed_list.h instead.
-
-#include "tonic/typed_data/typed_list.h"
-
-#endif // LIB_TONIC_TYPED_DATA_INT32_LIST_H_
diff --git a/typed_data/typed_list.cc b/typed_data/typed_list.cc
deleted file mode 100644
index 91786c2..0000000
--- a/typed_data/typed_list.cc
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright 2019 The Fuchsia 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 "tonic/typed_data/typed_list.h"
-
-#include <cstring>
-
-#include "tonic/logging/dart_error.h"
-
-namespace tonic {
-
-template <Dart_TypedData_Type kTypeName, typename ElemType>
-TypedList<kTypeName, ElemType>::TypedList()
- : data_(nullptr), num_elements_(0), dart_handle_(nullptr) {}
-
-template <Dart_TypedData_Type kTypeName, typename ElemType>
-TypedList<kTypeName, ElemType>::TypedList(Dart_Handle list)
- : data_(nullptr), num_elements_(0), dart_handle_(list) {
- if (Dart_IsNull(list))
- return;
-
- Dart_TypedData_Type type;
- Dart_TypedDataAcquireData(list, &type, reinterpret_cast<void**>(&data_),
- &num_elements_);
- TONIC_DCHECK(!LogIfError(list));
- if (type != kTypeName)
- Dart_ThrowException(ToDart("Non-genuine TypedData passed to engine."));
-}
-
-template <Dart_TypedData_Type kTypeName, typename ElemType>
-TypedList<kTypeName, ElemType>::TypedList(
- TypedList<kTypeName, ElemType>&& other)
- : data_(other.data_),
- num_elements_(other.num_elements_),
- dart_handle_(other.dart_handle_) {
- other.data_ = nullptr;
- other.num_elements_ = 0;
- other.dart_handle_ = nullptr;
-}
-
-template <Dart_TypedData_Type kTypeName, typename ElemType>
-TypedList<kTypeName, ElemType>::~TypedList() {
- Release();
-}
-
-template <Dart_TypedData_Type kTypeName, typename ElemType>
-void TypedList<kTypeName, ElemType>::Release() {
- if (data_) {
- Dart_TypedDataReleaseData(dart_handle_);
- data_ = nullptr;
- num_elements_ = 0;
- dart_handle_ = nullptr;
- }
-}
-
-template <Dart_TypedData_Type kTypeName, typename ElemType>
-TypedList<kTypeName, ElemType>
-DartConverter<TypedList<kTypeName, ElemType>>::FromArguments(
- Dart_NativeArguments args,
- int index,
- Dart_Handle& exception) {
- Dart_Handle list = Dart_GetNativeArgument(args, index);
- TONIC_DCHECK(!LogIfError(list));
- return TypedList<kTypeName, ElemType>(list);
-}
-
-template <Dart_TypedData_Type kTypeName, typename ElemType>
-void DartConverter<TypedList<kTypeName, ElemType>>::SetReturnValue(
- Dart_NativeArguments args,
- TypedList<kTypeName, ElemType> val) {
- Dart_SetReturnValue(args, val.dart_handle());
-}
-
-template <Dart_TypedData_Type kTypeName, typename ElemType>
-Dart_Handle DartConverter<TypedList<kTypeName, ElemType>>::ToDart(
- const ElemType* buffer,
- unsigned int length) {
- const intptr_t buffer_length = static_cast<intptr_t>(length);
- Dart_Handle array = Dart_NewTypedData(kTypeName, buffer_length);
- TONIC_DCHECK(!LogIfError(array));
- {
- Dart_TypedData_Type type;
- void* data = nullptr;
- intptr_t data_length = 0;
- Dart_TypedDataAcquireData(array, &type, &data, &data_length);
- TONIC_CHECK(type == kTypeName);
- TONIC_CHECK(data);
- TONIC_CHECK(data_length == buffer_length);
- std::memmove(data, buffer, data_length * sizeof(ElemType));
- Dart_TypedDataReleaseData(array);
- }
- return array;
-}
-
-#define TONIC_TYPED_DATA_DEFINE(name, type) \
- template class TypedList<Dart_TypedData_k##name, type>; \
- template struct DartConverter<name##List>;
-
-TONIC_TYPED_DATA_FOREACH(TONIC_TYPED_DATA_DEFINE)
-
-#undef TONIC_TYPED_DATA_DEFINE
-
-} // namespace tonic
diff --git a/typed_data/typed_list.h b/typed_data/typed_list.h
deleted file mode 100644
index f52bbcb..0000000
--- a/typed_data/typed_list.h
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 2016 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_TYPED_DATA_TYPED_LIST_H_
-#define LIB_TONIC_TYPED_DATA_TYPED_LIST_H_
-
-#include "third_party/dart/runtime/include/dart_api.h"
-#include "tonic/converter/dart_converter.h"
-
-namespace tonic {
-
-// A simple wrapper around Dart TypedData objects. It uses
-// Dart_TypedDataAcquireData to obtain a raw pointer to the data, which is
-// released when this object is destroyed.
-//
-// This is designed to be used with DartConverter only.
-template <Dart_TypedData_Type kTypeName, typename ElemType>
-class TypedList {
- public:
- explicit TypedList(Dart_Handle list);
- TypedList(TypedList<kTypeName, ElemType>&& other);
- TypedList();
- ~TypedList();
-
- ElemType& at(intptr_t i) {
- TONIC_CHECK(0 <= i);
- TONIC_CHECK(i < num_elements_);
- return data_[i];
- }
- const ElemType& at(intptr_t i) const {
- TONIC_CHECK(0 <= i);
- TONIC_CHECK(i < num_elements_);
- return data_[i];
- }
-
- ElemType& operator[](intptr_t i) { return at(i); }
- const ElemType& operator[](intptr_t i) const { return at(i); }
-
- const ElemType* data() const { return data_; }
- intptr_t num_elements() const { return num_elements_; }
- Dart_Handle dart_handle() const { return dart_handle_; }
-
- void Release();
-
- private:
- ElemType* data_;
- intptr_t num_elements_;
- Dart_Handle dart_handle_;
-};
-
-template <Dart_TypedData_Type kTypeName, typename ElemType>
-struct DartConverter<TypedList<kTypeName, ElemType>> {
- static void SetReturnValue(Dart_NativeArguments args,
- TypedList<kTypeName, ElemType> val);
- static TypedList<kTypeName, ElemType> FromArguments(Dart_NativeArguments args,
- int index,
- Dart_Handle& exception);
- static Dart_Handle ToDart(const ElemType* buffer, unsigned int length);
-};
-
-#define TONIC_TYPED_DATA_FOREACH(F) \
- F(Int8, int8_t) \
- F(Uint8, uint8_t) \
- F(Int16, int16_t) \
- F(Uint16, uint16_t) \
- F(Int32, int32_t) \
- F(Uint32, uint32_t) \
- F(Int64, int64_t) \
- F(Uint64, uint64_t) \
- F(Float32, float) \
- F(Float64, double)
-
-#define TONIC_TYPED_DATA_DECLARE(name, type) \
- using name##List = TypedList<Dart_TypedData_k##name, type>; \
- extern template class TypedList<Dart_TypedData_k##name, type>; \
- extern template struct DartConverter<name##List>;
-
-TONIC_TYPED_DATA_FOREACH(TONIC_TYPED_DATA_DECLARE)
-
-#undef TONIC_TYPED_DATA_DECLARE
-
-} // namespace tonic
-
-#endif // LIB_TONIC_TYPED_DATA_TYPED_LIST_H_
diff --git a/typed_data/uint16_list.h b/typed_data/uint16_list.h
deleted file mode 100644
index 708b35f..0000000
--- a/typed_data/uint16_list.h
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2016 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_TYPED_DATA_UINT16_LIST_H_
-#define LIB_TONIC_TYPED_DATA_UINT16_LIST_H_
-
-#warning uint16_list.h is deprecated; use typed_list.h instead.
-
-#include "tonic/typed_data/typed_list.h"
-
-#endif // LIB_TONIC_TYPED_DATA_UINT16_LIST_H_
diff --git a/typed_data/uint8_list.h b/typed_data/uint8_list.h
deleted file mode 100644
index f99c6a8..0000000
--- a/typed_data/uint8_list.h
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2016 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIB_TONIC_TYPED_DATA_UINT8_LIST_H_
-#define LIB_TONIC_TYPED_DATA_UINT8_LIST_H_
-
-#warning uint8_list.h is deprecated; use typed_list.h instead.
-
-#include "tonic/typed_data/typed_list.h"
-
-#endif // LIB_TONIC_TYPED_DATA_UINT8_LIST_H_