Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Classes | Namespaces | Macros | Functions | Variables
unit_test.cc File Reference
#include "vm/unit_test.h"
#include <stdio.h>
#include "bin/builtin.h"
#include "bin/dartutils.h"
#include "bin/isolate_data.h"
#include "platform/globals.h"
#include "vm/compiler/assembler/assembler.h"
#include "vm/compiler/assembler/disassembler.h"
#include "vm/compiler/jit/compiler.h"
#include "vm/dart_api_impl.h"
#include "vm/isolate_reload.h"
#include "vm/kernel_isolate.h"
#include "vm/parser.h"
#include "vm/symbols.h"
#include "vm/thread.h"
#include "vm/virtual_memory.h"

Go to the source code of this file.

Classes

struct  dart::TestLibEntry
 
struct  dart::NativeEntries
 

Namespaces

namespace  dart
 

Macros

#define RELOAD_NATIVE_LIST(V)
 

Functions

 dart::DECLARE_FLAG (bool, gc_during_reload)
 
 dart::DECLARE_FLAG (bool, force_evacuation)
 
void dart::SetupCoreLibrariesForUnitTest ()
 
static const char * dart::IsolateReloadTestLibUri ()
 
 dart::RELOAD_NATIVE_LIST (DECLARE_FUNCTION)
 
static Dart_NativeFunction dart::IsolateReloadTestNativeResolver (Dart_Handle name, int argument_count, bool *auto_setup_scope)
 
void FUNCTION_NAME() dart::Test_Reload (Dart_NativeArguments native_args)
 
void FUNCTION_NAME() dart::Test_CollectNewSpace (Dart_NativeArguments native_args)
 
void FUNCTION_NAME() dart::Test_CollectOldSpace (Dart_NativeArguments native_args)
 
static void dart::LoadIsolateReloadTestLibIfNeeded (const char *script)
 
static Dart_Handle dart::LibraryTagHandler (Dart_LibraryTag tag, Dart_Handle library, Dart_Handle url)
 
static intptr_t dart::BuildSourceFilesArray (Dart_SourceFile **sourcefiles, const char *script, const char *script_url=RESOLVED_USER_TEST_URI)
 
static void dart::MallocFinalizer (void *isolate_callback_data, void *peer)
 
void dart::ElideJSONSubstring (const char *prefix, const char *in, char *out, const char *postfix)
 
void dart::StripTokenPositions (char *buffer)
 

Variables

const uint8_t kPlatformStrongDill []
 
intptr_t kPlatformStrongDillSize
 
const uint8_t * dart::platform_strong_dill = kPlatformStrongDill
 
const intptr_t dart::platform_strong_dill_size = kPlatformStrongDillSize
 
static MallocGrowableArray< TestLibEntry > * dart::test_libs_ = nullptr
 
static const char * dart::kIsolateReloadTestLibSource
 
static struct dart::NativeEntries dart::ReloadEntries [] = {RELOAD_NATIVE_LIST(REGISTER_FUNCTION)}
 

Macro Definition Documentation

◆ RELOAD_NATIVE_LIST

#define RELOAD_NATIVE_LIST (   V)
Value:
V(Test_Reload, 0) \
V(Test_CollectNewSpace, 0) \
V(Test_CollectOldSpace, 0)
#define V(name)
Definition raw_object.h:124

Definition at line 235 of file unit_test.cc.

241 {
242 const char* name_;
243 Dart_NativeFunction function_;
244 int argument_count_;
246
249 int argument_count,
250 bool* auto_setup_scope) {
251 const char* function_name = nullptr;
252 Dart_Handle result = Dart_StringToCString(name, &function_name);
254 ASSERT(function_name != nullptr);
255 ASSERT(auto_setup_scope != nullptr);
256 *auto_setup_scope = true;
257 int num_entries = sizeof(ReloadEntries) / sizeof(struct NativeEntries);
258 for (int i = 0; i < num_entries; i++) {
259 struct NativeEntries* entry = &(ReloadEntries[i]);
260 if ((strcmp(function_name, entry->name_) == 0) &&
261 (entry->argument_count_ == argument_count)) {
262 return reinterpret_cast<Dart_NativeFunction>(entry->function_);
263 }
264 }
265 return nullptr;
266}
267
268void FUNCTION_NAME(Test_Reload)(Dart_NativeArguments native_args) {
269 Dart_Handle result = TestCase::TriggerReload(/* kernel_buffer= */ nullptr,
270 /* kernel_buffer_size= */ 0);
271 if (Dart_IsError(result)) {
273 }
274}
275
276void FUNCTION_NAME(Test_CollectNewSpace)(Dart_NativeArguments native_args) {
277 TransitionNativeToVM transition(Thread::Current());
278 GCTestHelper::CollectNewSpace();
279}
280
281void FUNCTION_NAME(Test_CollectOldSpace)(Dart_NativeArguments native_args) {
282 TransitionNativeToVM transition(Thread::Current());
283 GCTestHelper::CollectOldSpace();
284}
285
286#endif // !PRODUCT
287
288static void LoadIsolateReloadTestLibIfNeeded(const char* script) {
289#ifndef PRODUCT
290 if (strstr(script, IsolateReloadTestLibUri()) != nullptr) {
291 Dart_Handle result = TestCase::LoadTestLibrary(
292 IsolateReloadTestLibUri(), kIsolateReloadTestLibSource,
293 IsolateReloadTestNativeResolver);
295 }
296#endif // ifndef PRODUCT
297}
298
299char* TestCase::CompileTestScriptWithDFE(const char* url,
300 const char* source,
301 const uint8_t** kernel_buffer,
302 intptr_t* kernel_buffer_size,
303 bool incrementally,
304 bool allow_compile_errors,
305 const char* multiroot_filepaths,
306 const char* multiroot_scheme) {
307 // clang-format off
308 Dart_SourceFile sourcefiles[] = {
309 {
310 url, source,
311 },
312 {
313 "file:///.packages", ""
314 }};
315 // clang-format on
316 return CompileTestScriptWithDFE(
317 url, sizeof(sourcefiles) / sizeof(Dart_SourceFile), sourcefiles,
318 kernel_buffer, kernel_buffer_size, incrementally, allow_compile_errors,
319 multiroot_filepaths, multiroot_scheme);
320}
321
322char* TestCase::CompileTestScriptWithDFE(const char* url,
323 int sourcefiles_count,
324 Dart_SourceFile sourcefiles[],
325 const uint8_t** kernel_buffer,
326 intptr_t* kernel_buffer_size,
327 bool incrementally,
328 bool allow_compile_errors,
329 const char* multiroot_filepaths,
330 const char* multiroot_scheme) {
331 Zone* zone = Thread::Current()->zone();
332 Dart_KernelCompilationResult result = KernelIsolate::CompileToKernel(
333 url, platform_strong_dill, platform_strong_dill_size, sourcefiles_count,
334 sourcefiles, incrementally, /*for_snapshot=*/false,
335 /*embed_sources=*/true, nullptr, multiroot_filepaths, multiroot_scheme);
337 if (KernelIsolate::AcceptCompilation().status !=
339 FATAL(
340 "An error occurred in the CFE while accepting the most recent"
341 " compilation results.");
342 }
343 }
344 return ValidateCompilationResult(zone, result, kernel_buffer,
345 kernel_buffer_size, allow_compile_errors);
346}
347
348char* TestCase::ValidateCompilationResult(
349 Zone* zone,
350 Dart_KernelCompilationResult compilation_result,
351 const uint8_t** kernel_buffer,
352 intptr_t* kernel_buffer_size,
353 bool allow_compile_errors) {
354 if (!allow_compile_errors &&
355 (compilation_result.status != Dart_KernelCompilationStatus_Ok)) {
356 char* result =
357 OS::SCreate(zone, "Compilation failed %s", compilation_result.error);
358 free(compilation_result.error);
359 if (compilation_result.kernel != nullptr) {
360 free(const_cast<uint8_t*>(compilation_result.kernel));
361 }
362 *kernel_buffer = nullptr;
363 *kernel_buffer_size = 0;
364 return result;
365 }
366 *kernel_buffer = compilation_result.kernel;
367 *kernel_buffer_size = compilation_result.kernel_size;
368 if (compilation_result.error != nullptr) {
369 free(compilation_result.error);
370 }
371 if (kernel_buffer == nullptr) {
372 return OS::SCreate(zone, "front end generated a nullptr kernel file");
373 }
374 return nullptr;
375}
376
378 Dart_Handle library,
379 Dart_Handle url) {
380 if (tag == Dart_kCanonicalizeUrl) {
381 Dart_Handle library_url = Dart_LibraryUrl(library);
382 if (Dart_IsError(library_url)) {
383 return library_url;
384 }
385 return Dart_DefaultCanonicalizeUrl(library_url, url);
386 }
387 UNREACHABLE();
388 return Dart_Null();
389}
390
391static intptr_t BuildSourceFilesArray(
392 Dart_SourceFile** sourcefiles,
393 const char* script,
394 const char* script_url = RESOLVED_USER_TEST_URI) {
395 ASSERT(sourcefiles != nullptr);
396 ASSERT(script != nullptr);
397
398 intptr_t num_test_libs = 0;
399 if (test_libs_ != nullptr) {
400 num_test_libs = test_libs_->length();
401 }
402
403 *sourcefiles = new Dart_SourceFile[num_test_libs + 1];
404 (*sourcefiles)[0].uri = script_url;
405 (*sourcefiles)[0].source = script;
406 for (intptr_t i = 0; i < num_test_libs; ++i) {
407 (*sourcefiles)[i + 1].uri = test_libs_->At(i).url;
408 (*sourcefiles)[i + 1].source = test_libs_->At(i).source;
409 }
410 return num_test_libs + 1;
411}
412
413Dart_Handle TestCase::LoadTestScriptWithErrors(
414 const char* script,
416 const char* lib_url,
417 bool finalize_classes) {
418 return LoadTestScript(script, resolver, lib_url, finalize_classes, true);
419}
420
421Dart_Handle TestCase::LoadTestScript(const char* script,
423 const char* lib_url,
424 bool finalize_classes,
425 bool allow_compile_errors) {
427 Dart_SourceFile* sourcefiles = nullptr;
428 intptr_t num_sources = BuildSourceFilesArray(&sourcefiles, script, lib_url);
430 LoadTestScriptWithDFE(num_sources, sourcefiles, resolver,
431 finalize_classes, true, allow_compile_errors);
432 delete[] sourcefiles;
433 return result;
434}
435
436static void MallocFinalizer(void* isolate_callback_data, void* peer) {
437 free(peer);
438}
439
440Dart_Handle TestCase::LoadTestLibrary(const char* lib_uri,
441 const char* script,
442 Dart_NativeEntryResolver resolver) {
444 const char* prefixed_lib_uri =
445 OS::SCreate(Thread::Current()->zone(), "file:///%s", lib_uri);
446 Dart_SourceFile sourcefiles[] = {{prefixed_lib_uri, script}};
447 const uint8_t* kernel_buffer = nullptr;
448 intptr_t kernel_buffer_size = 0;
449 int sourcefiles_count = sizeof(sourcefiles) / sizeof(Dart_SourceFile);
450 char* error = TestCase::CompileTestScriptWithDFE(
451 sourcefiles[0].uri, sourcefiles_count, sourcefiles, &kernel_buffer,
452 &kernel_buffer_size, true);
453 if ((kernel_buffer == nullptr) && (error != nullptr)) {
454 return Dart_NewApiError(error);
455 }
456
458 Dart_TypedData_kUint8, const_cast<uint8_t*>(kernel_buffer),
459 kernel_buffer_size, const_cast<uint8_t*>(kernel_buffer),
460 kernel_buffer_size, MallocFinalizer);
461 EXPECT_VALID(td);
463 EXPECT_VALID(lib);
464
465 // TODO(32618): Kernel doesn't correctly represent the root library.
466 lib = Dart_LookupLibrary(Dart_NewStringFromCString(sourcefiles[0].uri));
467 EXPECT_VALID(lib);
470
471 Dart_SetNativeResolver(lib, resolver, nullptr);
472 return lib;
473}
474
475Dart_Handle TestCase::LoadTestScriptWithDFE(int sourcefiles_count,
476 Dart_SourceFile sourcefiles[],
478 bool finalize,
479 bool incrementally,
480 bool allow_compile_errors,
481 const char* entry_script_uri,
482 const char* multiroot_filepaths,
483 const char* multiroot_scheme) {
484 // First script is the main script.
485 Dart_Handle result = Dart_SetLibraryTagHandler(LibraryTagHandler);
487 const uint8_t* kernel_buffer = nullptr;
488 intptr_t kernel_buffer_size = 0;
489 char* error = TestCase::CompileTestScriptWithDFE(
490 entry_script_uri != nullptr ? entry_script_uri : sourcefiles[0].uri,
491 sourcefiles_count, sourcefiles, &kernel_buffer, &kernel_buffer_size,
492 incrementally, allow_compile_errors, multiroot_filepaths,
493 multiroot_scheme);
494 if ((kernel_buffer == nullptr) && error != nullptr) {
495 return Dart_NewApiError(error);
496 }
497
499 Dart_TypedData_kUint8, const_cast<uint8_t*>(kernel_buffer),
500 kernel_buffer_size, const_cast<uint8_t*>(kernel_buffer),
501 kernel_buffer_size, MallocFinalizer);
502 EXPECT_VALID(td);
504 EXPECT_VALID(lib);
505
506 // BOGUS: Kernel doesn't correctly represent the root library.
508 entry_script_uri != nullptr ? entry_script_uri : sourcefiles[0].uri));
509 EXPECT_VALID(lib);
512
513 result = Dart_SetNativeResolver(lib, resolver, nullptr);
515 if (finalize) {
518 }
519 return lib;
520}
521
522#ifndef PRODUCT
523
524Dart_Handle TestCase::SetReloadTestScript(const char* script) {
525 // For our vm/cc/IsolateReload_* tests we flip the GC flag on, which will
526 // cause the isolate reload to do GCs before/after morphing, etc.
527 FLAG_gc_during_reload = true;
528 FLAG_force_evacuation = true;
529
530 Dart_SourceFile* sourcefiles = nullptr;
531 intptr_t num_files = BuildSourceFilesArray(&sourcefiles, script);
532 Dart_KernelCompilationResult compilation_result =
533 KernelIsolate::UpdateInMemorySources(num_files, sourcefiles);
534 delete[] sourcefiles;
535 if (compilation_result.status != Dart_KernelCompilationStatus_Ok) {
536 Dart_Handle result = Dart_NewApiError(compilation_result.error);
537 free(compilation_result.error);
538 return result;
539 }
540 return Api::Success();
541}
542
543Dart_Handle TestCase::TriggerReload(
544 std::function<bool(IsolateGroup*, JSONStream*)> do_reload) {
545 Thread* thread = Thread::Current();
546 IsolateGroup* isolate_group = thread->isolate_group();
547 JSONStream js;
548 bool success = false;
549 {
550 TransitionNativeToVM transition(thread);
551 success = do_reload(isolate_group, &js);
552 OS::PrintErr("RELOAD REPORT:\n%s\n", js.ToCString());
553 }
554
556 if (success) {
558 }
559
560 if (Dart_IsError(result)) {
561 // Keep load error.
562 } else if (isolate_group->reload_context()->reload_aborted()) {
563 TransitionNativeToVM transition(thread);
564 result = Api::NewHandle(thread, isolate_group->program_reload_context()
565 ->group_reload_context()
566 ->error());
567 } else {
569 }
570
571 TransitionNativeToVM transition(thread);
572 if (isolate_group->program_reload_context() != nullptr) {
573 isolate_group->DeleteReloadContext();
574 }
575
576 return result;
577}
578
579Dart_Handle TestCase::TriggerReload(const char* root_script_url) {
580 return TriggerReload([&](IsolateGroup* isolate_group, JSONStream* js) {
581 return isolate_group->ReloadSources(js,
582 /*force_reload=*/false, root_script_url,
583 /*packages_url=*/nullptr,
584 /*dont_delete_reload_context=*/true);
585 });
586}
587
588Dart_Handle TestCase::TriggerReload(const uint8_t* kernel_buffer,
589 intptr_t kernel_buffer_size) {
590 return TriggerReload([&](IsolateGroup* isolate_group, JSONStream* js) {
591 return isolate_group->ReloadKernel(js,
592 /*force_reload=*/false, kernel_buffer,
593 kernel_buffer_size,
594 /*dont_delete_reload_context=*/true);
595 });
596}
597
598Dart_Handle TestCase::ReloadTestScript(const char* script) {
599 Dart_SourceFile* sourcefiles = nullptr;
600 intptr_t num_files = BuildSourceFilesArray(&sourcefiles, script);
601 Dart_KernelCompilationResult compilation_result =
602 KernelIsolate::UpdateInMemorySources(num_files, sourcefiles);
603 delete[] sourcefiles;
604 if (compilation_result.status != Dart_KernelCompilationStatus_Ok) {
605 Dart_Handle result = Dart_NewApiError(compilation_result.error);
606 free(compilation_result.error);
607 if (compilation_result.kernel != nullptr) {
608 free(const_cast<uint8_t*>(compilation_result.kernel));
609 }
610 return result;
611 }
612
613 return TriggerReload(/*kernel_buffer=*/nullptr, /*kernel_buffer_size=*/0);
614}
615
616Dart_Handle TestCase::ReloadTestKernel(const uint8_t* kernel_buffer,
617 intptr_t kernel_buffer_size) {
618 return TriggerReload(kernel_buffer, kernel_buffer_size);
619}
620
621#endif // !PRODUCT
622
623Dart_Handle TestCase::LoadCoreTestScript(const char* script,
624 Dart_NativeEntryResolver resolver) {
625 return LoadTestScript(script, resolver, CORELIB_TEST_URI);
626}
627
628Dart_Handle TestCase::lib() {
629 Dart_Handle url = NewString(TestCase::url());
631 EXPECT_VALID(lib);
633 return lib;
634}
635
636Dart_Handle TestCase::library_handler(Dart_LibraryTag tag,
637 Dart_Handle library,
638 Dart_Handle url) {
639 if (tag == Dart_kCanonicalizeUrl) {
640 return url;
641 }
642 return Api::Success();
643}
644
645Dart_Handle TestCase::EvaluateExpression(const Library& lib,
646 const String& expr,
647 const Array& param_names,
648 const Array& param_values) {
649 Thread* thread = Thread::Current();
650
651 Object& val = Object::Handle();
652 if (!KernelIsolate::IsRunning()) {
653 UNREACHABLE();
654 } else {
655 Dart_KernelCompilationResult compilation_result =
656 KernelIsolate::CompileExpressionToKernel(
657 /* platform_kernel= */ nullptr, /* platform_kernel_size= */ 0,
658 expr.ToCString(), param_names, Array::empty_array(),
659 Array::empty_array(), Array::empty_array(), Array::empty_array(),
660 String::Handle(lib.url()).ToCString(),
661 /* klass= */ nullptr,
662 /* method= */ nullptr,
663 /* token_pos= */ TokenPosition::kNoSource,
664 /* script_uri= */ String::Handle(lib.url()).ToCString(),
665 /* is_static= */ true);
666 if (compilation_result.status != Dart_KernelCompilationStatus_Ok) {
667 return Api::NewError("%s", compilation_result.error);
668 }
669
670 const ExternalTypedData& kernel_buffer =
671 ExternalTypedData::Handle(ExternalTypedData::NewFinalizeWithFree(
672 const_cast<uint8_t*>(compilation_result.kernel),
673 compilation_result.kernel_size));
674
675 val = lib.EvaluateCompiledExpression(kernel_buffer, Array::empty_array(),
676 param_values,
677 TypeArguments::null_type_arguments());
678 }
679 return Api::NewHandle(thread, val.ptr());
680}
681
682#if !defined(PRODUCT) && (defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64))
683static bool IsHex(int c) {
684 return ('0' <= c && c <= '9') || ('a' <= c && c <= 'f');
685}
686#endif
687
688void AssemblerTest::Assemble() {
689 auto thread = Thread::Current();
690 const String& function_name = String::ZoneHandle(Symbols::New(thread, name_));
691
692 // We make a dummy script so that exception objects can be composed for
693 // assembler instructions that do runtime calls.
694 const char* kDummyScript = "assembler_test_dummy_function() {}";
695 const Script& script = Script::Handle(
696 Script::New(function_name, String::Handle(String::New(kDummyScript))));
697 const Library& lib = Library::Handle(Library::CoreLibrary());
698 const Class& cls = Class::ZoneHandle(
699 Class::New(lib, function_name, script, TokenPosition::kMinSource));
700 const FunctionType& signature = FunctionType::ZoneHandle(FunctionType::New());
701 Function& function = Function::ZoneHandle(Function::New(
702 signature, function_name, UntaggedFunction::kRegularFunction, true, false,
703 false, false, false, cls, TokenPosition::kMinSource));
704 SafepointWriteRwLocker ml(thread, thread->isolate_group()->program_lock());
705 code_ = Code::FinalizeCodeAndNotify(function, nullptr, assembler_,
706 Code::PoolAttachment::kAttachPool);
707 code_.set_owner(function);
708 code_.set_exception_handlers(Object::empty_exception_handlers());
709#ifndef PRODUCT
710 // Disassemble relative since code addresses are not stable from run to run.
711 SetFlagScope<bool> sfs(&FLAG_disassemble_relative, true);
712 uword start = code_.PayloadStart();
713 if (FLAG_disassemble) {
714 OS::PrintErr("Code for test '%s' {\n", name_);
715 Disassembler::Disassemble(start, start + assembler_->CodeSize());
716 OS::PrintErr("}\n");
717 }
718 Disassembler::Disassemble(start, start + assembler_->CodeSize(), disassembly_,
719 DISASSEMBLY_SIZE);
720#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64)
721 // Blank out absolute addressing constants on ia32, since they are not stable
722 // from run to run.
723 // Blank out thread-relative offsets on x64 since they change when new fields
724 // are added to thread object.
725 bool in_hex_constant = false;
726 for (char* p = disassembly_; *p != '\0'; p++) {
727 if (in_hex_constant) {
728 if (IsHex(*p)) {
729 *p = '.';
730 } else {
731 in_hex_constant = false;
732 }
733 } else {
734#if defined(TARGET_ARCH_IA32)
735 if (*p == '[' && *(p + 1) == '0' && *(p + 2) == 'x' && IsHex(*(p + 3)) &&
736 IsHex(*(p + 4))) {
737 p += 2;
738 in_hex_constant = true;
739 }
740#endif // defined(TARGET_ARCH_IA32)
741#if defined(TARGET_ARCH_X64)
742 if (*p == '[' && *(p + 1) == 't' && *(p + 2) == 'h' && *(p + 3) == 'r' &&
743 *(p + 4) == '+' && *(p + 5) == '0' && *(p + 6) == 'x' &&
744 IsHex(*(p + 7)) && IsHex(*(p + 8))) {
745 p += 6;
746 in_hex_constant = true;
747 }
748#endif // defined(TARGET_ARCH_X64)
749 }
750 }
751#endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64)
752#endif // !PRODUCT
753}
754
755const Code& AssemblerTest::Generate(
756 const char* name,
757 const std::function<void(compiler::Assembler* assembler)>& generator) {
758 compiler::ObjectPoolBuilder object_pool_builder;
759 compiler::Assembler assembler(&object_pool_builder, /*far_branch_level=*/0);
760 AssemblerTest test(name, &assembler, Thread::Current()->zone());
761 assembler.Ret();
762 test.Assemble();
763 return test.code();
764}
765
766bool CompilerTest::TestCompileFunction(const Function& function) {
767 Thread* thread = Thread::Current();
768 ASSERT(thread != nullptr);
769 ASSERT(ClassFinalizer::AllClassesFinalized());
770 const Object& result =
771 Object::Handle(Compiler::CompileFunction(thread, function));
772 return result.IsCode();
773}
774
775void ElideJSONSubstring(const char* prefix,
776 const char* in,
777 char* out,
778 const char* postfix) {
779 const char* pos = strstr(in, prefix);
780 while (pos != nullptr) {
781 // Copy up to pos into the output buffer.
782 while (in < pos) {
783 *out++ = *in++;
784 }
785
786 // Skip to the closing postfix.
787 in += strlen(prefix);
788 in += strcspn(in, postfix);
789 pos = strstr(in, prefix);
790 }
791 // Copy the remainder of in to out.
792 while (*in != '\0') {
793 *out++ = *in++;
794 }
795 *out = '\0';
796}
797
798void StripTokenPositions(char* buffer) {
799 ElideJSONSubstring(",\"tokenPos\":", buffer, buffer, ",");
800 ElideJSONSubstring(",\"endTokenPos\":", buffer, buffer, "}");
801}
802
803} // namespace dart
#define test(name)
SkPoint pos
#define UNREACHABLE()
Definition assert.h:248
#define FUNCTION_NAME(name)
Definition builtin.h:19
DART_EXPORT Dart_Handle Dart_SetNativeResolver(Dart_Handle library, Dart_NativeEntryResolver resolver, Dart_NativeEntrySymbol symbol)
@ Dart_KernelCompilationStatus_Ok
Definition dart_api.h:3728
struct _Dart_Handle * Dart_Handle
Definition dart_api.h:258
DART_EXPORT void Dart_PropagateError(Dart_Handle handle)
Dart_NativeFunction(* Dart_NativeEntryResolver)(Dart_Handle name, int num_of_arguments, bool *auto_setup_scope)
Definition dart_api.h:3225
DART_EXPORT Dart_Handle Dart_LookupLibrary(Dart_Handle url)
DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_FinalizeLoading(bool complete_futures)
DART_EXPORT Dart_Handle Dart_NewExternalTypedDataWithFinalizer(Dart_TypedData_Type type, void *data, intptr_t length, void *peer, intptr_t external_allocation_size, Dart_HandleFinalizer callback)
struct _Dart_NativeArguments * Dart_NativeArguments
Definition dart_api.h:3010
@ Dart_TypedData_kUint8
Definition dart_api.h:2606
DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_LoadLibrary(Dart_Handle kernel_buffer)
DART_EXPORT Dart_Handle Dart_NewApiError(const char *error)
DART_EXPORT Dart_Handle Dart_Null(void)
Dart_LibraryTag
Definition dart_api.h:3339
@ Dart_kCanonicalizeUrl
Definition dart_api.h:3340
DART_EXPORT Dart_Handle Dart_StringToCString(Dart_Handle str, const char **cstr)
DART_EXPORT Dart_Handle Dart_NewStringFromCString(const char *str)
void(* Dart_NativeFunction)(Dart_NativeArguments arguments)
Definition dart_api.h:3198
DART_EXPORT Dart_Handle Dart_DefaultCanonicalizeUrl(Dart_Handle base_url, Dart_Handle url)
DART_EXPORT Dart_Handle Dart_LibraryUrl(Dart_Handle library)
DART_EXPORT bool Dart_IsError(Dart_Handle handle)
DART_EXPORT bool Dart_IsLibrary(Dart_Handle object)
DART_EXPORT Dart_Handle Dart_SetLibraryTagHandler(Dart_LibraryTagHandler handler)
DART_EXPORT Dart_Handle Dart_RootLibrary(void)
DART_EXPORT Dart_Handle Dart_SetRootLibrary(Dart_Handle library)
#define ASSERT(E)
SkBitmap source
Definition examples.cpp:28
#define FATAL(error)
static const uint8_t buffer[]
const uint8_t uint32_t uint32_t GError ** error
GAsyncResult * result
const char * name
Definition fuchsia.cc:50
#define REGISTER_FUNCTION(name, count)
Definition fuchsia.cc:41
int argument_count
Definition fuchsia.cc:52
void ElideJSONSubstring(const char *prefix, const char *in, char *out, const char *postfix)
Definition unit_test.cc:776
LibraryPtr LoadTestScript(const char *script, Dart_NativeEntryResolver resolver, const char *lib_uri)
static intptr_t BuildSourceFilesArray(Dart_SourceFile **sourcefiles, const char *script, const char *script_url=RESOLVED_USER_TEST_URI)
Definition unit_test.cc:392
static Dart_Handle LibraryTagHandler(Dart_LibraryTag tag, Dart_Handle library, Dart_Handle url)
Definition unit_test.cc:378
static MallocGrowableArray< TestLibEntry > * test_libs_
Definition unit_test.cc:182
static const char * IsolateReloadTestLibUri()
Definition unit_test.cc:231
static struct dart::NativeEntries ReloadEntries[]
uintptr_t uword
Definition globals.h:501
static void LoadIsolateReloadTestLibIfNeeded(const char *script)
Definition unit_test.cc:289
static Dart_NativeFunction IsolateReloadTestNativeResolver(Dart_Handle name, int argument_count, bool *auto_setup_scope)
Definition unit_test.cc:248
const char *const function_name
static void MallocFinalizer(void *isolate_callback_data, void *peer)
Definition unit_test.cc:437
void StripTokenPositions(char *buffer)
Definition unit_test.cc:799
Dart_KernelCompilationStatus status
Definition dart_api.h:3735
const char * uri
Definition dart_api.h:3793
#define RELOAD_NATIVE_LIST(V)
Definition unit_test.cc:235
Dart_Handle NewString(const char *str)
Definition unit_test.h:229
#define RESOLVED_USER_TEST_URI
Definition unit_test.h:317
#define CORELIB_TEST_URI
Definition unit_test.h:318
#define EXPECT_VALID(handle)
Definition unit_test.h:650

Variable Documentation

◆ kPlatformStrongDill

const uint8_t kPlatformStrongDill[]
extern

◆ kPlatformStrongDillSize

intptr_t kPlatformStrongDillSize
extern