From 0801e99da73e56cd528be356153792b2d8f61b6e Mon Sep 17 00:00:00 2001 From: cxl Date: Tue, 3 May 2016 07:56:44 +0000 Subject: [PATCH] New Core Fixes git-svn-id: svn://ultimatepp.org/upp/trunk@9776 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/Core/CallbackNP.i | 4 ++-- uppsrc/Core/Value.cpp | 19 +++++++------------ uppsrc/Core/Value.h | 1 - uppsrc/Core/todo.txt | 4 +++- 4 files changed, 12 insertions(+), 16 deletions(-) diff --git a/uppsrc/Core/CallbackNP.i b/uppsrc/Core/CallbackNP.i index e647028b0..cd9661cc5 100644 --- a/uppsrc/Core/CallbackNP.i +++ b/uppsrc/Core/CallbackNP.i @@ -48,14 +48,14 @@ template Cb_ ptebackn(O *object, Res (M::*method)(AMP_) P_p_) { Ptr ptr = object; - return Cb_([=](A_a_) { if(ptr) return (ptr->*method)(ap_); }, 0); + return Cb_([=](A_a_) { if(ptr) return (ptr->*method)(ap_); return Res(); }, 0); } template Cb_ ptebackn(O *object, Res (M::*method)(AMP_) const P_p_) { Ptr ptr = object; - return Cb_([=](A_a_) { if(ptr) return (object->*method)(ap_); }, 0); + return Cb_([=](A_a_) { if(ptr) return (object->*method)(ap_); return Res(); }, 0); } #ifdef classP diff --git a/uppsrc/Core/Value.cpp b/uppsrc/Core/Value.cpp index 88cd3e4cf..fa2e86d10 100644 --- a/uppsrc/Core/Value.cpp +++ b/uppsrc/Core/Value.cpp @@ -630,22 +630,17 @@ Value::ConstIterator Value::End() const return GetVA().End(); } -void Value::CloneArray() -{ - ValueArray::Data *data = (ValueArray::Data *)ptr(); - ValueArray::Data *d = new ValueArray::Data; - d->data = clone(data->data); - data->Release(); - ptr() = d; - data = d; -} - force_inline Vector& Value::UnShareArray() { ValueArray::Data *data = (ValueArray::Data *)ptr(); - if(data->GetRefCount() != 1) - CloneArray(); + if(data->GetRefCount() != 1) { + ValueArray::Data *d = new ValueArray::Data; + d->data = clone(data->data); + data->Release(); + ptr() = d; + data = d; + } return data->data; } diff --git a/uppsrc/Core/Value.h b/uppsrc/Core/Value.h index f91e113fb..7eb2c768d 100644 --- a/uppsrc/Core/Value.h +++ b/uppsrc/Core/Value.h @@ -176,7 +176,6 @@ protected: int PolyCompare(const Value& v) const; - void CloneArray(); Vector& UnShareArray(); const Vector& GetVA() const; diff --git a/uppsrc/Core/todo.txt b/uppsrc/Core/todo.txt index 87efc7318..8f806c6bd 100644 --- a/uppsrc/Core/todo.txt +++ b/uppsrc/Core/todo.txt @@ -6,7 +6,6 @@ CLANG11 autotest/StringBuffer2GB : ERROR CLANG11 autotest/CheckDownloads : FAILED CLANG11 autotest/Core11 : FAILED CLANG11 autotest/CompareContainer : FAILED -CLANG11 autotest/CallbackPick : ERROR CLANG11 reference/SocketServer : ERROR CLANG11 reference/Cv : ERROR CLANG11 reference/CallbackPickClone : ERROR @@ -21,6 +20,9 @@ CLANG11 upptst/idetest : ERROR CLANG11 upptst/Zip : ERROR CLANG11 tutorial/Ntl10 : ERROR + +CLANG11 autotest/CallbackPick : ERROR + oportunity && RawValueRep - PICK DEEP no more necessary, RawDeepToValue?