Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(67)

Side by Side Diff: runtime/bin/dartutils.cc

Issue 2480793002: clang-format runtime/bin (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/bin/dartutils.h ('k') | runtime/bin/directory.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "bin/dartutils.h" 5 #include "bin/dartutils.h"
6 6
7 #include "bin/crypto.h" 7 #include "bin/crypto.h"
8 #include "bin/directory.h" 8 #include "bin/directory.h"
9 #include "bin/extensions.h" 9 #include "bin/extensions.h"
10 #include "bin/file.h" 10 #include "bin/file.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 49
50 50
51 struct MagicNumberData { 51 struct MagicNumberData {
52 static const intptr_t kLength = 4; 52 static const intptr_t kLength = 4;
53 53
54 const uint8_t bytes[kLength]; 54 const uint8_t bytes[kLength];
55 bool should_skip; 55 bool should_skip;
56 }; 56 };
57 57
58 58
59 MagicNumberData snapshot_magic_number = { { 0xf5, 0xf5, 0xdc, 0xdc }, true }; 59 MagicNumberData snapshot_magic_number = {{0xf5, 0xf5, 0xdc, 0xdc}, true};
60 MagicNumberData kernel_magic_number = { {0x90, 0xab, 0xcd, 0xef}, false }; 60 MagicNumberData kernel_magic_number = {{0x90, 0xab, 0xcd, 0xef}, false};
61 61
62 62
63 bool TryReadKernel(const char* script_uri, 63 bool TryReadKernel(const char* script_uri,
64 const uint8_t** kernel_file, 64 const uint8_t** kernel_file,
65 intptr_t* kernel_length) { 65 intptr_t* kernel_length) {
66 *kernel_file = NULL; 66 *kernel_file = NULL;
67 *kernel_length = -1; 67 *kernel_length = -1;
68 bool is_kernel_file = false; 68 bool is_kernel_file = false;
69 void* script_file = DartUtils::OpenFile(script_uri, false); 69 void* script_file = DartUtils::OpenFile(script_uri, false);
70 if (script_file != NULL) { 70 if (script_file != NULL) {
71 const uint8_t* buffer = NULL; 71 const uint8_t* buffer = NULL;
72 DartUtils::ReadFile(&buffer, kernel_length, script_file); 72 DartUtils::ReadFile(&buffer, kernel_length, script_file);
73 DartUtils::CloseFile(script_file); 73 DartUtils::CloseFile(script_file);
74 if (*kernel_length > 0 && buffer != NULL) { 74 if (*kernel_length > 0 && buffer != NULL) {
75 *kernel_file = buffer; 75 *kernel_file = buffer;
76 if (DartUtils::SniffForMagicNumber(&buffer, kernel_length) != 76 if (DartUtils::SniffForMagicNumber(&buffer, kernel_length) !=
77 DartUtils::kKernelMagicNumber) { 77 DartUtils::kKernelMagicNumber) {
78 free(const_cast<uint8_t*>(buffer)); 78 free(const_cast<uint8_t*>(buffer));
79 *kernel_file = NULL; 79 *kernel_file = NULL;
80 } else { 80 } else {
81 // Do not free buffer if this is a kernel file - kernel_file will be 81 // Do not free buffer if this is a kernel file - kernel_file will be
82 // backed by the same memory as the buffer and caller will own it. 82 // backed by the same memory as the buffer and caller will own it.
83 // Caller is responsible for freeing the buffer when this function 83 // Caller is responsible for freeing the buffer when this function
84 // returns true. 84 // returns true.
85 is_kernel_file = true; 85 is_kernel_file = true;
86 } 86 }
87 } 87 }
88 } 88 }
89 return is_kernel_file; 89 return is_kernel_file;
90 } 90 }
91 91
92 92
93 static bool IsWindowsHost() { 93 static bool IsWindowsHost() {
94 #if defined(TARGET_OS_WINDOWS) 94 #if defined(TARGET_OS_WINDOWS)
95 return true; 95 return true;
96 #else // defined(TARGET_OS_WINDOWS) 96 #else // defined(TARGET_OS_WINDOWS)
97 return false; 97 return false;
98 #endif // defined(TARGET_OS_WINDOWS) 98 #endif // defined(TARGET_OS_WINDOWS)
99 } 99 }
100 100
101 101
102 const char* DartUtils::MapLibraryUrl(const char* url_string) { 102 const char* DartUtils::MapLibraryUrl(const char* url_string) {
103 ASSERT(url_mapping != NULL); 103 ASSERT(url_mapping != NULL);
104 // We need to check if the passed in url is found in the url_mapping array, 104 // We need to check if the passed in url is found in the url_mapping array,
105 // in that case use the mapped entry. 105 // in that case use the mapped entry.
106 intptr_t len = strlen(url_string); 106 intptr_t len = strlen(url_string);
(...skipping 11 matching lines...) Expand all
118 118
119 119
120 int64_t DartUtils::GetIntegerValue(Dart_Handle value_obj) { 120 int64_t DartUtils::GetIntegerValue(Dart_Handle value_obj) {
121 int64_t value = 0; 121 int64_t value = 0;
122 Dart_Handle result = Dart_IntegerToInt64(value_obj, &value); 122 Dart_Handle result = Dart_IntegerToInt64(value_obj, &value);
123 if (Dart_IsError(result)) Dart_PropagateError(result); 123 if (Dart_IsError(result)) Dart_PropagateError(result);
124 return value; 124 return value;
125 } 125 }
126 126
127 127
128 int64_t DartUtils::GetInt64ValueCheckRange( 128 int64_t DartUtils::GetInt64ValueCheckRange(Dart_Handle value_obj,
129 Dart_Handle value_obj, int64_t lower, int64_t upper) { 129 int64_t lower,
130 int64_t upper) {
130 int64_t value = DartUtils::GetIntegerValue(value_obj); 131 int64_t value = DartUtils::GetIntegerValue(value_obj);
131 if (value < lower || upper < value) { 132 if (value < lower || upper < value) {
132 Dart_PropagateError(Dart_NewApiError("Value outside expected range")); 133 Dart_PropagateError(Dart_NewApiError("Value outside expected range"));
133 } 134 }
134 return value; 135 return value;
135 } 136 }
136 137
137 138
138 intptr_t DartUtils::GetIntptrValue(Dart_Handle value_obj) { 139 intptr_t DartUtils::GetIntptrValue(Dart_Handle value_obj) {
139 int64_t value = 0; 140 int64_t value = 0;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 177
177 178
178 Dart_Handle DartUtils::SetIntegerField(Dart_Handle handle, 179 Dart_Handle DartUtils::SetIntegerField(Dart_Handle handle,
179 const char* name, 180 const char* name,
180 int64_t val) { 181 int64_t val) {
181 return Dart_SetField(handle, NewString(name), Dart_NewInteger(val)); 182 return Dart_SetField(handle, NewString(name), Dart_NewInteger(val));
182 } 183 }
183 184
184 185
185 Dart_Handle DartUtils::SetStringField(Dart_Handle handle, 186 Dart_Handle DartUtils::SetStringField(Dart_Handle handle,
186 const char* name, 187 const char* name,
187 const char* val) { 188 const char* val) {
188 return Dart_SetField(handle, NewString(name), NewString(val)); 189 return Dart_SetField(handle, NewString(name), NewString(val));
189 } 190 }
190 191
191 192
192 bool DartUtils::IsDartSchemeURL(const char* url_name) { 193 bool DartUtils::IsDartSchemeURL(const char* url_name) {
193 static const intptr_t kDartSchemeLen = strlen(kDartScheme); 194 static const intptr_t kDartSchemeLen = strlen(kDartScheme);
194 // If the URL starts with "dart:" then it is considered as a special 195 // If the URL starts with "dart:" then it is considered as a special
195 // library URL which is handled differently from other URLs. 196 // library URL which is handled differently from other URLs.
196 return (strncmp(url_name, kDartScheme, kDartSchemeLen) == 0); 197 return (strncmp(url_name, kDartScheme, kDartSchemeLen) == 0);
197 } 198 }
198 199
199 200
200 bool DartUtils::IsHttpSchemeURL(const char* url_name) { 201 bool DartUtils::IsHttpSchemeURL(const char* url_name) {
201 static const intptr_t kHttpSchemeLen = strlen(kHttpScheme); 202 static const intptr_t kHttpSchemeLen = strlen(kHttpScheme);
202 return (strncmp(url_name, kHttpScheme, kHttpSchemeLen) == 0); 203 return (strncmp(url_name, kHttpScheme, kHttpSchemeLen) == 0);
203 } 204 }
204 205
205 206
206 bool DartUtils::IsDartExtensionSchemeURL(const char* url_name) { 207 bool DartUtils::IsDartExtensionSchemeURL(const char* url_name) {
207 static const intptr_t kDartExtensionSchemeLen = strlen(kDartExtensionScheme); 208 static const intptr_t kDartExtensionSchemeLen = strlen(kDartExtensionScheme);
208 // If the URL starts with "dartext:" then it is considered as a special 209 // If the URL starts with "dartext:" then it is considered as a special
209 // extension library URL which is handled differently from other URLs. 210 // extension library URL which is handled differently from other URLs.
210 return 211 return (strncmp(url_name, kDartExtensionScheme, kDartExtensionSchemeLen) ==
211 (strncmp(url_name, kDartExtensionScheme, kDartExtensionSchemeLen) == 0); 212 0);
212 } 213 }
213 214
214 215
215 bool DartUtils::IsDartIOLibURL(const char* url_name) { 216 bool DartUtils::IsDartIOLibURL(const char* url_name) {
216 return (strcmp(url_name, kIOLibURL) == 0); 217 return (strcmp(url_name, kIOLibURL) == 0);
217 } 218 }
218 219
219 220
220 bool DartUtils::IsDartBuiltinLibURL(const char* url_name) { 221 bool DartUtils::IsDartBuiltinLibURL(const char* url_name) {
221 return (strcmp(url_name, kBuiltinLibURL) == 0); 222 return (strcmp(url_name, kBuiltinLibURL) == 0);
222 } 223 }
223 224
224 225
225 const char* DartUtils::RemoveScheme(const char* url) { 226 const char* DartUtils::RemoveScheme(const char* url) {
226 const char* colon = strchr(url, ':'); 227 const char* colon = strchr(url, ':');
227 if (colon == NULL) { 228 if (colon == NULL) {
228 return url; 229 return url;
229 } else { 230 } else {
230 return colon + 1; 231 return colon + 1;
231 } 232 }
232 } 233 }
233 234
234 235
235 void* DartUtils::OpenFile(const char* name, bool write) { 236 void* DartUtils::OpenFile(const char* name, bool write) {
236 File* file = File::Open(name, write ? File::kWriteTruncate : File::kRead); 237 File* file = File::Open(name, write ? File::kWriteTruncate : File::kRead);
237 return reinterpret_cast<void*>(file); 238 return reinterpret_cast<void*>(file);
238 } 239 }
239 240
240 241
241 void DartUtils::ReadFile(const uint8_t** data, 242 void DartUtils::ReadFile(const uint8_t** data, intptr_t* len, void* stream) {
242 intptr_t* len,
243 void* stream) {
244 ASSERT(data != NULL); 243 ASSERT(data != NULL);
245 ASSERT(len != NULL); 244 ASSERT(len != NULL);
246 ASSERT(stream != NULL); 245 ASSERT(stream != NULL);
247 File* file_stream = reinterpret_cast<File*>(stream); 246 File* file_stream = reinterpret_cast<File*>(stream);
248 int64_t file_len = file_stream->Length(); 247 int64_t file_len = file_stream->Length();
249 if ((file_len < 0) || (file_len > kIntptrMax)) { 248 if ((file_len < 0) || (file_len > kIntptrMax)) {
250 *data = NULL; 249 *data = NULL;
251 *len = -1; // Indicates read was not successful. 250 *len = -1; // Indicates read was not successful.
252 return; 251 return;
253 } 252 }
(...skipping 23 matching lines...) Expand all
277 File* file = reinterpret_cast<File*>(stream); 276 File* file = reinterpret_cast<File*>(stream);
278 file->Release(); 277 file->Release();
279 } 278 }
280 279
281 280
282 bool DartUtils::EntropySource(uint8_t* buffer, intptr_t length) { 281 bool DartUtils::EntropySource(uint8_t* buffer, intptr_t length) {
283 return Crypto::GetRandomBytes(length, buffer); 282 return Crypto::GetRandomBytes(length, buffer);
284 } 283 }
285 284
286 285
287 static Dart_Handle SingleArgDart_Invoke(Dart_Handle lib, const char* method, 286 static Dart_Handle SingleArgDart_Invoke(Dart_Handle lib,
287 const char* method,
288 Dart_Handle arg) { 288 Dart_Handle arg) {
289 const int kNumArgs = 1; 289 const int kNumArgs = 1;
290 Dart_Handle dart_args[kNumArgs]; 290 Dart_Handle dart_args[kNumArgs];
291 dart_args[0] = arg; 291 dart_args[0] = arg;
292 return Dart_Invoke(lib, DartUtils::NewString(method), kNumArgs, dart_args); 292 return Dart_Invoke(lib, DartUtils::NewString(method), kNumArgs, dart_args);
293 } 293 }
294 294
295 295
296 // TODO(iposva): Allocate from the zone instead of leaking error string 296 // TODO(iposva): Allocate from the zone instead of leaking error string
297 // here. On the other hand the binary is about to exit anyway. 297 // here. On the other hand the binary is about to exit anyway.
(...skipping 25 matching lines...) Expand all
323 323
324 324
325 Dart_Handle DartUtils::ReadStringFromFile(const char* filename) { 325 Dart_Handle DartUtils::ReadStringFromFile(const char* filename) {
326 const char* error_msg = NULL; 326 const char* error_msg = NULL;
327 intptr_t len; 327 intptr_t len;
328 const uint8_t* text_buffer = ReadFileFully(filename, &len, &error_msg); 328 const uint8_t* text_buffer = ReadFileFully(filename, &len, &error_msg);
329 if (text_buffer == NULL) { 329 if (text_buffer == NULL) {
330 return Dart_NewApiError(error_msg); 330 return Dart_NewApiError(error_msg);
331 } 331 }
332 Dart_Handle str = Dart_NewStringFromUTF8(text_buffer, len); 332 Dart_Handle str = Dart_NewStringFromUTF8(text_buffer, len);
333 free(const_cast<uint8_t *>(text_buffer)); 333 free(const_cast<uint8_t*>(text_buffer));
334 return str; 334 return str;
335 } 335 }
336 336
337 337
338 Dart_Handle DartUtils::MakeUint8Array(const uint8_t* buffer, intptr_t len) { 338 Dart_Handle DartUtils::MakeUint8Array(const uint8_t* buffer, intptr_t len) {
339 Dart_Handle array = Dart_NewTypedData(Dart_TypedData_kUint8, len); 339 Dart_Handle array = Dart_NewTypedData(Dart_TypedData_kUint8, len);
340 RETURN_IF_ERROR(array); 340 RETURN_IF_ERROR(array);
341 { 341 {
342 Dart_TypedData_Type td_type; 342 Dart_TypedData_Type td_type;
343 void* td_data; 343 void* td_data;
(...skipping 19 matching lines...) Expand all
363 Dart_Handle directory = NewString(original_working_directory); 363 Dart_Handle directory = NewString(original_working_directory);
364 return SingleArgDart_Invoke(builtin_lib, "_setWorkingDirectory", directory); 364 return SingleArgDart_Invoke(builtin_lib, "_setWorkingDirectory", directory);
365 } 365 }
366 366
367 367
368 Dart_Handle DartUtils::ResolveUriInWorkingDirectory(Dart_Handle script_uri) { 368 Dart_Handle DartUtils::ResolveUriInWorkingDirectory(Dart_Handle script_uri) {
369 const int kNumArgs = 1; 369 const int kNumArgs = 1;
370 Dart_Handle dart_args[kNumArgs]; 370 Dart_Handle dart_args[kNumArgs];
371 dart_args[0] = script_uri; 371 dart_args[0] = script_uri;
372 return Dart_Invoke(DartUtils::BuiltinLib(), 372 return Dart_Invoke(DartUtils::BuiltinLib(),
373 NewString("_resolveInWorkingDirectory"), 373 NewString("_resolveInWorkingDirectory"), kNumArgs,
374 kNumArgs,
375 dart_args); 374 dart_args);
376 } 375 }
377 376
378 377
379 Dart_Handle DartUtils::LibraryFilePath(Dart_Handle library_uri) { 378 Dart_Handle DartUtils::LibraryFilePath(Dart_Handle library_uri) {
380 const int kNumArgs = 1; 379 const int kNumArgs = 1;
381 Dart_Handle dart_args[kNumArgs]; 380 Dart_Handle dart_args[kNumArgs];
382 dart_args[0] = library_uri; 381 dart_args[0] = library_uri;
383 return Dart_Invoke(DartUtils::BuiltinLib(), 382 return Dart_Invoke(DartUtils::BuiltinLib(), NewString("_libraryFilePath"),
384 NewString("_libraryFilePath"), 383 kNumArgs, dart_args);
385 kNumArgs,
386 dart_args);
387 } 384 }
388 385
389 386
390 Dart_Handle DartUtils::ResolveScript(Dart_Handle url) { 387 Dart_Handle DartUtils::ResolveScript(Dart_Handle url) {
391 const int kNumArgs = 1; 388 const int kNumArgs = 1;
392 Dart_Handle dart_args[kNumArgs]; 389 Dart_Handle dart_args[kNumArgs];
393 dart_args[0] = url; 390 dart_args[0] = url;
394 return Dart_Invoke(DartUtils::BuiltinLib(), 391 return Dart_Invoke(DartUtils::BuiltinLib(), NewString("_resolveScriptUri"),
395 NewString("_resolveScriptUri"), 392 kNumArgs, dart_args);
396 kNumArgs,
397 dart_args);
398 } 393 }
399 394
400 395
401 static Dart_Handle LoadDataAsync_Invoke(Dart_Handle tag, 396 static Dart_Handle LoadDataAsync_Invoke(Dart_Handle tag,
402 Dart_Handle url, 397 Dart_Handle url,
403 Dart_Handle library_url) { 398 Dart_Handle library_url) {
404 const int kNumArgs = 3; 399 const int kNumArgs = 3;
405 Dart_Handle dart_args[kNumArgs]; 400 Dart_Handle dart_args[kNumArgs];
406 dart_args[0] = tag; 401 dart_args[0] = tag;
407 dart_args[1] = url; 402 dart_args[1] = url;
408 dart_args[2] = library_url; 403 dart_args[2] = library_url;
409 return Dart_Invoke(DartUtils::BuiltinLib(), 404 return Dart_Invoke(DartUtils::BuiltinLib(),
410 DartUtils::NewString("_loadDataAsync"), 405 DartUtils::NewString("_loadDataAsync"), kNumArgs,
411 kNumArgs,
412 dart_args); 406 dart_args);
413 } 407 }
414 408
415 409
416 Dart_Handle DartUtils::LibraryTagHandler(Dart_LibraryTag tag, 410 Dart_Handle DartUtils::LibraryTagHandler(Dart_LibraryTag tag,
417 Dart_Handle library, 411 Dart_Handle library,
418 Dart_Handle url) { 412 Dart_Handle url) {
419 Dart_Handle library_url = Dart_LibraryUrl(library); 413 Dart_Handle library_url = Dart_LibraryUrl(library);
420 if (Dart_IsError(library_url)) { 414 if (Dart_IsError(library_url)) {
421 return library_url; 415 return library_url;
(...skipping 16 matching lines...) Expand all
438 } 432 }
439 433
440 bool is_dart_scheme_url = DartUtils::IsDartSchemeURL(url_string); 434 bool is_dart_scheme_url = DartUtils::IsDartSchemeURL(url_string);
441 bool is_dart_library = DartUtils::IsDartSchemeURL(library_url_string); 435 bool is_dart_library = DartUtils::IsDartSchemeURL(library_url_string);
442 436
443 // Handle canonicalization, 'import' and 'part' of 'dart:' libraries. 437 // Handle canonicalization, 'import' and 'part' of 'dart:' libraries.
444 if (is_dart_scheme_url || is_dart_library) { 438 if (is_dart_scheme_url || is_dart_library) {
445 if (tag == Dart_kImportTag) { 439 if (tag == Dart_kImportTag) {
446 Builtin::BuiltinLibraryId id = Builtin::FindId(url_string); 440 Builtin::BuiltinLibraryId id = Builtin::FindId(url_string);
447 if (id == Builtin::kInvalidLibrary) { 441 if (id == Builtin::kInvalidLibrary) {
448 return NewError("The built-in library '%s' is not available" 442 return NewError(
449 " on the stand-alone VM.\n", url_string); 443 "The built-in library '%s' is not available"
444 " on the stand-alone VM.\n",
445 url_string);
450 } 446 }
451 return Builtin::LoadLibrary(url, id); 447 return Builtin::LoadLibrary(url, id);
452 } else { 448 } else {
453 ASSERT(tag == Dart_kSourceTag); 449 ASSERT(tag == Dart_kSourceTag);
454 Builtin::BuiltinLibraryId id = Builtin::FindId(library_url_string); 450 Builtin::BuiltinLibraryId id = Builtin::FindId(library_url_string);
455 if (id == Builtin::kInvalidLibrary) { 451 if (id == Builtin::kInvalidLibrary) {
456 return NewError("The built-in library '%s' is not available" 452 return NewError(
457 " on the stand-alone VM. Trying to load" 453 "The built-in library '%s' is not available"
458 " '%s'.\n", library_url_string, url_string); 454 " on the stand-alone VM. Trying to load"
455 " '%s'.\n",
456 library_url_string, url_string);
459 } 457 }
460 // Prepend the library URI to form a unique script URI for the part. 458 // Prepend the library URI to form a unique script URI for the part.
461 intptr_t len = snprintf(NULL, 0, "%s/%s", library_url_string, url_string); 459 intptr_t len = snprintf(NULL, 0, "%s/%s", library_url_string, url_string);
462 char* part_uri = reinterpret_cast<char*>(malloc(len + 1)); 460 char* part_uri = reinterpret_cast<char*>(malloc(len + 1));
463 snprintf(part_uri, len + 1, "%s/%s", library_url_string, url_string); 461 snprintf(part_uri, len + 1, "%s/%s", library_url_string, url_string);
464 Dart_Handle part_uri_obj = DartUtils::NewString(part_uri); 462 Dart_Handle part_uri_obj = DartUtils::NewString(part_uri);
465 free(part_uri); 463 free(part_uri);
466 return Dart_LoadSource(library, 464 return Dart_LoadSource(library, part_uri_obj, Dart_Null(),
467 part_uri_obj, Dart_Null(),
468 Builtin::PartSource(id, url_string), 0, 0); 465 Builtin::PartSource(id, url_string), 0, 0);
469 } 466 }
470 // All cases should have been handled above. 467 // All cases should have been handled above.
471 UNREACHABLE(); 468 UNREACHABLE();
472 } 469 }
473 470
474 if (DartUtils::IsDartExtensionSchemeURL(url_string)) { 471 if (DartUtils::IsDartExtensionSchemeURL(url_string)) {
475 // Load a native code shared library to use in a native extension 472 // Load a native code shared library to use in a native extension
476 if (tag != Dart_kImportTag) { 473 if (tag != Dart_kImportTag) {
477 return NewError("Dart extensions must use import: '%s'", url_string); 474 return NewError("Dart extensions must use import: '%s'", url_string);
478 } 475 }
479 Dart_Handle library_file_path = DartUtils::LibraryFilePath(library_url); 476 Dart_Handle library_file_path = DartUtils::LibraryFilePath(library_url);
480 const char* lib_path_str = NULL; 477 const char* lib_path_str = NULL;
481 Dart_StringToCString(library_file_path, &lib_path_str); 478 Dart_StringToCString(library_file_path, &lib_path_str);
482 const char* extension_path = DartUtils::RemoveScheme(url_string); 479 const char* extension_path = DartUtils::RemoveScheme(url_string);
483 if (strchr(extension_path, '/') != NULL || 480 if (strchr(extension_path, '/') != NULL ||
484 (IsWindowsHost() && strchr(extension_path, '\\') != NULL)) { 481 (IsWindowsHost() && strchr(extension_path, '\\') != NULL)) {
485 return NewError( 482 return NewError(
486 "Relative paths for dart extensions are not supported: '%s'", 483 "Relative paths for dart extensions are not supported: '%s'",
487 extension_path); 484 extension_path);
488 } 485 }
489 return Extensions::LoadExtension(lib_path_str, 486 return Extensions::LoadExtension(lib_path_str, extension_path, library);
490 extension_path,
491 library);
492 } 487 }
493 488
494 // Handle 'import' or 'part' requests for all other URIs. Call dart code to 489 // Handle 'import' or 'part' requests for all other URIs. Call dart code to
495 // read the source code asynchronously. 490 // read the source code asynchronously.
496 return LoadDataAsync_Invoke(Dart_NewInteger(tag), url, library_url); 491 return LoadDataAsync_Invoke(Dart_NewInteger(tag), url, library_url);
497 } 492 }
498 493
499 494
500 static bool CheckMagicNumber(const uint8_t** buf, 495 static bool CheckMagicNumber(const uint8_t** buf,
501 intptr_t* len, 496 intptr_t* len,
502 const MagicNumberData& magic_number) { 497 const MagicNumberData& magic_number) {
503 if ((*len >= MagicNumberData::kLength) && 498 if ((*len >= MagicNumberData::kLength) &&
504 (memcmp(*buf, magic_number.bytes, MagicNumberData::kLength) == 0)) { 499 (memcmp(*buf, magic_number.bytes, MagicNumberData::kLength) == 0)) {
505 if (magic_number.should_skip) { 500 if (magic_number.should_skip) {
506 *buf += MagicNumberData::kLength; 501 *buf += MagicNumberData::kLength;
507 *len -= MagicNumberData::kLength; 502 *len -= MagicNumberData::kLength;
508 } 503 }
509 return true; 504 return true;
510 } 505 }
511 return false; 506 return false;
512 } 507 }
513 508
514 509
515 DartUtils::MagicNumber DartUtils::SniffForMagicNumber(const uint8_t** buf, 510 DartUtils::MagicNumber DartUtils::SniffForMagicNumber(const uint8_t** buf,
516 intptr_t* len) { 511 intptr_t* len) {
517 if (CheckMagicNumber(buf, len, snapshot_magic_number)) { 512 if (CheckMagicNumber(buf, len, snapshot_magic_number)) {
518 return kSnapshotMagicNumber; 513 return kSnapshotMagicNumber;
519 } 514 }
520 515
521 if (CheckMagicNumber(buf, len, kernel_magic_number)) { 516 if (CheckMagicNumber(buf, len, kernel_magic_number)) {
522 return kKernelMagicNumber; 517 return kKernelMagicNumber;
523 } 518 }
524 519
525 return kUnknownMagicNumber; 520 return kUnknownMagicNumber;
526 } 521 }
527 522
528 523
529 void DartUtils::WriteMagicNumber(File* file) { 524 void DartUtils::WriteMagicNumber(File* file) {
530 // Write a magic number and version information into the snapshot file. 525 // Write a magic number and version information into the snapshot file.
531 bool bytes_written = file->WriteFully(snapshot_magic_number.bytes, 526 bool bytes_written =
532 MagicNumberData::kLength); 527 file->WriteFully(snapshot_magic_number.bytes, MagicNumberData::kLength);
533 ASSERT(bytes_written); 528 ASSERT(bytes_written);
534 } 529 }
535 530
536 531
537 Dart_Handle DartUtils::LoadScript(const char* script_uri) { 532 Dart_Handle DartUtils::LoadScript(const char* script_uri) {
538 Dart_TimelineEvent("LoadScript", 533 Dart_TimelineEvent("LoadScript", Dart_TimelineGetMicros(),
539 Dart_TimelineGetMicros(), 534 Dart_GetMainPortId(), Dart_Timeline_Event_Async_Begin, 0,
540 Dart_GetMainPortId(), 535 NULL, NULL);
541 Dart_Timeline_Event_Async_Begin,
542 0, NULL, NULL);
543 Dart_Handle uri = Dart_NewStringFromCString(script_uri); 536 Dart_Handle uri = Dart_NewStringFromCString(script_uri);
544 return LoadDataAsync_Invoke(Dart_Null(), uri, Dart_Null()); 537 return LoadDataAsync_Invoke(Dart_Null(), uri, Dart_Null());
545 } 538 }
546 539
547 540
548 void FUNCTION_NAME(Builtin_GetCurrentDirectory)(Dart_NativeArguments args) { 541 void FUNCTION_NAME(Builtin_GetCurrentDirectory)(Dart_NativeArguments args) {
549 const char* current = Directory::Current(); 542 const char* current = Directory::Current();
550 if (current != NULL) { 543 if (current != NULL) {
551 Dart_SetReturnValue(args, DartUtils::NewString(current)); 544 Dart_SetReturnValue(args, DartUtils::NewString(current));
552 } else { 545 } else {
553 Dart_Handle err = DartUtils::NewError("Failed to get current directory."); 546 Dart_Handle err = DartUtils::NewError("Failed to get current directory.");
554 Dart_PropagateError(err); 547 Dart_PropagateError(err);
555 } 548 }
556 } 549 }
557 550
558 551
559 Dart_Handle DartUtils::PrepareBuiltinLibrary(Dart_Handle builtin_lib, 552 Dart_Handle DartUtils::PrepareBuiltinLibrary(Dart_Handle builtin_lib,
560 Dart_Handle internal_lib, 553 Dart_Handle internal_lib,
561 bool is_service_isolate, 554 bool is_service_isolate,
562 bool trace_loading) { 555 bool trace_loading) {
563 // Setup the internal library's 'internalPrint' function. 556 // Setup the internal library's 'internalPrint' function.
564 Dart_Handle print = Dart_Invoke( 557 Dart_Handle print =
565 builtin_lib, NewString("_getPrintClosure"), 0, NULL); 558 Dart_Invoke(builtin_lib, NewString("_getPrintClosure"), 0, NULL);
566 RETURN_IF_ERROR(print); 559 RETURN_IF_ERROR(print);
567 Dart_Handle result = 560 Dart_Handle result =
568 Dart_SetField(internal_lib, NewString("_printClosure"), print); 561 Dart_SetField(internal_lib, NewString("_printClosure"), print);
569 RETURN_IF_ERROR(result); 562 RETURN_IF_ERROR(result);
570 563
571 if (!is_service_isolate) { 564 if (!is_service_isolate) {
572 if (IsWindowsHost()) { 565 if (IsWindowsHost()) {
573 result = Dart_SetField(builtin_lib, NewString("_isWindows"), Dart_True()); 566 result = Dart_SetField(builtin_lib, NewString("_isWindows"), Dart_True());
574 RETURN_IF_ERROR(result); 567 RETURN_IF_ERROR(result);
575 } 568 }
576 if (trace_loading) { 569 if (trace_loading) {
577 result = Dart_SetField(builtin_lib, 570 result =
578 NewString("_traceLoading"), Dart_True()); 571 Dart_SetField(builtin_lib, NewString("_traceLoading"), Dart_True());
579 RETURN_IF_ERROR(result); 572 RETURN_IF_ERROR(result);
580 } 573 }
581 // Set current working directory. 574 // Set current working directory.
582 result = SetWorkingDirectory(); 575 result = SetWorkingDirectory();
583 RETURN_IF_ERROR(result); 576 RETURN_IF_ERROR(result);
584 } 577 }
585 return Dart_True(); 578 return Dart_True();
586 } 579 }
587 580
588 581
589 Dart_Handle DartUtils::PrepareCoreLibrary(Dart_Handle core_lib, 582 Dart_Handle DartUtils::PrepareCoreLibrary(Dart_Handle core_lib,
590 Dart_Handle builtin_lib, 583 Dart_Handle builtin_lib,
591 bool is_service_isolate) { 584 bool is_service_isolate) {
592 if (!is_service_isolate) { 585 if (!is_service_isolate) {
593 // Setup the 'Uri.base' getter in dart:core. 586 // Setup the 'Uri.base' getter in dart:core.
594 Dart_Handle uri_base = Dart_Invoke( 587 Dart_Handle uri_base =
595 builtin_lib, NewString("_getUriBaseClosure"), 0, NULL); 588 Dart_Invoke(builtin_lib, NewString("_getUriBaseClosure"), 0, NULL);
596 RETURN_IF_ERROR(uri_base); 589 RETURN_IF_ERROR(uri_base);
597 Dart_Handle result = Dart_SetField(core_lib, 590 Dart_Handle result =
598 NewString("_uriBaseClosure"), 591 Dart_SetField(core_lib, NewString("_uriBaseClosure"), uri_base);
599 uri_base);
600 RETURN_IF_ERROR(result); 592 RETURN_IF_ERROR(result);
601 } 593 }
602 return Dart_True(); 594 return Dart_True();
603 } 595 }
604 596
605 597
606 Dart_Handle DartUtils::PrepareAsyncLibrary(Dart_Handle async_lib, 598 Dart_Handle DartUtils::PrepareAsyncLibrary(Dart_Handle async_lib,
607 Dart_Handle isolate_lib) { 599 Dart_Handle isolate_lib) {
608 Dart_Handle schedule_immediate_closure = 600 Dart_Handle schedule_immediate_closure = Dart_Invoke(
609 Dart_Invoke(isolate_lib, NewString("_getIsolateScheduleImmediateClosure"), 601 isolate_lib, NewString("_getIsolateScheduleImmediateClosure"), 0, NULL);
610 0, NULL);
611 RETURN_IF_ERROR(schedule_immediate_closure); 602 RETURN_IF_ERROR(schedule_immediate_closure);
612 Dart_Handle args[1]; 603 Dart_Handle args[1];
613 args[0] = schedule_immediate_closure; 604 args[0] = schedule_immediate_closure;
614 return Dart_Invoke( 605 return Dart_Invoke(async_lib, NewString("_setScheduleImmediateClosure"), 1,
615 async_lib, NewString("_setScheduleImmediateClosure"), 1, args); 606 args);
616 } 607 }
617 608
618 609
619 Dart_Handle DartUtils::PrepareIOLibrary(Dart_Handle io_lib) { 610 Dart_Handle DartUtils::PrepareIOLibrary(Dart_Handle io_lib) {
620 return Dart_Invoke(io_lib, NewString("_setupHooks"), 0, NULL); 611 return Dart_Invoke(io_lib, NewString("_setupHooks"), 0, NULL);
621 } 612 }
622 613
623 614
624 Dart_Handle DartUtils::PrepareIsolateLibrary(Dart_Handle isolate_lib) { 615 Dart_Handle DartUtils::PrepareIsolateLibrary(Dart_Handle isolate_lib) {
625 return Dart_Invoke(isolate_lib, NewString("_setupHooks"), 0, NULL); 616 return Dart_Invoke(isolate_lib, NewString("_setupHooks"), 0, NULL);
(...skipping 14 matching lines...) Expand all
640 Dart_Handle DartUtils::SetupPackageRoot(const char* package_root, 631 Dart_Handle DartUtils::SetupPackageRoot(const char* package_root,
641 const char* packages_config) { 632 const char* packages_config) {
642 // Set up package root if specified. 633 // Set up package root if specified.
643 if (package_root != NULL) { 634 if (package_root != NULL) {
644 ASSERT(packages_config == NULL); 635 ASSERT(packages_config == NULL);
645 Dart_Handle result = NewString(package_root); 636 Dart_Handle result = NewString(package_root);
646 RETURN_IF_ERROR(result); 637 RETURN_IF_ERROR(result);
647 const int kNumArgs = 1; 638 const int kNumArgs = 1;
648 Dart_Handle dart_args[kNumArgs]; 639 Dart_Handle dart_args[kNumArgs];
649 dart_args[0] = result; 640 dart_args[0] = result;
650 result = Dart_Invoke(DartUtils::BuiltinLib(), 641 result = Dart_Invoke(DartUtils::BuiltinLib(), NewString("_setPackageRoot"),
651 NewString("_setPackageRoot"), 642 kNumArgs, dart_args);
652 kNumArgs,
653 dart_args);
654 RETURN_IF_ERROR(result); 643 RETURN_IF_ERROR(result);
655 } else if (packages_config != NULL) { 644 } else if (packages_config != NULL) {
656 Dart_Handle result = NewString(packages_config); 645 Dart_Handle result = NewString(packages_config);
657 RETURN_IF_ERROR(result); 646 RETURN_IF_ERROR(result);
658 const int kNumArgs = 1; 647 const int kNumArgs = 1;
659 Dart_Handle dart_args[kNumArgs]; 648 Dart_Handle dart_args[kNumArgs];
660 dart_args[0] = result; 649 dart_args[0] = result;
661 result = Dart_Invoke(DartUtils::BuiltinLib(), 650 result = Dart_Invoke(DartUtils::BuiltinLib(), NewString("_setPackagesMap"),
662 NewString("_setPackagesMap"), 651 kNumArgs, dart_args);
663 kNumArgs,
664 dart_args);
665 RETURN_IF_ERROR(result); 652 RETURN_IF_ERROR(result);
666 } 653 }
667 return Dart_True(); 654 return Dart_True();
668 } 655 }
669 656
670 657
671 Dart_Handle DartUtils::PrepareForScriptLoading(bool is_service_isolate, 658 Dart_Handle DartUtils::PrepareForScriptLoading(bool is_service_isolate,
672 bool trace_loading) { 659 bool trace_loading) {
673 // First ensure all required libraries are available. 660 // First ensure all required libraries are available.
674 Dart_Handle url = NewString(kCoreLibURL); 661 Dart_Handle url = NewString(kCoreLibURL);
(...skipping 23 matching lines...) Expand all
698 IsolateData* isolate_data = 685 IsolateData* isolate_data =
699 reinterpret_cast<IsolateData*>(Dart_CurrentIsolateData()); 686 reinterpret_cast<IsolateData*>(Dart_CurrentIsolateData());
700 ASSERT(isolate_data != NULL); 687 ASSERT(isolate_data != NULL);
701 isolate_data->set_builtin_lib(builtin_lib); 688 isolate_data->set_builtin_lib(builtin_lib);
702 689
703 // We need to ensure that all the scripts loaded so far are finalized 690 // We need to ensure that all the scripts loaded so far are finalized
704 // as we are about to invoke some Dart code below to setup closures. 691 // as we are about to invoke some Dart code below to setup closures.
705 Dart_Handle result = Dart_FinalizeLoading(false); 692 Dart_Handle result = Dart_FinalizeLoading(false);
706 RETURN_IF_ERROR(result); 693 RETURN_IF_ERROR(result);
707 694
708 result = PrepareBuiltinLibrary(builtin_lib, 695 result = PrepareBuiltinLibrary(builtin_lib, internal_lib, is_service_isolate,
709 internal_lib,
710 is_service_isolate,
711 trace_loading); 696 trace_loading);
712 RETURN_IF_ERROR(result); 697 RETURN_IF_ERROR(result);
713 698
714 RETURN_IF_ERROR(PrepareAsyncLibrary(async_lib, isolate_lib)); 699 RETURN_IF_ERROR(PrepareAsyncLibrary(async_lib, isolate_lib));
715 RETURN_IF_ERROR(PrepareCoreLibrary( 700 RETURN_IF_ERROR(
716 core_lib, builtin_lib, is_service_isolate)); 701 PrepareCoreLibrary(core_lib, builtin_lib, is_service_isolate));
717 RETURN_IF_ERROR(PrepareIsolateLibrary(isolate_lib)); 702 RETURN_IF_ERROR(PrepareIsolateLibrary(isolate_lib));
718 RETURN_IF_ERROR(PrepareIOLibrary(io_lib)); 703 RETURN_IF_ERROR(PrepareIOLibrary(io_lib));
719 return result; 704 return result;
720 } 705 }
721 706
722 707
723 Dart_Handle DartUtils::SetupIOLibrary(const char* script_uri) { 708 Dart_Handle DartUtils::SetupIOLibrary(const char* script_uri) {
724 Dart_Handle io_lib_url = NewString(kIOLibURL); 709 Dart_Handle io_lib_url = NewString(kIOLibURL);
725 RETURN_IF_ERROR(io_lib_url); 710 RETURN_IF_ERROR(io_lib_url);
726 Dart_Handle io_lib = Dart_LookupLibrary(io_lib_url); 711 Dart_Handle io_lib = Dart_LookupLibrary(io_lib_url);
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
814 Dart_Handle args[1]; 799 Dart_Handle args[1];
815 args[0] = NewString(message); 800 args[0] = NewString(message);
816 return Dart_New(type, Dart_Null(), 1, args); 801 return Dart_New(type, Dart_Null(), 1, args);
817 } else { 802 } else {
818 return Dart_New(type, Dart_Null(), 0, NULL); 803 return Dart_New(type, Dart_Null(), 0, NULL);
819 } 804 }
820 } 805 }
821 806
822 807
823 Dart_Handle DartUtils::NewDartArgumentError(const char* message) { 808 Dart_Handle DartUtils::NewDartArgumentError(const char* message) {
824 return NewDartExceptionWithMessage(kCoreLibURL, 809 return NewDartExceptionWithMessage(kCoreLibURL, "ArgumentError", message);
825 "ArgumentError",
826 message);
827 } 810 }
828 811
829 812
830 Dart_Handle DartUtils::NewDartUnsupportedError(const char* message) { 813 Dart_Handle DartUtils::NewDartUnsupportedError(const char* message) {
831 return NewDartExceptionWithMessage(kCoreLibURL, 814 return NewDartExceptionWithMessage(kCoreLibURL, "UnsupportedError", message);
832 "UnsupportedError",
833 message);
834 } 815 }
835 816
836 817
837 Dart_Handle DartUtils::NewDartIOException(const char* exception_name, 818 Dart_Handle DartUtils::NewDartIOException(const char* exception_name,
838 const char* message, 819 const char* message,
839 Dart_Handle os_error) { 820 Dart_Handle os_error) {
840 // Create a dart:io exception object of the given type. 821 // Create a dart:io exception object of the given type.
841 return NewDartExceptionWithOSError(kIOLibURL, 822 return NewDartExceptionWithOSError(kIOLibURL, exception_name, message,
842 exception_name,
843 message,
844 os_error); 823 os_error);
845 } 824 }
846 825
847 826
848 Dart_Handle DartUtils::NewError(const char* format, ...) { 827 Dart_Handle DartUtils::NewError(const char* format, ...) {
849 va_list args; 828 va_list args;
850 va_start(args, format); 829 va_start(args, format);
851 intptr_t len = vsnprintf(NULL, 0, format, args); 830 intptr_t len = vsnprintf(NULL, 0, format, args);
852 va_end(args); 831 va_end(args);
853 832
(...skipping 28 matching lines...) Expand all
882 char* new_str = reinterpret_cast<char*>(Dart_ScopeAllocate(len + 2)); 861 char* new_str = reinterpret_cast<char*>(Dart_ScopeAllocate(len + 2));
883 snprintf(new_str, (len + 2), "%s%s", str, File::PathSeparator()); 862 snprintf(new_str, (len + 2), "%s%s", str, File::PathSeparator());
884 return Dart_NewStringFromCString(new_str); 863 return Dart_NewStringFromCString(new_str);
885 } 864 }
886 865
887 866
888 // Statically allocated Dart_CObject instances for immutable 867 // Statically allocated Dart_CObject instances for immutable
889 // objects. As these will be used by different threads the use of 868 // objects. As these will be used by different threads the use of
890 // these depends on the fact that the marking internally in the 869 // these depends on the fact that the marking internally in the
891 // Dart_CObject structure is not marking simple value objects. 870 // Dart_CObject structure is not marking simple value objects.
892 Dart_CObject CObject::api_null_ = { Dart_CObject_kNull , { 0 } }; 871 Dart_CObject CObject::api_null_ = {Dart_CObject_kNull, {0}};
893 Dart_CObject CObject::api_true_ = { Dart_CObject_kBool , { true } }; 872 Dart_CObject CObject::api_true_ = {Dart_CObject_kBool, {true}};
894 Dart_CObject CObject::api_false_ = { Dart_CObject_kBool, { false } }; 873 Dart_CObject CObject::api_false_ = {Dart_CObject_kBool, {false}};
895 CObject CObject::null_ = CObject(&api_null_); 874 CObject CObject::null_ = CObject(&api_null_);
896 CObject CObject::true_ = CObject(&api_true_); 875 CObject CObject::true_ = CObject(&api_true_);
897 CObject CObject::false_ = CObject(&api_false_); 876 CObject CObject::false_ = CObject(&api_false_);
898 877
899 878
900 CObject* CObject::Null() { 879 CObject* CObject::Null() {
901 return &null_; 880 return &null_;
902 } 881 }
903 882
904 883
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
941 920
942 Dart_CObject* CObject::NewIntptr(intptr_t value) { 921 Dart_CObject* CObject::NewIntptr(intptr_t value) {
943 // Pointer values passed as intptr_t are always send as int64_t. 922 // Pointer values passed as intptr_t are always send as int64_t.
944 Dart_CObject* cobject = New(Dart_CObject_kInt64); 923 Dart_CObject* cobject = New(Dart_CObject_kInt64);
945 cobject->value.as_int64 = value; 924 cobject->value.as_int64 = value;
946 return cobject; 925 return cobject;
947 } 926 }
948 927
949 928
950 static bool IsHexDigit(char c) { 929 static bool IsHexDigit(char c) {
951 return (('0' <= c) && (c <= '9')) 930 return (('0' <= c) && (c <= '9')) || (('A' <= c) && (c <= 'F')) ||
952 || (('A' <= c) && (c <= 'F')) 931 (('a' <= c) && (c <= 'f'));
953 || (('a' <= c) && (c <= 'f'));
954 } 932 }
955 933
956 934
957 static int HexDigitToInt(char c) { 935 static int HexDigitToInt(char c) {
958 if (('0' <= c) && (c <= '9')) return c - '0'; 936 if (('0' <= c) && (c <= '9')) return c - '0';
959 if (('A' <= c) && (c <= 'F')) return 10 + (c - 'A'); 937 if (('A' <= c) && (c <= 'F')) return 10 + (c - 'A');
960 return 10 + (c - 'a'); 938 return 10 + (c - 'a');
961 } 939 }
962 940
963 941
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
1113 Dart_CObject* CObject::NewUint8Array(intptr_t length) { 1091 Dart_CObject* CObject::NewUint8Array(intptr_t length) {
1114 Dart_CObject* cobject = New(Dart_CObject_kTypedData, length); 1092 Dart_CObject* cobject = New(Dart_CObject_kTypedData, length);
1115 cobject->value.as_typed_data.type = Dart_TypedData_kUint8; 1093 cobject->value.as_typed_data.type = Dart_TypedData_kUint8;
1116 cobject->value.as_typed_data.length = length; 1094 cobject->value.as_typed_data.length = length;
1117 cobject->value.as_typed_data.values = reinterpret_cast<uint8_t*>(cobject + 1); 1095 cobject->value.as_typed_data.values = reinterpret_cast<uint8_t*>(cobject + 1);
1118 return cobject; 1096 return cobject;
1119 } 1097 }
1120 1098
1121 1099
1122 Dart_CObject* CObject::NewUint32Array(intptr_t length) { 1100 Dart_CObject* CObject::NewUint32Array(intptr_t length) {
1123 Dart_CObject* cobject = New(Dart_CObject_kTypedData, 4*length); 1101 Dart_CObject* cobject = New(Dart_CObject_kTypedData, 4 * length);
1124 cobject->value.as_typed_data.type = Dart_TypedData_kUint32; 1102 cobject->value.as_typed_data.type = Dart_TypedData_kUint32;
1125 cobject->value.as_typed_data.length = length; 1103 cobject->value.as_typed_data.length = length;
1126 cobject->value.as_typed_data.values = reinterpret_cast<uint8_t*>(cobject + 1); 1104 cobject->value.as_typed_data.values = reinterpret_cast<uint8_t*>(cobject + 1);
1127 return cobject; 1105 return cobject;
1128 } 1106 }
1129 1107
1130 1108
1131 Dart_CObject* CObject::NewExternalUint8Array( 1109 Dart_CObject* CObject::NewExternalUint8Array(
1132 intptr_t length, uint8_t* data, void* peer, 1110 intptr_t length,
1111 uint8_t* data,
1112 void* peer,
1133 Dart_WeakPersistentHandleFinalizer callback) { 1113 Dart_WeakPersistentHandleFinalizer callback) {
1134 Dart_CObject* cobject = New(Dart_CObject_kExternalTypedData); 1114 Dart_CObject* cobject = New(Dart_CObject_kExternalTypedData);
1135 cobject->value.as_external_typed_data.type = Dart_TypedData_kUint8; 1115 cobject->value.as_external_typed_data.type = Dart_TypedData_kUint8;
1136 cobject->value.as_external_typed_data.length = length; 1116 cobject->value.as_external_typed_data.length = length;
1137 cobject->value.as_external_typed_data.data = data; 1117 cobject->value.as_external_typed_data.data = data;
1138 cobject->value.as_external_typed_data.peer = peer; 1118 cobject->value.as_external_typed_data.peer = peer;
1139 cobject->value.as_external_typed_data.callback = callback; 1119 cobject->value.as_external_typed_data.callback = callback;
1140 return cobject; 1120 return cobject;
1141 } 1121 }
1142 1122
1143 1123
1144 Dart_CObject* CObject::NewIOBuffer(int64_t length) { 1124 Dart_CObject* CObject::NewIOBuffer(int64_t length) {
1145 // Make sure that we do not have an integer overflow here. Actual check 1125 // Make sure that we do not have an integer overflow here. Actual check
1146 // against max elements will be done at the time of writing, as the constant 1126 // against max elements will be done at the time of writing, as the constant
1147 // is not part of the public API. 1127 // is not part of the public API.
1148 if ((length < 0) || (length > kIntptrMax)) { 1128 if ((length < 0) || (length > kIntptrMax)) {
1149 return NULL; 1129 return NULL;
1150 } 1130 }
1151 uint8_t* data = IOBuffer::Allocate(static_cast<intptr_t>(length)); 1131 uint8_t* data = IOBuffer::Allocate(static_cast<intptr_t>(length));
1152 ASSERT(data != NULL); 1132 ASSERT(data != NULL);
1153 return NewExternalUint8Array( 1133 return NewExternalUint8Array(static_cast<intptr_t>(length), data, data,
1154 static_cast<intptr_t>(length), data, data, IOBuffer::Finalizer); 1134 IOBuffer::Finalizer);
1155 } 1135 }
1156 1136
1157 1137
1158 void CObject::FreeIOBufferData(Dart_CObject* cobject) { 1138 void CObject::FreeIOBufferData(Dart_CObject* cobject) {
1159 ASSERT(cobject->type == Dart_CObject_kExternalTypedData); 1139 ASSERT(cobject->type == Dart_CObject_kExternalTypedData);
1160 cobject->value.as_external_typed_data.callback( 1140 cobject->value.as_external_typed_data.callback(
1161 NULL, 1141 NULL, NULL, cobject->value.as_external_typed_data.peer);
1162 NULL,
1163 cobject->value.as_external_typed_data.peer);
1164 cobject->value.as_external_typed_data.data = NULL; 1142 cobject->value.as_external_typed_data.data = NULL;
1165 } 1143 }
1166 1144
1167 1145
1168 CObject* CObject::IllegalArgumentError() { 1146 CObject* CObject::IllegalArgumentError() {
1169 CObjectArray* result = new CObjectArray(CObject::NewArray(1)); 1147 CObjectArray* result = new CObjectArray(CObject::NewArray(1));
1170 result->SetAt(0, new CObjectInt32(CObject::NewInt32(kArgumentError))); 1148 result->SetAt(0, new CObjectInt32(CObject::NewInt32(kArgumentError)));
1171 return result; 1149 return result;
1172 } 1150 }
1173 1151
(...skipping 15 matching lines...) Expand all
1189 new CObjectString(CObject::NewString(os_error->message())); 1167 new CObjectString(CObject::NewString(os_error->message()));
1190 CObjectArray* result = new CObjectArray(CObject::NewArray(3)); 1168 CObjectArray* result = new CObjectArray(CObject::NewArray(3));
1191 result->SetAt(0, new CObjectInt32(CObject::NewInt32(kOSError))); 1169 result->SetAt(0, new CObjectInt32(CObject::NewInt32(kOSError)));
1192 result->SetAt(1, new CObjectInt32(CObject::NewInt32(os_error->code()))); 1170 result->SetAt(1, new CObjectInt32(CObject::NewInt32(os_error->code())));
1193 result->SetAt(2, error_message); 1171 result->SetAt(2, error_message);
1194 return result; 1172 return result;
1195 } 1173 }
1196 1174
1197 } // namespace bin 1175 } // namespace bin
1198 } // namespace dart 1176 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/bin/dartutils.h ('k') | runtime/bin/directory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698