Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Types | Static Public Member Functions | Static Public Attributes | List of all members
dart::bin::DartUtils Class Reference

#include <dartutils.h>

Public Types

enum  MagicNumber {
  kAppJITMagicNumber , kKernelMagicNumber , kKernelListMagicNumber , kGzipMagicNumber ,
  kAotELFMagicNumber , kAotMachO32MagicNumber , kAotMachO64MagicNumber , kAotMachO64Arm64MagicNumber ,
  kAotCoffARM32MagicNumber , kAotCoffARM64MagicNumber , kAotCoffRISCV32MagicNumber , kAotCoffRISCV64MagicNumber ,
  kUnknownMagicNumber
}
 

Static Public Member Functions

static int64_t GetIntegerValue (Dart_Handle value_obj)
 
static int64_t GetInt64ValueCheckRange (Dart_Handle value_obj, int64_t lower, int64_t upper)
 
static intptr_t GetIntptrValue (Dart_Handle value_obj)
 
static bool GetInt64Value (Dart_Handle value_obj, int64_t *value)
 
static const char * GetStringValue (Dart_Handle str_obj)
 
static bool GetBooleanValue (Dart_Handle bool_obj)
 
static bool GetNativeBooleanArgument (Dart_NativeArguments args, intptr_t index)
 
static int64_t GetNativeIntegerArgument (Dart_NativeArguments args, intptr_t index)
 
static intptr_t GetNativeIntptrArgument (Dart_NativeArguments args, intptr_t index)
 
static const char * GetNativeStringArgument (Dart_NativeArguments args, intptr_t index)
 
static const char * GetNativeTypedDataArgument (Dart_NativeArguments args, intptr_t index)
 
static Dart_Handle SetIntegerField (Dart_Handle handle, const char *name, int64_t val)
 
static Dart_Handle SetStringField (Dart_Handle handle, const char *name, const char *val)
 
static bool IsDartSchemeURL (const char *url_name)
 
static bool IsDartIOLibURL (const char *url_name)
 
static bool IsDartCLILibURL (const char *url_name)
 
static bool IsDartHttpLibURL (const char *url_name)
 
static bool IsDartBuiltinLibURL (const char *url_name)
 
static bool IsHttpSchemeURL (const char *url_name)
 
static const char * RemoveScheme (const char *url)
 
static char * DirName (const char *url)
 
static void * MapExecutable (const char *name, intptr_t *file_len)
 
static void * OpenFile (const char *name, bool write)
 
static void * OpenFileUri (const char *uri, bool write)
 
static void ReadFile (uint8_t **data, intptr_t *file_len, void *stream)
 
static void WriteFile (const void *buffer, intptr_t num_bytes, void *stream)
 
static void CloseFile (void *stream)
 
static bool EntropySource (uint8_t *buffer, intptr_t length)
 
static Dart_Handle ReadStringFromFile (const char *filename)
 
static Dart_Handle MakeUint8Array (const void *buffer, intptr_t length)
 
static Dart_Handle PrepareForScriptLoading (bool is_service_isolate, bool trace_loading)
 
static Dart_Handle SetupPackageConfig (const char *packages_file)
 
static Dart_Handle SetupIOLibrary (const char *namespc_path, const char *script_uri, bool disable_exit)
 
static bool PostNull (Dart_Port port_id)
 
static bool PostInt32 (Dart_Port port_id, int32_t value)
 
static bool PostInt64 (Dart_Port port_id, int64_t value)
 
static bool PostString (Dart_Port port_id, const char *value)
 
static Dart_Handle GetDartType (const char *library_url, const char *class_name)
 
static Dart_Handle NewDartOSError ()
 
static Dart_Handle NewDartOSError (OSError *os_error)
 
static Dart_Handle NewDartExceptionWithOSError (const char *library_url, const char *exception_name, const char *message, Dart_Handle os_error)
 
static Dart_Handle NewDartExceptionWithMessage (const char *library_url, const char *exception_name, const char *message)
 
static Dart_Handle NewDartArgumentError (const char *message)
 
static Dart_Handle NewDartFormatException (const char *message)
 
static Dart_Handle NewDartUnsupportedError (const char *message)
 
static Dart_Handle NewDartIOException (const char *exception_name, const char *message, Dart_Handle os_error)
 
static Dart_Handle NewString (const char *str)
 
static Dart_Handle NewStringFormatted (const char *format,...)
 
static char * ScopedCString (intptr_t length)
 
static char * ScopedCopyCString (const char *str)
 
static char * ScopedCStringFormatted (const char *format,...) PRINTF_ATTRIBUTE(1
 
static char static char * ScopedCStringVFormatted (const char *format, va_list args)
 
static Dart_Handle NewError (const char *format,...)
 
static Dart_Handle NewInternalError (const char *message)
 
static Dart_Handle LookupBuiltinLib ()
 
static bool SetOriginalWorkingDirectory ()
 
static Dart_Handle ResolveScript (Dart_Handle url)
 
static bool IsAotMagicNumber (MagicNumber number)
 
static MagicNumber SniffForMagicNumber (const char *filename)
 
static MagicNumber SniffForMagicNumber (const uint8_t *text_buffer, intptr_t buffer_len)
 
static void SetEnvironment (dart::SimpleHashMap *environment)
 
static Dart_Handle EnvironmentCallback (Dart_Handle name)
 

Static Public Attributes

static constexpr int64_t kMaxMagicNumberSize = 8
 
static const char * original_working_directory = nullptr
 
static constexpr const char * kDartScheme = "dart:"
 
static constexpr const char * kAsyncLibURL = "dart:async"
 
static constexpr const char * kBuiltinLibURL = "dart:_builtin"
 
static constexpr const char * kCoreLibURL = "dart:core"
 
static constexpr const char * kInternalLibURL = "dart:_internal"
 
static constexpr const char * kIsolateLibURL = "dart:isolate"
 
static constexpr const char * kHttpLibURL = "dart:_http"
 
static constexpr const char * kIOLibURL = "dart:io"
 
static constexpr const char * kIOLibPatchURL = "dart:io-patch"
 
static constexpr const char * kCLILibURL = "dart:cli"
 
static constexpr const char * kCLILibPatchURL = "dart:cli-patch"
 
static constexpr const char * kUriLibURL = "dart:uri"
 
static constexpr const char * kHttpScheme = "http:"
 
static constexpr const char * kVMServiceLibURL = "dart:vmservice"
 

Detailed Description

Definition at line 108 of file dartutils.h.

Member Enumeration Documentation

◆ MagicNumber

Enumerator
kAppJITMagicNumber 
kKernelMagicNumber 
kKernelListMagicNumber 
kGzipMagicNumber 
kAotELFMagicNumber 
kAotMachO32MagicNumber 
kAotMachO64MagicNumber 
kAotMachO64Arm64MagicNumber 
kAotCoffARM32MagicNumber 
kAotCoffARM64MagicNumber 
kAotCoffRISCV32MagicNumber 
kAotCoffRISCV64MagicNumber 
kUnknownMagicNumber 

Definition at line 256 of file dartutils.h.

256 {
270 };

Member Function Documentation

◆ CloseFile()

void dart::bin::DartUtils::CloseFile ( void *  stream)
static

Definition at line 307 of file dartutils.cc.

307 {
308 File* file = reinterpret_cast<File*>(stream);
309 file->Release();
310}

◆ DirName()

char * dart::bin::DartUtils::DirName ( const char *  url)
static

Definition at line 256 of file dartutils.cc.

256 {
257 const char* slash = strrchr(url, File::PathSeparator()[0]);
258 if (slash == nullptr) {
259 return Utils::StrDup(url);
260 } else {
261 return Utils::StrNDup(url, slash - url + 1);
262 }
263}
static char * StrDup(const char *s)
static char * StrNDup(const char *s, intptr_t n)
static const char * PathSeparator()

◆ EntropySource()

bool dart::bin::DartUtils::EntropySource ( uint8_t *  buffer,
intptr_t  length 
)
static

Definition at line 312 of file dartutils.cc.

312 {
314}
static bool GetRandomBytes(intptr_t count, uint8_t *buffer)
static const uint8_t buffer[]
size_t length

◆ EnvironmentCallback()

Dart_Handle dart::bin::DartUtils::EnvironmentCallback ( Dart_Handle  name)
static

Definition at line 841 of file dartutils.cc.

841 {
842 uint8_t* utf8_array;
843 intptr_t utf8_len;
845 Dart_Handle handle = Dart_StringToUTF8(name, &utf8_array, &utf8_len);
846 if (Dart_IsError(handle)) {
847 handle = Dart_ThrowException(
849 } else {
850 char* name_chars = reinterpret_cast<char*>(malloc(utf8_len + 1));
851 memmove(name_chars, utf8_array, utf8_len);
852 name_chars[utf8_len] = '\0';
853 const char* value = nullptr;
854 if (environment_ != nullptr) {
855 SimpleHashMap::Entry* entry =
856 environment_->Lookup(GetHashmapKeyFromString(name_chars),
857 SimpleHashMap::StringHash(name_chars), false);
858 if (entry != nullptr) {
859 value = reinterpret_cast<char*>(entry->value);
860 }
861 }
862 if (value != nullptr) {
863 result = Dart_NewStringFromUTF8(reinterpret_cast<const uint8_t*>(value),
864 strlen(value));
865 if (Dart_IsError(result)) {
866 result = Dart_Null();
867 }
868 }
869 free(name_chars);
870 }
871 return result;
872}
Entry * Lookup(void *key, uint32_t hash, bool insert)
Definition hashmap.cc:20
static uint32_t StringHash(const char *key)
Definition hashmap.h:26
static Dart_Handle NewDartArgumentError(const char *message)
Definition dartutils.cc:750
struct _Dart_Handle * Dart_Handle
Definition dart_api.h:258
uint8_t value
GAsyncResult * result
static void * GetHashmapKeyFromString(char *key)
Definition dartutils.h:38
DART_EXPORT Dart_Handle Dart_StringToUTF8(Dart_Handle str, uint8_t **utf8_array, intptr_t *length)
const char *const name
void * malloc(size_t size)
Definition allocation.cc:19
DART_EXPORT Dart_Handle Dart_NewStringFromUTF8(const uint8_t *utf8_array, intptr_t length)
DART_EXPORT const char * Dart_GetError(Dart_Handle handle)
DART_EXPORT bool Dart_IsError(Dart_Handle handle)
DART_EXPORT Dart_Handle Dart_ThrowException(Dart_Handle exception)
DART_EXPORT Dart_Handle Dart_Null()

◆ GetBooleanValue()

bool dart::bin::DartUtils::GetBooleanValue ( Dart_Handle  bool_obj)
static

Definition at line 141 of file dartutils.cc.

141 {
142 bool value = false;
143 Dart_Handle result = Dart_BooleanValue(bool_obj, &value);
144 if (Dart_IsError(result)) {
146 }
147 return value;
148}
DART_EXPORT Dart_Handle Dart_BooleanValue(Dart_Handle boolean_obj, bool *value)
DART_EXPORT void Dart_PropagateError(Dart_Handle handle)

◆ GetDartType()

Dart_Handle dart::bin::DartUtils::GetDartType ( const char *  library_url,
const char *  class_name 
)
static

Definition at line 700 of file dartutils.cc.

701 {
703 NewString(class_name), 0, nullptr);
704}
static Dart_Handle NewString(const char *str)
Definition dartutils.h:214
const char *const class_name
DART_EXPORT Dart_Handle Dart_GetNonNullableType(Dart_Handle library, Dart_Handle class_name, intptr_t number_of_type_arguments, Dart_Handle *type_arguments)
DART_EXPORT Dart_Handle Dart_LookupLibrary(Dart_Handle url)

◆ GetInt64Value()

bool dart::bin::DartUtils::GetInt64Value ( Dart_Handle  value_obj,
int64_t *  value 
)
static

Definition at line 116 of file dartutils.cc.

116 {
117 bool valid = Dart_IsInteger(value_obj);
118 if (valid) {
119 Dart_Handle result = Dart_IntegerFitsIntoInt64(value_obj, &valid);
120 if (Dart_IsError(result)) {
122 }
123 }
124 if (!valid) return false;
125 Dart_Handle result = Dart_IntegerToInt64(value_obj, value);
126 if (Dart_IsError(result)) {
128 }
129 return true;
130}
DART_EXPORT Dart_Handle Dart_IntegerFitsIntoInt64(Dart_Handle integer, bool *fits)
DART_EXPORT bool Dart_IsInteger(Dart_Handle object)
DART_EXPORT Dart_Handle Dart_IntegerToInt64(Dart_Handle integer, int64_t *value)

◆ GetInt64ValueCheckRange()

int64_t dart::bin::DartUtils::GetInt64ValueCheckRange ( Dart_Handle  value_obj,
int64_t  lower,
int64_t  upper 
)
static

Definition at line 94 of file dartutils.cc.

96 {
97 int64_t value = DartUtils::GetIntegerValue(value_obj);
98 if (value < lower || upper < value) {
99 Dart_PropagateError(Dart_NewApiError("Value outside expected range"));
100 }
101 return value;
102}
static int64_t GetIntegerValue(Dart_Handle value_obj)
Definition dartutils.cc:85
DART_EXPORT Dart_Handle Dart_NewApiError(const char *error)

◆ GetIntegerValue()

int64_t dart::bin::DartUtils::GetIntegerValue ( Dart_Handle  value_obj)
static

Definition at line 85 of file dartutils.cc.

85 {
86 int64_t value = 0;
87 Dart_Handle result = Dart_IntegerToInt64(value_obj, &value);
88 if (Dart_IsError(result)) {
90 }
91 return value;
92}

◆ GetIntptrValue()

intptr_t dart::bin::DartUtils::GetIntptrValue ( Dart_Handle  value_obj)
static

Definition at line 104 of file dartutils.cc.

104 {
105 int64_t value = 0;
106 Dart_Handle result = Dart_IntegerToInt64(value_obj, &value);
107 if (Dart_IsError(result)) {
109 }
110 if (value < kIntptrMin || kIntptrMax < value) {
111 Dart_PropagateError(Dart_NewApiError("Value outside intptr_t range"));
112 }
113 return static_cast<intptr_t>(value);
114}
constexpr intptr_t kIntptrMin
Definition globals.h:556
constexpr intptr_t kIntptrMax
Definition globals.h:557

◆ GetNativeBooleanArgument()

bool dart::bin::DartUtils::GetNativeBooleanArgument ( Dart_NativeArguments  args,
intptr_t  index 
)
static

Definition at line 150 of file dartutils.cc.

151 {
152 bool value = false;
154 if (Dart_IsError(result)) {
156 }
157 return value;
158}
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
DART_EXPORT Dart_Handle Dart_GetNativeBooleanArgument(Dart_NativeArguments args, int index, bool *value)

◆ GetNativeIntegerArgument()

int64_t dart::bin::DartUtils::GetNativeIntegerArgument ( Dart_NativeArguments  args,
intptr_t  index 
)
static

Definition at line 160 of file dartutils.cc.

161 {
162 int64_t value = 0;
164 if (Dart_IsError(result)) {
166 }
167 return value;
168}
DART_EXPORT Dart_Handle Dart_GetNativeIntegerArgument(Dart_NativeArguments args, int index, int64_t *value)

◆ GetNativeIntptrArgument()

intptr_t dart::bin::DartUtils::GetNativeIntptrArgument ( Dart_NativeArguments  args,
intptr_t  index 
)
static

Definition at line 170 of file dartutils.cc.

171 {
172 int64_t value = GetNativeIntegerArgument(args, index);
173 if (value < kIntptrMin || kIntptrMax < value) {
174 Dart_PropagateError(Dart_NewApiError("Value outside intptr_t range"));
175 }
176 return static_cast<intptr_t>(value);
177}
static int64_t GetNativeIntegerArgument(Dart_NativeArguments args, intptr_t index)
Definition dartutils.cc:160

◆ GetNativeStringArgument()

const char * dart::bin::DartUtils::GetNativeStringArgument ( Dart_NativeArguments  args,
intptr_t  index 
)
static

Definition at line 179 of file dartutils.cc.

180 {
181 char* tmp = nullptr;
183 Dart_GetNativeStringArgument(args, index, reinterpret_cast<void**>(&tmp));
184 if (Dart_IsError(result)) {
186 }
187 if (tmp != nullptr) {
188 return tmp;
189 }
190 const char* cstring = nullptr;
192 if (Dart_IsError(result)) {
194 }
195 ASSERT(cstring != nullptr);
196 return cstring;
197}
#define ASSERT(E)
DART_EXPORT Dart_Handle Dart_GetNativeStringArgument(Dart_NativeArguments args, int arg_index, void **peer)
DART_EXPORT Dart_Handle Dart_StringToCString(Dart_Handle object, const char **cstr)

◆ GetNativeTypedDataArgument()

const char * dart::bin::DartUtils::GetNativeTypedDataArgument ( Dart_NativeArguments  args,
intptr_t  index 
)
static

Definition at line 199 of file dartutils.cc.

200 {
201 Dart_Handle handle = Dart_GetNativeArgument(args, index);
202 TypedDataScope data(handle);
204 return data.GetScopedCString();
205}
@ Dart_TypedData_kUint8
Definition dart_api.h:2606
DART_EXPORT Dart_Handle Dart_GetNativeArgument(Dart_NativeArguments args, int index)
static int8_t data[kExtLength]

◆ GetStringValue()

const char * dart::bin::DartUtils::GetStringValue ( Dart_Handle  str_obj)
static

Definition at line 132 of file dartutils.cc.

132 {
133 const char* cstring = nullptr;
134 Dart_Handle result = Dart_StringToCString(str_obj, &cstring);
135 if (Dart_IsError(result)) {
137 }
138 return cstring;
139}

◆ IsAotMagicNumber()

static bool dart::bin::DartUtils::IsAotMagicNumber ( MagicNumber  number)
inlinestatic

Definition at line 275 of file dartutils.h.

275 {
276 return (number >= DartUtils::kAotELFMagicNumber) &&
278 }

◆ IsDartBuiltinLibURL()

bool dart::bin::DartUtils::IsDartBuiltinLibURL ( const char *  url_name)
static

Definition at line 243 of file dartutils.cc.

243 {
244 return (strcmp(url_name, kBuiltinLibURL) == 0);
245}
static constexpr const char * kBuiltinLibURL
Definition dartutils.h:292

◆ IsDartCLILibURL()

bool dart::bin::DartUtils::IsDartCLILibURL ( const char *  url_name)
static

Definition at line 235 of file dartutils.cc.

235 {
236 return (strcmp(url_name, kCLILibURL) == 0);
237}
static constexpr const char * kCLILibURL
Definition dartutils.h:299

◆ IsDartHttpLibURL()

bool dart::bin::DartUtils::IsDartHttpLibURL ( const char *  url_name)
static

Definition at line 239 of file dartutils.cc.

239 {
240 return (strcmp(url_name, kHttpLibURL) == 0);
241}
static constexpr const char * kHttpLibURL
Definition dartutils.h:296

◆ IsDartIOLibURL()

bool dart::bin::DartUtils::IsDartIOLibURL ( const char *  url_name)
static

Definition at line 231 of file dartutils.cc.

231 {
232 return (strcmp(url_name, kIOLibURL) == 0);
233}
static constexpr const char * kIOLibURL
Definition dartutils.h:297

◆ IsDartSchemeURL()

bool dart::bin::DartUtils::IsDartSchemeURL ( const char *  url_name)
static

Definition at line 219 of file dartutils.cc.

219 {
220 static const intptr_t kDartSchemeLen = strlen(kDartScheme);
221 // If the URL starts with "dart:" then it is considered as a special
222 // library URL which is handled differently from other URLs.
223 return (strncmp(url_name, kDartScheme, kDartSchemeLen) == 0);
224}
static constexpr const char * kDartScheme
Definition dartutils.h:290

◆ IsHttpSchemeURL()

bool dart::bin::DartUtils::IsHttpSchemeURL ( const char *  url_name)
static

Definition at line 226 of file dartutils.cc.

226 {
227 static const intptr_t kHttpSchemeLen = strlen(kHttpScheme);
228 return (strncmp(url_name, kHttpScheme, kHttpSchemeLen) == 0);
229}
static constexpr const char * kHttpScheme
Definition dartutils.h:302

◆ LookupBuiltinLib()

static Dart_Handle dart::bin::DartUtils::LookupBuiltinLib ( )
inlinestatic

Definition at line 248 of file dartutils.h.

248 {
250 }

◆ MakeUint8Array()

Dart_Handle dart::bin::DartUtils::MakeUint8Array ( const void *  buffer,
intptr_t  length 
)
static

Definition at line 364 of file dartutils.cc.

364 {
366 RETURN_IF_ERROR(array);
367 {
368 Dart_TypedData_Type td_type;
369 void* td_data;
370 intptr_t td_len;
372 Dart_TypedDataAcquireData(array, &td_type, &td_data, &td_len);
374 ASSERT(td_type == Dart_TypedData_kUint8);
375 ASSERT(td_len == len);
376 ASSERT(td_data != nullptr);
377 memmove(td_data, buffer, td_len);
380 }
381 return array;
382}
Dart_TypedData_Type
Definition dart_api.h:2603
#define RETURN_IF_ERROR(handle)
Definition dartutils.cc:24
DART_EXPORT Dart_Handle Dart_NewTypedData(Dart_TypedData_Type type, intptr_t length)
DART_EXPORT Dart_Handle Dart_TypedDataAcquireData(Dart_Handle object, Dart_TypedData_Type *type, void **data, intptr_t *len)
DART_EXPORT Dart_Handle Dart_TypedDataReleaseData(Dart_Handle object)

◆ MapExecutable()

static void * dart::bin::DartUtils::MapExecutable ( const char *  name,
intptr_t *  file_len 
)
static

◆ NewDartArgumentError()

Dart_Handle dart::bin::DartUtils::NewDartArgumentError ( const char *  message)
static

Definition at line 750 of file dartutils.cc.

750 {
751 return NewDartExceptionWithMessage(kCoreLibURL, "ArgumentError", message);
752}
static Dart_Handle NewDartExceptionWithMessage(const char *library_url, const char *exception_name, const char *message)
Definition dartutils.cc:735
static constexpr const char * kCoreLibURL
Definition dartutils.h:293
Win32Message message

◆ NewDartExceptionWithMessage()

Dart_Handle dart::bin::DartUtils::NewDartExceptionWithMessage ( const char *  library_url,
const char *  exception_name,
const char *  message 
)
static

Definition at line 735 of file dartutils.cc.

737 {
738 // Create a Dart Exception object with a message.
739 Dart_Handle type = GetDartType(library_url, exception_name);
741 if (message != nullptr) {
742 Dart_Handle args[1];
743 args[0] = NewString(message);
744 return Dart_New(type, Dart_Null(), 1, args);
745 } else {
746 return Dart_New(type, Dart_Null(), 0, nullptr);
747 }
748}
static Dart_Handle GetDartType(const char *library_url, const char *class_name)
Definition dartutils.cc:700
DART_EXPORT Dart_Handle Dart_New(Dart_Handle type, Dart_Handle constructor_name, int number_of_arguments, Dart_Handle *arguments)

◆ NewDartExceptionWithOSError()

Dart_Handle dart::bin::DartUtils::NewDartExceptionWithOSError ( const char *  library_url,
const char *  exception_name,
const char *  message,
Dart_Handle  os_error 
)
static

Definition at line 722 of file dartutils.cc.

725 {
726 // Create a Dart Exception object with a message and an OSError.
727 Dart_Handle type = GetDartType(library_url, exception_name);
729 Dart_Handle args[2];
730 args[0] = NewString(message);
731 args[1] = os_error;
732 return Dart_New(type, Dart_Null(), 2, args);
733}

◆ NewDartFormatException()

Dart_Handle dart::bin::DartUtils::NewDartFormatException ( const char *  message)
static

Definition at line 754 of file dartutils.cc.

754 {
755 return NewDartExceptionWithMessage(kCoreLibURL, "FormatException", message);
756}

◆ NewDartIOException()

Dart_Handle dart::bin::DartUtils::NewDartIOException ( const char *  exception_name,
const char *  message,
Dart_Handle  os_error 
)
static

Definition at line 762 of file dartutils.cc.

764 {
765 // Create a dart:io exception object of the given type.
766 return NewDartExceptionWithOSError(kIOLibURL, exception_name, message,
767 os_error);
768}
static Dart_Handle NewDartExceptionWithOSError(const char *library_url, const char *exception_name, const char *message, Dart_Handle os_error)
Definition dartutils.cc:722

◆ NewDartOSError() [1/2]

Dart_Handle dart::bin::DartUtils::NewDartOSError ( )
static

Definition at line 706 of file dartutils.cc.

706 {
707 // Extract the current OS error.
708 OSError os_error;
709 return NewDartOSError(&os_error);
710}
static Dart_Handle NewDartOSError()
Definition dartutils.cc:706

◆ NewDartOSError() [2/2]

Dart_Handle dart::bin::DartUtils::NewDartOSError ( OSError os_error)
static

Definition at line 712 of file dartutils.cc.

712 {
713 // Create a dart:io OSError object with the information retrieved from the OS.
716 Dart_Handle args[2];
717 args[0] = NewString(os_error->message());
718 args[1] = Dart_NewInteger(os_error->code());
719 return Dart_New(type, Dart_Null(), 2, args);
720}
DART_EXPORT Dart_Handle Dart_NewInteger(int64_t value)

◆ NewDartUnsupportedError()

Dart_Handle dart::bin::DartUtils::NewDartUnsupportedError ( const char *  message)
static

Definition at line 758 of file dartutils.cc.

758 {
759 return NewDartExceptionWithMessage(kCoreLibURL, "UnsupportedError", message);
760}

◆ NewError()

Dart_Handle dart::bin::DartUtils::NewError ( const char *  format,
  ... 
)
static

Definition at line 770 of file dartutils.cc.

770 {
771 va_list measure_args;
772 va_start(measure_args, format);
773 intptr_t len = Utils::VSNPrint(nullptr, 0, format, measure_args);
774 va_end(measure_args);
775
776 char* buffer = reinterpret_cast<char*>(Dart_ScopeAllocate(len + 1));
777 MSAN_UNPOISON(buffer, (len + 1));
778 va_list print_args;
779 va_start(print_args, format);
780 Utils::VSNPrint(buffer, (len + 1), format, print_args);
781 va_end(print_args);
782
783 return Dart_NewApiError(buffer);
784}
static int static int VSNPrint(char *str, size_t size, const char *format, va_list args)
uint32_t uint32_t * format
#define MSAN_UNPOISON(ptr, len)
va_start(args, format)
va_end(args)
DART_EXPORT uint8_t * Dart_ScopeAllocate(intptr_t size)

◆ NewInternalError()

Dart_Handle dart::bin::DartUtils::NewInternalError ( const char *  message)
static

Definition at line 786 of file dartutils.cc.

786 {
787 return NewDartExceptionWithMessage(kCoreLibURL, "_InternalError", message);
788}

◆ NewString()

static Dart_Handle dart::bin::DartUtils::NewString ( const char *  str)
inlinestatic

Definition at line 214 of file dartutils.h.

214 {
215 ASSERT(str != nullptr);
216 return Dart_NewStringFromUTF8(reinterpret_cast<const uint8_t*>(str),
217 strlen(str));
218 }

◆ NewStringFormatted()

Dart_Handle dart::bin::DartUtils::NewStringFormatted ( const char *  format,
  ... 
)
static

Definition at line 790 of file dartutils.cc.

790 {
791 va_list args;
794 va_end(args);
795 return NewString(result);
796}
static char static char * ScopedCStringVFormatted(const char *format, va_list args)
Definition dartutils.cc:798

◆ OpenFile()

void * dart::bin::DartUtils::OpenFile ( const char *  name,
bool  write 
)
static

Definition at line 265 of file dartutils.cc.

265 {
266 File* file =
267 File::Open(nullptr, name, write ? File::kWriteTruncate : File::kRead);
268 return reinterpret_cast<void*>(file);
269}
static File * Open(Namespace *namespc, const char *path, FileOpenMode mode)
@ kWriteTruncate
Definition file.h:60
void write(SkWStream *wStream, const T &text)
Definition skqp.cpp:188

◆ OpenFileUri()

void * dart::bin::DartUtils::OpenFileUri ( const char *  uri,
bool  write 
)
static

Definition at line 271 of file dartutils.cc.

271 {
272 File* file =
273 File::OpenUri(nullptr, uri, write ? File::kWriteTruncate : File::kRead);
274 return reinterpret_cast<void*>(file);
275}
static File * OpenUri(Namespace *namespc, const char *uri, FileOpenMode mode)

◆ PostInt32()

bool dart::bin::DartUtils::PostInt32 ( Dart_Port  port_id,
int32_t  value 
)
static

Definition at line 676 of file dartutils.cc.

676 {
677 // Post a message with the integer value.
678 int32_t min = 0xc0000000; // -1073741824
679 int32_t max = 0x3fffffff; // 1073741823
680 ASSERT(min <= value && value < max);
681 Dart_CObject object;
682 object.type = Dart_CObject_kInt32;
683 object.value.as_int32 = value;
684 return Dart_PostCObject(port_id, &object);
685}
@ Dart_CObject_kInt32
static float max(float r, float g, float b)
Definition hsl.cpp:49
static float min(float r, float g, float b)
Definition hsl.cpp:48
DART_EXPORT bool Dart_PostCObject(Dart_Port port_id, Dart_CObject *message)
Dart_CObject_Type type

◆ PostInt64()

bool dart::bin::DartUtils::PostInt64 ( Dart_Port  port_id,
int64_t  value 
)
static

Definition at line 687 of file dartutils.cc.

687 {
688 // Post a message with the integer value.
689 Dart_CObject object;
690 object.type = Dart_CObject_kInt64;
691 object.value.as_int64 = value;
692 return Dart_PostCObject(port_id, &object);
693}
@ Dart_CObject_kInt64

◆ PostNull()

bool dart::bin::DartUtils::PostNull ( Dart_Port  port_id)
static

Definition at line 671 of file dartutils.cc.

671 {
672 // Post a message with just the null object.
673 return Dart_PostCObject(port_id, CObject::Null()->AsApiCObject());
674}
static CObject * Null()
Definition dartutils.cc:885

◆ PostString()

bool dart::bin::DartUtils::PostString ( Dart_Port  port_id,
const char *  value 
)
static

Definition at line 695 of file dartutils.cc.

695 {
696 Dart_CObject* object = CObject::NewString(value);
697 return Dart_PostCObject(port_id, object);
698}
static Dart_CObject * NewString(const char *str)
Definition dartutils.cc:933

◆ PrepareForScriptLoading()

Dart_Handle dart::bin::DartUtils::PrepareForScriptLoading ( bool  is_service_isolate,
bool  trace_loading 
)
static

Definition at line 574 of file dartutils.cc.

575 {
576 // First ensure all required libraries are available.
578 RETURN_IF_ERROR(url);
579 Dart_Handle core_lib = Dart_LookupLibrary(url);
580 RETURN_IF_ERROR(core_lib);
581 url = NewString(kAsyncLibURL);
582 RETURN_IF_ERROR(url);
583 Dart_Handle async_lib = Dart_LookupLibrary(url);
584 RETURN_IF_ERROR(async_lib);
586 RETURN_IF_ERROR(url);
587 Dart_Handle isolate_lib = Dart_LookupLibrary(url);
588 RETURN_IF_ERROR(isolate_lib);
590 RETURN_IF_ERROR(url);
591 Dart_Handle internal_lib = Dart_LookupLibrary(url);
592 RETURN_IF_ERROR(internal_lib);
593 Dart_Handle builtin_lib =
595 RETURN_IF_ERROR(builtin_lib);
598 RETURN_IF_ERROR(io_lib);
601 RETURN_IF_ERROR(cli_lib);
603
604 // We need to ensure that all the scripts loaded so far are finalized
605 // as we are about to invoke some Dart code below to setup closures.
608
609 result = PrepareBuiltinLibrary(builtin_lib, internal_lib, is_service_isolate,
610 trace_loading);
612
613 RETURN_IF_ERROR(PrepareAsyncLibrary(async_lib, isolate_lib));
614 RETURN_IF_ERROR(PrepareCoreLibrary(core_lib, io_lib, is_service_isolate));
615 RETURN_IF_ERROR(PrepareIsolateLibrary(isolate_lib));
616 RETURN_IF_ERROR(PrepareIOLibrary(io_lib));
617 RETURN_IF_ERROR(PrepareCLILibrary(cli_lib));
618 return result;
619}
static Dart_Handle LoadAndCheckLibrary(BuiltinLibraryId id)
Definition builtin.cc:43
static void SetNativeResolver(BuiltinLibraryId id)
Definition builtin.cc:28
static constexpr const char * kAsyncLibURL
Definition dartutils.h:291
static constexpr const char * kIsolateLibURL
Definition dartutils.h:295
static constexpr const char * kInternalLibURL
Definition dartutils.h:294
DART_EXPORT Dart_Handle Dart_FinalizeLoading(bool complete_futures)

◆ ReadFile()

void dart::bin::DartUtils::ReadFile ( uint8_t **  data,
intptr_t *  file_len,
void *  stream 
)
static

Definition at line 277 of file dartutils.cc.

277 {
278 ASSERT(data != nullptr);
279 ASSERT(len != nullptr);
280 ASSERT(stream != nullptr);
281 File* file_stream = reinterpret_cast<File*>(stream);
282 int64_t file_len = file_stream->Length();
283 if ((file_len < 0) || (file_len > kIntptrMax)) {
284 *data = nullptr;
285 *len = -1; // Indicates read was not successful.
286 return;
287 }
288 *len = static_cast<intptr_t>(file_len);
289 *data = reinterpret_cast<uint8_t*>(malloc(*len));
290 if (!file_stream->ReadFully(*data, *len)) {
291 free(*data);
292 *data = nullptr;
293 *len = -1; // Indicates read was not successful.
294 return;
295 }
296}

◆ ReadStringFromFile()

Dart_Handle dart::bin::DartUtils::ReadStringFromFile ( const char *  filename)
static

Definition at line 352 of file dartutils.cc.

352 {
353 const char* error_msg = nullptr;
354 intptr_t len;
355 uint8_t* text_buffer = ReadFileFully(filename, &len, &error_msg);
356 if (text_buffer == nullptr) {
357 return Dart_NewApiError(error_msg);
358 }
359 Dart_Handle str = Dart_NewStringFromUTF8(text_buffer, len);
360 free(text_buffer);
361 return str;
362}
static uint8_t * ReadFileFully(const char *filename, intptr_t *file_len, const char **error_msg)
Definition dartutils.cc:333

◆ RemoveScheme()

const char * dart::bin::DartUtils::RemoveScheme ( const char *  url)
static

Definition at line 247 of file dartutils.cc.

247 {
248 const char* colon = strchr(url, ':');
249 if (colon == nullptr) {
250 return url;
251 } else {
252 return colon + 1;
253 }
254}

◆ ResolveScript()

Dart_Handle dart::bin::DartUtils::ResolveScript ( Dart_Handle  url)
static

Definition at line 390 of file dartutils.cc.

390 {
391 const int kNumArgs = 1;
392 Dart_Handle dart_args[kNumArgs];
393 dart_args[0] = url;
395 NewString("_resolveScriptUri"), kNumArgs, dart_args);
396}
static Dart_Handle LookupBuiltinLib()
Definition dartutils.h:248
DART_EXPORT Dart_Handle Dart_Invoke(Dart_Handle target, Dart_Handle name, int number_of_arguments, Dart_Handle *arguments)

◆ ScopedCopyCString()

static char * dart::bin::DartUtils::ScopedCopyCString ( const char *  str)
inlinestatic

Definition at line 232 of file dartutils.h.

232 {
233 size_t str_len = strlen(str);
234 char* result = ScopedCString(str_len + 1);
235 memmove(result, str, str_len);
236 result[str_len] = '\0';
237 return result;
238 }
static char * ScopedCString(intptr_t length)
Definition dartutils.h:224

◆ ScopedCString()

static char * dart::bin::DartUtils::ScopedCString ( intptr_t  length)
inlinestatic

Definition at line 224 of file dartutils.h.

224 {
225 char* result = nullptr;
226 result =
227 reinterpret_cast<char*>(Dart_ScopeAllocate(length * sizeof(*result)));
228 return result;
229 }

◆ ScopedCStringFormatted()

char * dart::bin::DartUtils::ScopedCStringFormatted ( const char *  format,
  ... 
)
static

Definition at line 819 of file dartutils.cc.

819 {
820 va_list args;
823 va_end(args);
824 return result;
825}

◆ ScopedCStringVFormatted()

char * dart::bin::DartUtils::ScopedCStringVFormatted ( const char *  format,
va_list  args 
)
static

Definition at line 798 of file dartutils.cc.

798 {
799 va_list measure_args;
800 va_copy(measure_args, args);
801 intptr_t len = Utils::VSNPrint(nullptr, 0, format, measure_args);
802 if (len < 0) {
803 return nullptr;
804 }
805 va_end(measure_args);
806
807 char* buffer = ScopedCString(len + 1);
808 MSAN_UNPOISON(buffer, (len + 1));
809 va_list print_args;
810 va_copy(print_args, args);
811 len = Utils::VSNPrint(buffer, (len + 1), format, print_args);
812 if (len < 0) {
813 return nullptr;
814 }
815 va_end(print_args);
816 return buffer;
817}

◆ SetEnvironment()

void dart::bin::DartUtils::SetEnvironment ( dart::SimpleHashMap environment)
static

Definition at line 837 of file dartutils.cc.

837 {
838 environment_ = environment;
839}
static dart::SimpleHashMap * environment

◆ SetIntegerField()

Dart_Handle dart::bin::DartUtils::SetIntegerField ( Dart_Handle  handle,
const char *  name,
int64_t  val 
)
static

Definition at line 207 of file dartutils.cc.

209 {
210 return Dart_SetField(handle, NewString(name), Dart_NewInteger(val));
211}
DART_EXPORT Dart_Handle Dart_SetField(Dart_Handle container, Dart_Handle name, Dart_Handle value)

◆ SetOriginalWorkingDirectory()

bool dart::bin::DartUtils::SetOriginalWorkingDirectory ( )
static

Definition at line 827 of file dartutils.cc.

827 {
828 // If we happen to re-initialize the Dart VM multiple times, make sure to free
829 // the old string (allocated by getcwd()) before setting a new one.
830 if (original_working_directory != nullptr) {
831 free(const_cast<char*>(original_working_directory));
832 }
834 return original_working_directory != nullptr;
835}
static const char * original_working_directory
Definition dartutils.h:288
static char * CurrentNoScope()

◆ SetStringField()

Dart_Handle dart::bin::DartUtils::SetStringField ( Dart_Handle  handle,
const char *  name,
const char *  val 
)
static

Definition at line 213 of file dartutils.cc.

215 {
216 return Dart_SetField(handle, NewString(name), NewString(val));
217}

◆ SetupIOLibrary()

Dart_Handle dart::bin::DartUtils::SetupIOLibrary ( const char *  namespc_path,
const char *  script_uri,
bool  disable_exit 
)
static

Definition at line 621 of file dartutils.cc.

623 {
624 Dart_Handle io_lib_url = NewString(kIOLibURL);
625 RETURN_IF_ERROR(io_lib_url);
626 Dart_Handle io_lib = Dart_LookupLibrary(io_lib_url);
627 RETURN_IF_ERROR(io_lib);
628
629 if (namespc_path != nullptr) {
630 Dart_Handle namespc_type = GetDartType(DartUtils::kIOLibURL, "_Namespace");
631 RETURN_IF_ERROR(namespc_type);
632 Dart_Handle args[1];
633 args[0] = NewString(namespc_path);
636 Dart_Invoke(namespc_type, NewString("_setupNamespace"), 1, args);
638 }
639
640 if (disable_exit) {
641 Dart_Handle embedder_config_type =
642 GetDartType(DartUtils::kIOLibURL, "_EmbedderConfig");
643 RETURN_IF_ERROR(embedder_config_type);
644 Dart_Handle result = Dart_SetField(embedder_config_type,
645 NewString("_mayExit"), Dart_False());
647 }
648
649 Dart_Handle platform_type = GetDartType(DartUtils::kIOLibURL, "_Platform");
650 RETURN_IF_ERROR(platform_type);
651 Dart_Handle script_name = NewString("_nativeScript");
652 RETURN_IF_ERROR(script_name);
653 Dart_Handle dart_script = NewString(script_uri);
654 RETURN_IF_ERROR(dart_script);
655 Dart_Handle set_script_name =
656 Dart_SetField(platform_type, script_name, dart_script);
657 RETURN_IF_ERROR(set_script_name);
658
659#if !defined(PRODUCT)
660 Dart_Handle network_profiling_type =
661 GetDartType(DartUtils::kIOLibURL, "_NetworkProfiling");
662 RETURN_IF_ERROR(network_profiling_type);
664 Dart_Invoke(network_profiling_type,
665 NewString("_registerServiceExtension"), 0, nullptr);
667#endif // !defined(PRODUCT)
668 return Dart_Null();
669}
DART_EXPORT Dart_Handle Dart_False()

◆ SetupPackageConfig()

Dart_Handle dart::bin::DartUtils::SetupPackageConfig ( const char *  packages_file)
static

Definition at line 559 of file dartutils.cc.

559 {
561
562 if (packages_config != nullptr) {
563 result = NewString(packages_config);
565 const int kNumArgs = 1;
566 Dart_Handle dart_args[kNumArgs];
567 dart_args[0] = result;
569 NewString("_setPackagesMap"), kNumArgs, dart_args);
570 }
571 return result;
572}

◆ SniffForMagicNumber() [1/2]

DartUtils::MagicNumber dart::bin::DartUtils::SniffForMagicNumber ( const char *  filename)
static

Definition at line 407 of file dartutils.cc.

407 {
421 if (File::GetType(nullptr, filename, true) == File::kIsFile) {
422 File* file = File::Open(nullptr, filename, File::kRead);
423 if (file != nullptr) {
424 RefCntReleaseScope<File> rs(file);
426 if (file->ReadFully(&header, kMaxMagicNumberSize)) {
427 magic_number = DartUtils::SniffForMagicNumber(header, sizeof(header));
428 }
429 }
430 }
431 return magic_number;
432}
static MagicNumber SniffForMagicNumber(const char *filename)
Definition dartutils.cc:407
static constexpr int64_t kMaxMagicNumberSize
Definition dartutils.h:271
static Type GetType(Namespace *namespc, const char *path, bool follow_links)
MagicNumberData gzip_magic_number
Definition dartutils.cc:52
MagicNumberData aotcoff_riscv32_magic_number
Definition dartutils.cc:46
MagicNumberData appjit_magic_number
Definition dartutils.cc:39
MagicNumberData aotmacho32_magic_number
Definition dartutils.cc:41
MagicNumberData aotmacho64_magic_number
Definition dartutils.cc:42
MagicNumberData kernel_list_magic_number
Definition dartutils.cc:49
MagicNumberData aotelf_magic_number
Definition dartutils.cc:40
MagicNumberData aotcoff_riscv64_magic_number
Definition dartutils.cc:47
MagicNumberData kernel_magic_number
Definition dartutils.cc:48
MagicNumberData aotcoff_arm64_magic_number
Definition dartutils.cc:45
MagicNumberData aotcoff_arm32_magic_number
Definition dartutils.cc:44
MagicNumberData aotmacho64_arm64_magic_number
Definition dartutils.cc:43
static const char header[]
Definition skpbench.cpp:88

◆ SniffForMagicNumber() [2/2]

DartUtils::MagicNumber dart::bin::DartUtils::SniffForMagicNumber ( const uint8_t *  text_buffer,
intptr_t  buffer_len 
)
static

Definition at line 434 of file dartutils.cc.

435 {
436 if (CheckMagicNumber(buffer, buffer_length, appjit_magic_number)) {
437 return kAppJITMagicNumber;
438 }
439
440 if (CheckMagicNumber(buffer, buffer_length, kernel_magic_number)) {
441 return kKernelMagicNumber;
442 }
443
444 if (CheckMagicNumber(buffer, buffer_length, kernel_list_magic_number)) {
446 }
447
448 if (CheckMagicNumber(buffer, buffer_length, gzip_magic_number)) {
449 return kGzipMagicNumber;
450 }
451
452 if (CheckMagicNumber(buffer, buffer_length, gzip_magic_number)) {
453 return kGzipMagicNumber;
454 }
455
456 if (CheckMagicNumber(buffer, buffer_length, aotelf_magic_number)) {
457 return kAotELFMagicNumber;
458 }
459
460 if (CheckMagicNumber(buffer, buffer_length, aotmacho32_magic_number)) {
462 }
463
464 if (CheckMagicNumber(buffer, buffer_length, aotmacho64_magic_number)) {
466 }
467
470 }
471
474 }
475
478 }
479
482 }
483
486 }
487
488 return kUnknownMagicNumber;
489}
static bool CheckMagicNumber(const uint8_t *buffer, intptr_t buffer_length, const MagicNumberData &magic_number)
Definition dartutils.cc:398

◆ WriteFile()

void dart::bin::DartUtils::WriteFile ( const void *  buffer,
intptr_t  num_bytes,
void *  stream 
)
static

Definition at line 298 of file dartutils.cc.

300 {
301 ASSERT(stream != nullptr);
302 File* file_stream = reinterpret_cast<File*>(stream);
303 bool bytes_written = file_stream->WriteFully(buffer, num_bytes);
304 ASSERT(bytes_written);
305}

Member Data Documentation

◆ kAsyncLibURL

constexpr const char* dart::bin::DartUtils::kAsyncLibURL = "dart:async"
staticconstexpr

Definition at line 291 of file dartutils.h.

◆ kBuiltinLibURL

constexpr const char* dart::bin::DartUtils::kBuiltinLibURL = "dart:_builtin"
staticconstexpr

Definition at line 292 of file dartutils.h.

◆ kCLILibPatchURL

constexpr const char* dart::bin::DartUtils::kCLILibPatchURL = "dart:cli-patch"
staticconstexpr

Definition at line 300 of file dartutils.h.

◆ kCLILibURL

constexpr const char* dart::bin::DartUtils::kCLILibURL = "dart:cli"
staticconstexpr

Definition at line 299 of file dartutils.h.

◆ kCoreLibURL

constexpr const char* dart::bin::DartUtils::kCoreLibURL = "dart:core"
staticconstexpr

Definition at line 293 of file dartutils.h.

◆ kDartScheme

constexpr const char* dart::bin::DartUtils::kDartScheme = "dart:"
staticconstexpr

Definition at line 290 of file dartutils.h.

◆ kHttpLibURL

constexpr const char* dart::bin::DartUtils::kHttpLibURL = "dart:_http"
staticconstexpr

Definition at line 296 of file dartutils.h.

◆ kHttpScheme

constexpr const char* dart::bin::DartUtils::kHttpScheme = "http:"
staticconstexpr

Definition at line 302 of file dartutils.h.

◆ kInternalLibURL

constexpr const char* dart::bin::DartUtils::kInternalLibURL = "dart:_internal"
staticconstexpr

Definition at line 294 of file dartutils.h.

◆ kIOLibPatchURL

constexpr const char* dart::bin::DartUtils::kIOLibPatchURL = "dart:io-patch"
staticconstexpr

Definition at line 298 of file dartutils.h.

◆ kIOLibURL

constexpr const char* dart::bin::DartUtils::kIOLibURL = "dart:io"
staticconstexpr

Definition at line 297 of file dartutils.h.

◆ kIsolateLibURL

constexpr const char* dart::bin::DartUtils::kIsolateLibURL = "dart:isolate"
staticconstexpr

Definition at line 295 of file dartutils.h.

◆ kMaxMagicNumberSize

constexpr int64_t dart::bin::DartUtils::kMaxMagicNumberSize = 8
staticconstexpr

Definition at line 271 of file dartutils.h.

◆ kUriLibURL

constexpr const char* dart::bin::DartUtils::kUriLibURL = "dart:uri"
staticconstexpr

Definition at line 301 of file dartutils.h.

◆ kVMServiceLibURL

constexpr const char* dart::bin::DartUtils::kVMServiceLibURL = "dart:vmservice"
staticconstexpr

Definition at line 303 of file dartutils.h.

◆ original_working_directory

const char * dart::bin::DartUtils::original_working_directory = nullptr
static

Definition at line 288 of file dartutils.h.


The documentation for this class was generated from the following files: