Add an overload of SetValueFromCString() to ValueObjectSynthetic that is just a passthrough to the parent object

Without this overload, attempts to edit the value of a variable with synthetic children enabled would change the value inside the synthetic ValueObject, but not propagate the changes to the underlying storage, hence resulting in no write for any meaningful purpose

Comes with a test case, and fixes rdar://19586311

llvm-svn: 227120
This commit is contained in:
Enrico Granata 2015-01-26 19:33:52 +00:00
parent 9a9e1a59ce
commit 3de4971a7a
5 changed files with 35 additions and 0 deletions

View File

@ -140,6 +140,9 @@ public:
return (UpdateValueIfNeeded(), m_provides_value == eLazyBoolYes);
}
virtual bool
SetValueFromCString (const char *value_str, Error& error);
protected:
virtual bool
UpdateValue ();

View File

@ -298,3 +298,9 @@ ValueObjectSynthetic::CanProvideValue ()
return true;
return m_parent->CanProvideValue();
}
bool
ValueObjectSynthetic::SetValueFromCString (const char *value_str, Error& error)
{
return m_parent->SetValueFromCString(value_str, error);
}

View File

@ -0,0 +1,4 @@
LEVEL = ../../../make
OBJC_SOURCES := main.m
include $(LEVEL)/Makefile.rules
LDFLAGS += -framework Foundation

View File

@ -0,0 +1,3 @@
import lldbinline
lldbinline.MakeInlineTest(__file__, globals())

View File

@ -0,0 +1,19 @@
//===-- main.m ---------------------------------------------------*- ObjC -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#import <Foundation/Foundation.h>
int main() {
NSDictionary* dic = @{@1 : @2};
NSLog(@"hello world"); //% dic = self.frame().FindVariable("dic")
//% dic.SetPreferSyntheticValue(True)
//% dic.SetPreferDynamicValue(lldb.eDynamicCanRunTarget)
//% dic.SetValueFromCString("12")
return 0; //% dic = self.frame().FindVariable("dic")
//% self.assertTrue(dic.GetValueAsUnsigned() == 0xC, "failed to read what I wrote")
}