| Index: runtime/bin/file.cc | 
| diff --git a/runtime/bin/file.cc b/runtime/bin/file.cc | 
| index a1efe42c5fc6159e89123e0994c3c852894a2ab6..7cc3e7181198de86a31755b42c2e20ca44efcdd6 100644 | 
| --- a/runtime/bin/file.cc | 
| +++ b/runtime/bin/file.cc | 
| @@ -24,7 +24,6 @@ static bool capture_stdout = false; | 
| // Are we capturing output from stderr for the VM service? | 
| static bool capture_stderr = false; | 
|  | 
| - | 
| void SetCaptureStdout(bool value) { | 
| capture_stdout = value; | 
| } | 
| @@ -45,7 +44,6 @@ bool ShouldCaptureStderr() { | 
| } | 
|  | 
|  | 
| - | 
| // The file pointer has been passed into Dart as an intptr_t and it is safe | 
| // to pull it out of Dart as a 64-bit integer, cast it to an intptr_t and | 
| // from there to a File pointer. | 
| @@ -83,11 +81,11 @@ bool File::WriteFully(const void* buffer, int64_t num_bytes) { | 
| } | 
| if (capture_stdout || capture_stderr) { | 
| intptr_t fd = GetFD(); | 
| -    if (fd == STDOUT_FILENO && capture_stdout) { | 
| +    if ((fd == STDOUT_FILENO) && capture_stdout) { | 
| Dart_ServiceSendDataEvent("Stdout", "WriteEvent", | 
| reinterpret_cast<const uint8_t*>(buffer), | 
| num_bytes); | 
| -    } else if (fd == STDERR_FILENO && capture_stderr) { | 
| +    } else if ((fd == STDERR_FILENO) && capture_stderr) { | 
| Dart_ServiceSendDataEvent("Stderr", "WriteEvent", | 
| reinterpret_cast<const uint8_t*>(buffer), | 
| num_bytes); | 
| @@ -98,11 +96,11 @@ bool File::WriteFully(const void* buffer, int64_t num_bytes) { | 
|  | 
|  | 
| File::FileOpenMode File::DartModeToFileMode(DartFileOpenMode mode) { | 
| -  ASSERT(mode == File::kDartRead || | 
| -         mode == File::kDartWrite || | 
| -         mode == File::kDartAppend || | 
| -         mode == File::kDartWriteOnly || | 
| -         mode == File::kDartWriteOnlyAppend); | 
| +  ASSERT((mode == File::kDartRead) || | 
| +         (mode == File::kDartWrite) || | 
| +         (mode == File::kDartAppend) || | 
| +         (mode == File::kDartWriteOnly) || | 
| +         (mode == File::kDartWriteOnlyAppend)); | 
| if (mode == File::kDartWrite) { | 
| return File::kWriteTruncate; | 
| } | 
| @@ -131,7 +129,7 @@ void FUNCTION_NAME(File_Open)(Dart_NativeArguments args) { | 
| // files. Directories can be opened for reading using the posix | 
| // 'open' call. | 
| File* file = NULL; | 
| -  file = File::Open(filename, file_mode); | 
| +  file = File::ScopedOpen(filename, file_mode); | 
| if (file != NULL) { | 
| Dart_SetReturnValue(args, | 
| Dart_NewInteger(reinterpret_cast<intptr_t>(file))); | 
| @@ -219,7 +217,9 @@ void FUNCTION_NAME(File_Read)(Dart_NativeArguments args) { | 
| // TODO(sgjesse): Cache the _makeUint8ListView function somewhere. | 
| Dart_Handle io_lib = | 
| Dart_LookupLibrary(DartUtils::NewString("dart:io")); | 
| -        if (Dart_IsError(io_lib)) Dart_PropagateError(io_lib); | 
| +        if (Dart_IsError(io_lib)) { | 
| +          Dart_PropagateError(io_lib); | 
| +        } | 
| Dart_Handle array_view = | 
| Dart_Invoke(io_lib, | 
| DartUtils::NewString("_makeUint8ListView"), | 
| @@ -253,9 +253,11 @@ void FUNCTION_NAME(File_ReadInto)(Dart_NativeArguments args) { | 
| intptr_t length = end - start; | 
| intptr_t array_len = 0; | 
| Dart_Handle result = Dart_ListLength(buffer_obj, &array_len); | 
| -  if (Dart_IsError(result)) Dart_PropagateError(result); | 
| +  if (Dart_IsError(result)) { | 
| +    Dart_PropagateError(result); | 
| +  } | 
| ASSERT(end <= array_len); | 
| -  uint8_t* buffer = new uint8_t[length]; | 
| +  uint8_t* buffer = Dart_ScopeAllocate(length); | 
| int64_t bytes_read = file->Read(reinterpret_cast<void*>(buffer), length); | 
| if (bytes_read >= 0) { | 
| result = Dart_ListSetAsBytes(buffer_obj, start, buffer, bytes_read); | 
| @@ -267,7 +269,6 @@ void FUNCTION_NAME(File_ReadInto)(Dart_NativeArguments args) { | 
| } else { | 
| Dart_SetReturnValue(args, DartUtils::NewDartOSError()); | 
| } | 
| -  delete[] buffer; | 
| } | 
|  | 
|  | 
| @@ -294,7 +295,9 @@ void FUNCTION_NAME(File_WriteFrom)(Dart_NativeArguments args) { | 
| void* buffer = NULL; | 
| Dart_Handle result = | 
| Dart_TypedDataAcquireData(buffer_obj, &type, &buffer, &buffer_len); | 
| -  if (Dart_IsError(result)) Dart_PropagateError(result); | 
| +  if (Dart_IsError(result)) { | 
| +    Dart_PropagateError(result); | 
| +  } | 
|  | 
| ASSERT(type == Dart_TypedData_kUint8 || type == Dart_TypedData_kInt8); | 
| ASSERT(end <= buffer_len); | 
| @@ -305,7 +308,9 @@ void FUNCTION_NAME(File_WriteFrom)(Dart_NativeArguments args) { | 
|  | 
| // Release the direct pointer acquired above. | 
| result = Dart_TypedDataReleaseData(buffer_obj); | 
| -  if (Dart_IsError(result)) Dart_PropagateError(result); | 
| +  if (Dart_IsError(result)) { | 
| +    Dart_PropagateError(result); | 
| +  } | 
|  | 
| if (!success) { | 
| Dart_SetReturnValue(args, DartUtils::NewDartOSError()); | 
| @@ -466,12 +471,11 @@ void FUNCTION_NAME(File_LinkTarget)(Dart_NativeArguments args) { | 
| if (Dart_IsString(Dart_GetNativeArgument(args, 0))) { | 
| const char* name = | 
| DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); | 
| -    char* target = File::LinkTarget(name); | 
| +    const char* target = File::LinkTarget(name); | 
| if (target == NULL) { | 
| Dart_SetReturnValue(args, DartUtils::NewDartOSError()); | 
| } else { | 
| Dart_SetReturnValue(args, DartUtils::NewString(target)); | 
| -      free(target); | 
| } | 
| } else { | 
| Dart_Handle err = DartUtils::NewDartArgumentError( | 
| @@ -550,10 +554,9 @@ void FUNCTION_NAME(File_Copy)(Dart_NativeArguments args) { | 
| void FUNCTION_NAME(File_ResolveSymbolicLinks)(Dart_NativeArguments args) { | 
| const char* str = | 
| DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); | 
| -  char* path = File::GetCanonicalPath(str); | 
| +  const char* path = File::GetCanonicalPath(str); | 
| if (path != NULL) { | 
| Dart_SetReturnValue(args, DartUtils::NewString(path)); | 
| -    free(path); | 
| } else { | 
| Dart_SetReturnValue(args, DartUtils::NewDartOSError()); | 
| } | 
| @@ -605,7 +608,9 @@ void FUNCTION_NAME(File_Stat)(Dart_NativeArguments args) { | 
| } else { | 
| Dart_Handle returned_data = Dart_NewTypedData(Dart_TypedData_kInt64, | 
| File::kStatSize); | 
| -      if (Dart_IsError(returned_data)) Dart_PropagateError(returned_data); | 
| +      if (Dart_IsError(returned_data)) { | 
| +        Dart_PropagateError(returned_data); | 
| +      } | 
| Dart_TypedData_Type data_type_unused; | 
| void* data_location; | 
| intptr_t data_length_unused; | 
| @@ -613,10 +618,14 @@ void FUNCTION_NAME(File_Stat)(Dart_NativeArguments args) { | 
| &data_type_unused, | 
| &data_location, | 
| &data_length_unused); | 
| -      if (Dart_IsError(status)) Dart_PropagateError(status); | 
| +      if (Dart_IsError(status)) { | 
| +        Dart_PropagateError(status); | 
| +      } | 
| memmove(data_location, stat_data, File::kStatSize * sizeof(int64_t)); | 
| status = Dart_TypedDataReleaseData(returned_data); | 
| -      if (Dart_IsError(status)) Dart_PropagateError(status); | 
| +      if (Dart_IsError(status)) { | 
| +        Dart_PropagateError(status); | 
| +      } | 
| Dart_SetReturnValue(args, returned_data); | 
| } | 
| } else { | 
| @@ -669,7 +678,7 @@ File* CObjectToFilePointer(CObject* cobject) { | 
|  | 
|  | 
| CObject* File::ExistsRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 1 && request[0]->IsString()) { | 
| +  if ((request.Length() == 1) && request[0]->IsString()) { | 
| CObjectString filename(request[0]); | 
| bool result = File::Exists(filename.CString()); | 
| return CObject::Bool(result); | 
| @@ -679,7 +688,7 @@ CObject* File::ExistsRequest(const CObjectArray& request) { | 
|  | 
|  | 
| CObject* File::CreateRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 1 && request[0]->IsString()) { | 
| +  if ((request.Length() == 1) && request[0]->IsString()) { | 
| CObjectString filename(request[0]); | 
| bool result = File::Create(filename.CString()); | 
| if (result) { | 
| @@ -691,9 +700,10 @@ CObject* File::CreateRequest(const CObjectArray& request) { | 
| return CObject::IllegalArgumentError(); | 
| } | 
|  | 
| + | 
| CObject* File::OpenRequest(const CObjectArray& request) { | 
| File* file = NULL; | 
| -  if (request.Length() == 2 && | 
| +  if ((request.Length() == 2) && | 
| request[0]->IsString() && | 
| request[1]->IsInt32()) { | 
| CObjectString filename(request[0]); | 
| @@ -701,7 +711,7 @@ CObject* File::OpenRequest(const CObjectArray& request) { | 
| File::DartFileOpenMode dart_file_mode = | 
| static_cast<File::DartFileOpenMode>(mode.Value()); | 
| File::FileOpenMode file_mode = File::DartModeToFileMode(dart_file_mode); | 
| -    file = File::Open(filename.CString(), file_mode); | 
| +    file = File::ScopedOpen(filename.CString(), file_mode); | 
| if (file != NULL) { | 
| return new CObjectIntptr( | 
| CObject::NewIntptr(reinterpret_cast<intptr_t>(file))); | 
| @@ -714,7 +724,7 @@ CObject* File::OpenRequest(const CObjectArray& request) { | 
|  | 
|  | 
| CObject* File::DeleteRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 1 && request[0]->IsString()) { | 
| +  if ((request.Length() == 1) && request[0]->IsString()) { | 
| CObjectString filename(request[0]); | 
| bool result = File::Delete(filename.CString()); | 
| if (result) { | 
| @@ -728,13 +738,15 @@ CObject* File::DeleteRequest(const CObjectArray& request) { | 
|  | 
|  | 
| CObject* File::RenameRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 2 && | 
| +  if ((request.Length() == 2) && | 
| request[0]->IsString() && | 
| request[1]->IsString()) { | 
| CObjectString old_path(request[0]); | 
| CObjectString new_path(request[1]); | 
| bool completed = File::Rename(old_path.CString(), new_path.CString()); | 
| -    if (completed) return CObject::True(); | 
| +    if (completed) { | 
| +      return CObject::True(); | 
| +    } | 
| return CObject::NewOSError(); | 
| } | 
| return CObject::IllegalArgumentError(); | 
| @@ -742,13 +754,15 @@ CObject* File::RenameRequest(const CObjectArray& request) { | 
|  | 
|  | 
| CObject* File::CopyRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 2 && | 
| +  if ((request.Length() == 2) && | 
| request[0]->IsString() && | 
| request[1]->IsString()) { | 
| CObjectString old_path(request[0]); | 
| CObjectString new_path(request[1]); | 
| bool completed = File::Copy(old_path.CString(), new_path.CString()); | 
| -    if (completed) return CObject::True(); | 
| +    if (completed) { | 
| +      return CObject::True(); | 
| +    } | 
| return CObject::NewOSError(); | 
| } | 
| return CObject::IllegalArgumentError(); | 
| @@ -756,12 +770,11 @@ CObject* File::CopyRequest(const CObjectArray& request) { | 
|  | 
|  | 
| CObject* File::ResolveSymbolicLinksRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 1 && request[0]->IsString()) { | 
| +  if ((request.Length() == 1) && request[0]->IsString()) { | 
| CObjectString filename(request[0]); | 
| -    char* result = File::GetCanonicalPath(filename.CString()); | 
| +    const char* result = File::GetCanonicalPath(filename.CString()); | 
| if (result != NULL) { | 
| CObject* path = new CObjectString(CObject::NewString(result)); | 
| -      free(result); | 
| return path; | 
| } else { | 
| return CObject::NewOSError(); | 
| @@ -773,7 +786,7 @@ CObject* File::ResolveSymbolicLinksRequest(const CObjectArray& request) { | 
|  | 
| CObject* File::CloseRequest(const CObjectArray& request) { | 
| intptr_t return_value = -1; | 
| -  if (request.Length() == 1 && request[0]->IsIntptr()) { | 
| +  if ((request.Length() == 1) && request[0]->IsIntptr()) { | 
| File* file = CObjectToFilePointer(request[0]); | 
| ASSERT(file != NULL); | 
| delete file; | 
| @@ -784,7 +797,7 @@ CObject* File::CloseRequest(const CObjectArray& request) { | 
|  | 
|  | 
| CObject* File::PositionRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 1 && request[0]->IsIntptr()) { | 
| +  if ((request.Length() == 1) && request[0]->IsIntptr()) { | 
| File* file = CObjectToFilePointer(request[0]); | 
| ASSERT(file != NULL); | 
| if (!file->IsClosed()) { | 
| @@ -803,7 +816,7 @@ CObject* File::PositionRequest(const CObjectArray& request) { | 
|  | 
|  | 
| CObject* File::SetPositionRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 2 && | 
| +  if ((request.Length() == 2) && | 
| request[0]->IsIntptr() && | 
| request[1]->IsInt32OrInt64()) { | 
| File* file = CObjectToFilePointer(request[0]); | 
| @@ -824,7 +837,7 @@ CObject* File::SetPositionRequest(const CObjectArray& request) { | 
|  | 
|  | 
| CObject* File::TruncateRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 2 && | 
| +  if ((request.Length() == 2) && | 
| request[0]->IsIntptr() && | 
| request[1]->IsInt32OrInt64()) { | 
| File* file = CObjectToFilePointer(request[0]); | 
| @@ -845,7 +858,7 @@ CObject* File::TruncateRequest(const CObjectArray& request) { | 
|  | 
|  | 
| CObject* File::LengthRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 1 && request[0]->IsIntptr()) { | 
| +  if ((request.Length() == 1) && request[0]->IsIntptr()) { | 
| File* file = CObjectToFilePointer(request[0]); | 
| ASSERT(file != NULL); | 
| if (!file->IsClosed()) { | 
| @@ -864,7 +877,7 @@ CObject* File::LengthRequest(const CObjectArray& request) { | 
|  | 
|  | 
| CObject* File::LengthFromPathRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 1 && request[0]->IsString()) { | 
| +  if ((request.Length() == 1) && request[0]->IsString()) { | 
| CObjectString filepath(request[0]); | 
| int64_t return_value = File::LengthFromPath(filepath.CString()); | 
| if (return_value >= 0) { | 
| @@ -878,7 +891,7 @@ CObject* File::LengthFromPathRequest(const CObjectArray& request) { | 
|  | 
|  | 
| CObject* File::LastModifiedRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 1 && request[0]->IsString()) { | 
| +  if ((request.Length() == 1) && request[0]->IsString()) { | 
| CObjectString filepath(request[0]); | 
| int64_t return_value = File::LastModified(filepath.CString()); | 
| if (return_value >= 0) { | 
| @@ -892,7 +905,7 @@ CObject* File::LastModifiedRequest(const CObjectArray& request) { | 
|  | 
|  | 
| CObject* File::FlushRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 1 && request[0]->IsIntptr()) { | 
| +  if ((request.Length() == 1) && request[0]->IsIntptr()) { | 
| File* file = CObjectToFilePointer(request[0]); | 
| ASSERT(file != NULL); | 
| if (!file->IsClosed()) { | 
| @@ -910,7 +923,7 @@ CObject* File::FlushRequest(const CObjectArray& request) { | 
|  | 
|  | 
| CObject* File::ReadByteRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 1 && request[0]->IsIntptr()) { | 
| +  if ((request.Length() == 1) && request[0]->IsIntptr()) { | 
| File* file = CObjectToFilePointer(request[0]); | 
| ASSERT(file != NULL); | 
| if (!file->IsClosed()) { | 
| @@ -932,7 +945,7 @@ CObject* File::ReadByteRequest(const CObjectArray& request) { | 
|  | 
|  | 
| CObject* File::WriteByteRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 2 && | 
| +  if ((request.Length() == 2) && | 
| request[0]->IsIntptr() && | 
| request[1]->IsInt32OrInt64()) { | 
| File* file = CObjectToFilePointer(request[0]); | 
| @@ -955,7 +968,7 @@ CObject* File::WriteByteRequest(const CObjectArray& request) { | 
|  | 
|  | 
| CObject* File::ReadRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 2 && | 
| +  if ((request.Length() == 2) && | 
| request[0]->IsIntptr() && | 
| request[1]->IsInt32OrInt64()) { | 
| File* file = CObjectToFilePointer(request[0]); | 
| @@ -987,7 +1000,7 @@ CObject* File::ReadRequest(const CObjectArray& request) { | 
|  | 
|  | 
| CObject* File::ReadIntoRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 2 && | 
| +  if ((request.Length() == 2) && | 
| request[0]->IsIntptr() && | 
| request[1]->IsInt32OrInt64()) { | 
| File* file = CObjectToFilePointer(request[0]); | 
| @@ -1045,7 +1058,7 @@ static int SizeInBytes(Dart_TypedData_Type type) { | 
|  | 
|  | 
| CObject* File::WriteFromRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 4 && | 
| +  if ((request.Length() == 4) && | 
| request[0]->IsIntptr() && | 
| (request[1]->IsTypedData() || request[1]->IsArray()) && | 
| request[2]->IsInt32OrInt64() && | 
| @@ -1064,14 +1077,13 @@ CObject* File::WriteFromRequest(const CObjectArray& request) { | 
| buffer_start = typed_data.Buffer() + start; | 
| } else { | 
| CObjectArray array(request[1]); | 
| -        buffer_start = new uint8_t[length]; | 
| +        buffer_start = Dart_ScopeAllocate(length); | 
| for (int i = 0; i < length; i++) { | 
| if (array[i + start]->IsInt32OrInt64()) { | 
| int64_t value = CObjectInt32OrInt64ToInt64(array[i + start]); | 
| buffer_start[i] = static_cast<uint8_t>(value & 0xFF); | 
| } else { | 
| // Unsupported type. | 
| -            delete[] buffer_start; | 
| return CObject::IllegalArgumentError(); | 
| } | 
| } | 
| @@ -1079,9 +1091,6 @@ CObject* File::WriteFromRequest(const CObjectArray& request) { | 
| } | 
| bool success = | 
| file->WriteFully(reinterpret_cast<void*>(buffer_start), length); | 
| -      if (!request[1]->IsTypedData()) { | 
| -        delete[] buffer_start; | 
| -      } | 
| if (success) { | 
| return new CObjectInt64(CObject::NewInt64(length)); | 
| } else { | 
| @@ -1096,7 +1105,7 @@ CObject* File::WriteFromRequest(const CObjectArray& request) { | 
|  | 
|  | 
| CObject* File::CreateLinkRequest(const CObjectArray& request) { | 
| -  if (request.Length() != 2 || | 
| +  if ((request.Length() != 2) || | 
| !request[0]->IsString() || | 
| !request[1]->IsString()) { | 
| return CObject::IllegalArgumentError(); | 
| @@ -1112,7 +1121,7 @@ CObject* File::CreateLinkRequest(const CObjectArray& request) { | 
|  | 
|  | 
| CObject* File::DeleteLinkRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 1 && request[0]->IsString()) { | 
| +  if ((request.Length() == 1) && request[0]->IsString()) { | 
| CObjectString link_path(request[0]); | 
| bool result = File::DeleteLink(link_path.CString()); | 
| if (result) { | 
| @@ -1126,13 +1135,15 @@ CObject* File::DeleteLinkRequest(const CObjectArray& request) { | 
|  | 
|  | 
| CObject* File::RenameLinkRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 2 && | 
| +  if ((request.Length() == 2) && | 
| request[0]->IsString() && | 
| request[1]->IsString()) { | 
| CObjectString old_path(request[0]); | 
| CObjectString new_path(request[1]); | 
| bool completed = File::RenameLink(old_path.CString(), new_path.CString()); | 
| -    if (completed) return CObject::True(); | 
| +    if (completed) { | 
| +      return CObject::True(); | 
| +    } | 
| return CObject::NewOSError(); | 
| } | 
| return CObject::IllegalArgumentError(); | 
| @@ -1140,12 +1151,11 @@ CObject* File::RenameLinkRequest(const CObjectArray& request) { | 
|  | 
|  | 
| CObject* File::LinkTargetRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 1 && request[0]->IsString()) { | 
| +  if ((request.Length() == 1) && request[0]->IsString()) { | 
| CObjectString link_path(request[0]); | 
| -    char* target = File::LinkTarget(link_path.CString()); | 
| +    const char* target = File::LinkTarget(link_path.CString()); | 
| if (target != NULL) { | 
| CObject* result = new CObjectString(CObject::NewString(target)); | 
| -      free(target); | 
| return result; | 
| } else { | 
| return CObject::NewOSError(); | 
| @@ -1156,7 +1166,7 @@ CObject* File::LinkTargetRequest(const CObjectArray& request) { | 
|  | 
|  | 
| CObject* File::TypeRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 2 && | 
| +  if ((request.Length() == 2) && | 
| request[0]->IsString() && | 
| request[1]->IsBool()) { | 
| CObjectString path(request[0]); | 
| @@ -1169,7 +1179,7 @@ CObject* File::TypeRequest(const CObjectArray& request) { | 
|  | 
|  | 
| CObject* File::IdenticalRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 2 && | 
| +  if ((request.Length() == 2) && | 
| request[0]->IsString() && | 
| request[1]->IsString()) { | 
| CObjectString path1(request[0]); | 
| @@ -1189,8 +1199,7 @@ CObject* File::IdenticalRequest(const CObjectArray& request) { | 
|  | 
|  | 
| CObject* File::StatRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 1 && | 
| -      request[0]->IsString()) { | 
| +  if ((request.Length() == 1) && request[0]->IsString()) { | 
| int64_t data[File::kStatSize]; | 
| CObjectString path(request[0]); | 
| File::Stat(path.CString(), data); | 
| @@ -1212,7 +1221,7 @@ CObject* File::StatRequest(const CObjectArray& request) { | 
|  | 
|  | 
| CObject* File::LockRequest(const CObjectArray& request) { | 
| -  if (request.Length() == 4 && | 
| +  if ((request.Length() == 4) && | 
| request[0]->IsIntptr() && | 
| request[1]->IsInt32OrInt64() && | 
| request[2]->IsInt32OrInt64() && | 
|  |