mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 17:40:04 +00:00
[vm] Assert callback state for all Dart_Set*ReturnValue, take 2.
Fix scoping of raw typed data access in dart:io. Change-Id: I458b36bf655e429cc57e266550ff1ab00f328f45 Reviewed-on: https://dart-review.googlesource.com/c/89943 Reviewed-by: Ben Konyi <bkonyi@google.com> Commit-Queue: Ryan Macnak <rmacnak@google.com>
This commit is contained in:
parent
ddce2824fa
commit
e7bd3edc9f
|
@ -113,12 +113,15 @@ void FUNCTION_NAME(File_Open)(Dart_NativeArguments args) {
|
|||
}
|
||||
|
||||
void FUNCTION_NAME(File_Exists)(Dart_NativeArguments args) {
|
||||
Namespace* namespc = Namespace::GetNamespace(args, 0);
|
||||
Dart_Handle path_handle = Dart_GetNativeArgument(args, 1);
|
||||
TypedDataScope data(path_handle);
|
||||
ASSERT(data.type() == Dart_TypedData_kUint8);
|
||||
const char* filename = data.GetCString();
|
||||
bool exists = File::Exists(namespc, filename);
|
||||
bool exists;
|
||||
{
|
||||
Namespace* namespc = Namespace::GetNamespace(args, 0);
|
||||
Dart_Handle path_handle = Dart_GetNativeArgument(args, 1);
|
||||
TypedDataScope data(path_handle);
|
||||
ASSERT(data.type() == Dart_TypedData_kUint8);
|
||||
const char* filename = data.GetCString();
|
||||
exists = File::Exists(namespc, filename);
|
||||
}
|
||||
Dart_SetBooleanReturnValue(args, exists);
|
||||
}
|
||||
|
||||
|
@ -710,13 +713,16 @@ void FUNCTION_NAME(File_GetStdioHandleType)(Dart_NativeArguments args) {
|
|||
}
|
||||
|
||||
void FUNCTION_NAME(File_GetType)(Dart_NativeArguments args) {
|
||||
Namespace* namespc = Namespace::GetNamespace(args, 0);
|
||||
Dart_Handle path_handle = Dart_GetNativeArgument(args, 1);
|
||||
TypedDataScope data(path_handle);
|
||||
ASSERT(data.type() == Dart_TypedData_kUint8);
|
||||
const char* path = data.GetCString();
|
||||
bool follow_links = DartUtils::GetNativeBooleanArgument(args, 2);
|
||||
File::Type type = File::GetType(namespc, path, follow_links);
|
||||
File::Type type;
|
||||
{
|
||||
Namespace* namespc = Namespace::GetNamespace(args, 0);
|
||||
Dart_Handle path_handle = Dart_GetNativeArgument(args, 1);
|
||||
TypedDataScope data(path_handle);
|
||||
ASSERT(data.type() == Dart_TypedData_kUint8);
|
||||
const char* path = data.GetCString();
|
||||
bool follow_links = DartUtils::GetNativeBooleanArgument(args, 2);
|
||||
type = File::GetType(namespc, path, follow_links);
|
||||
}
|
||||
Dart_SetIntegerReturnValue(args, static_cast<int>(type));
|
||||
}
|
||||
|
||||
|
|
|
@ -141,13 +141,13 @@ void FUNCTION_NAME(SynchronousSocket_WriteList)(Dart_NativeArguments args) {
|
|||
buffer += offset;
|
||||
intptr_t bytes_written =
|
||||
SynchronousSocket::Write(socket->fd(), buffer, length);
|
||||
Dart_TypedDataReleaseData(buffer_obj);
|
||||
if (bytes_written >= 0) {
|
||||
Dart_SetIntegerReturnValue(args, bytes_written);
|
||||
} else {
|
||||
OSError os_error;
|
||||
Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
|
||||
}
|
||||
Dart_TypedDataReleaseData(buffer_obj);
|
||||
}
|
||||
|
||||
void FUNCTION_NAME(SynchronousSocket_ReadList)(Dart_NativeArguments args) {
|
||||
|
|
|
@ -4712,6 +4712,7 @@ DART_EXPORT void Dart_SetReturnValue(Dart_NativeArguments args,
|
|||
Dart_Handle retval) {
|
||||
NativeArguments* arguments = reinterpret_cast<NativeArguments*>(args);
|
||||
ASSERT(arguments->thread()->isolate() == Isolate::Current());
|
||||
ASSERT_CALLBACK_STATE(arguments->thread());
|
||||
if ((retval != Api::Null()) && !Api::IsInstance(retval) &&
|
||||
!Api::IsError(retval)) {
|
||||
// Print the current stack trace to make the problematic caller
|
||||
|
@ -4832,6 +4833,8 @@ Dart_SetEnvironmentCallback(Dart_EnvironmentCallback callback) {
|
|||
DART_EXPORT void Dart_SetBooleanReturnValue(Dart_NativeArguments args,
|
||||
bool retval) {
|
||||
NativeArguments* arguments = reinterpret_cast<NativeArguments*>(args);
|
||||
ASSERT(arguments->thread()->isolate() == Isolate::Current());
|
||||
ASSERT_CALLBACK_STATE(arguments->thread());
|
||||
arguments->SetReturn(Bool::Get(retval));
|
||||
}
|
||||
|
||||
|
@ -4839,6 +4842,7 @@ DART_EXPORT void Dart_SetIntegerReturnValue(Dart_NativeArguments args,
|
|||
int64_t retval) {
|
||||
NativeArguments* arguments = reinterpret_cast<NativeArguments*>(args);
|
||||
ASSERT(arguments->thread()->isolate() == Isolate::Current());
|
||||
ASSERT_CALLBACK_STATE(arguments->thread());
|
||||
if (Smi::IsValid(retval)) {
|
||||
Api::SetSmiReturnValue(arguments, static_cast<intptr_t>(retval));
|
||||
} else {
|
||||
|
@ -4852,6 +4856,7 @@ DART_EXPORT void Dart_SetIntegerReturnValue(Dart_NativeArguments args,
|
|||
DART_EXPORT void Dart_SetDoubleReturnValue(Dart_NativeArguments args,
|
||||
double retval) {
|
||||
NativeArguments* arguments = reinterpret_cast<NativeArguments*>(args);
|
||||
ASSERT(arguments->thread()->isolate() == Isolate::Current());
|
||||
ASSERT_CALLBACK_STATE(arguments->thread());
|
||||
TransitionNativeToVM transition(arguments->thread());
|
||||
Api::SetDoubleReturnValue(arguments, retval);
|
||||
|
|
Loading…
Reference in a new issue