shafik updated this revision to Diff 194377.
shafik added a comment.
Addressing comments:
- Now applies to all languages not just C++
- When adding locals be more selective on filtering i.e. only filter self and
_cmd for Objective C etc...
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D59960/new/
https://reviews.llvm.org/D59960
Files:
packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name/Makefile
packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name/TestNamespaceLocalVarSameName.py
packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name/main.mm
packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name/util.mm
packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/Makefile
packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/TestNamespaceLocalVarSameNameObjC.py
packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/main.m
packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/util.mm
source/Expression/ExpressionSourceCode.cpp
Index: source/Expression/ExpressionSourceCode.cpp
===================================================================
--- source/Expression/ExpressionSourceCode.cpp
+++ source/Expression/ExpressionSourceCode.cpp
@@ -162,13 +162,23 @@
}
static void AddLocalVariableDecls(const lldb::VariableListSP &var_list_sp,
- StreamString &stream) {
+ StreamString &stream,
+ lldb::LanguageType wrapping_language) {
for (size_t i = 0; i < var_list_sp->GetSize(); i++) {
lldb::VariableSP var_sp = var_list_sp->GetVariableAtIndex(i);
ConstString var_name = var_sp->GetName();
- if (!var_name || var_name == ConstString("this") ||
- var_name == ConstString(".block_descriptor"))
+
+ // We can check for .block_descriptor w/o checking for langauge since this
+ // is not a valid identifier in either C or C++.
+ if (!var_name || var_name == ConstString(".block_descriptor"))
+ continue;
+
+ if((var_name == ConstString("self") || var_name == ConstString("_cmd")) &&
+ (wrapping_language == lldb::eLanguageTypeObjC || wrapping_language == lldb::eLanguageTypeObjC_plus_plus))
+ continue;
+
+ if (var_name == ConstString("this") && wrapping_language == lldb::eLanguageTypeC_plus_plus )
continue;
stream.Printf("using $__lldb_local_vars::%s;\n", var_name.AsCString());
@@ -252,15 +262,12 @@
}
}
- if (add_locals) {
- if (Language::LanguageIsCPlusPlus(frame->GetLanguage())) {
+ if (add_locals)
if (target->GetInjectLocalVariables(&exe_ctx)) {
lldb::VariableListSP var_list_sp =
frame->GetInScopeVariableList(false, true);
- AddLocalVariableDecls(var_list_sp, lldb_local_var_decls);
+ AddLocalVariableDecls(var_list_sp, lldb_local_var_decls, wrapping_language);
}
- }
- }
}
if (m_wrap) {
@@ -326,10 +333,12 @@
"@implementation $__lldb_objc_class ($__lldb_category) \n"
"+(void)%s:(void *)$__lldb_arg \n"
"{ \n"
+ " %s; \n"
"%s"
"} \n"
"@end \n",
- m_name.c_str(), m_name.c_str(), tagged_body.c_str());
+ m_name.c_str(), m_name.c_str(), lldb_local_var_decls.GetData(),
+ tagged_body.c_str());
} else {
wrap_stream.Printf(
"@interface $__lldb_objc_class ($__lldb_category) \n"
@@ -338,10 +347,13 @@
"@implementation $__lldb_objc_class ($__lldb_category) \n"
"-(void)%s:(void *)$__lldb_arg \n"
"{ \n"
+ " %s; \n"
"%s"
"} \n"
"@end \n",
- m_name.c_str(), m_name.c_str(), tagged_body.c_str());
+ m_name.c_str(), m_name.c_str(), lldb_local_var_decls.GetData(),
+ tagged_body.c_str());
+ //m_name.c_str(), m_name.c_str(), tagged_body.c_str());
}
break;
}
Index: packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/util.mm
===================================================================
--- /dev/null
+++ packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/util.mm
@@ -0,0 +1,16 @@
+#import <Foundation/Foundation.h>
+
+namespace error {
+int blah;
+}
+
+@interface Util : NSObject
++ (void)debugPrintError;
+@end
+
+@implementation Util
++ (void)debugPrintError {
+ NSError* error = [NSError errorWithDomain:NSURLErrorDomain code:-1 userInfo:nil];
+ NSLog(@"xxx, error = %@", error);
+}
+@end
Index: packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/main.m
===================================================================
--- /dev/null
+++ packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/main.m
@@ -0,0 +1,13 @@
+#import <Foundation/Foundation.h>
+@interface Util : NSObject
++ (void)debugPrintError;
+@end
+
+int main(int argc, const char * argv[]) {
+ [Util debugPrintError];
+ NSError* error = [NSError errorWithDomain:NSURLErrorDomain code:-1 userInfo:nil];
+ NSLog(@"xxx, error = %@", error);
+
+ return 0; // break here
+}
+
Index: packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/TestNamespaceLocalVarSameNameObjC.py
===================================================================
--- /dev/null
+++ packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/TestNamespaceLocalVarSameNameObjC.py
@@ -0,0 +1,19 @@
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+class TestNamespaceLocalVarSameNameObjC(TestBase):
+
+ mydir = TestBase.compute_mydir(__file__)
+
+ @skipUnlessDarwin
+ @add_test_categories(["gmodules"])
+ def test_namespace_local_var_same_name_objc(self):
+ self.build()
+
+ lldbutil.run_to_source_breakpoint(self, '// break here',
+ lldb.SBFileSpec("main.m", False))
+
+ self.expect("expr error",
+ substrs=['(NSError *) $0 ='])
Index: packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/Makefile
===================================================================
--- /dev/null
+++ packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/Makefile
@@ -0,0 +1,5 @@
+LEVEL = ../../make
+OBJCXX_SOURCES := main.mm util.mm
+include $(LEVEL)/Makefile.rules
+
+LDFLAGS += -framework Foundation
Index: packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name/util.mm
===================================================================
--- /dev/null
+++ packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name/util.mm
@@ -0,0 +1,16 @@
+#import <Foundation/Foundation.h>
+
+namespace error {
+int blah;
+}
+
+@interface Util : NSObject
++ (void)debugPrintError;
+@end
+
+@implementation Util
++ (void)debugPrintError {
+ NSError* error = [NSError errorWithDomain:NSURLErrorDomain code:-1 userInfo:nil];
+ NSLog(@"xxx, error = %@", error); // break here
+}
+@end
Index: packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name/main.mm
===================================================================
--- /dev/null
+++ packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name/main.mm
@@ -0,0 +1,11 @@
+#import <Foundation/Foundation.h>
+@interface Util : NSObject
++ (void)debugPrintError;
+@end
+
+int main(int argc, const char * argv[]) {
+ [Util debugPrintError];
+
+ return 0;
+}
+
Index: packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name/TestNamespaceLocalVarSameName.py
===================================================================
--- /dev/null
+++ packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name/TestNamespaceLocalVarSameName.py
@@ -0,0 +1,19 @@
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+class TestNamespaceLocalVarSameName(TestBase):
+
+ mydir = TestBase.compute_mydir(__file__)
+
+ @skipUnlessDarwin
+ @add_test_categories(["gmodules"])
+ def test_namespace_local_var_same_name(self):
+ self.build()
+
+ lldbutil.run_to_source_breakpoint(self, '// break here',
+ lldb.SBFileSpec("util.mm", False))
+
+ self.expect("expr error",
+ substrs=['(NSError *) $0 ='])
Index: packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name/Makefile
===================================================================
--- /dev/null
+++ packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name/Makefile
@@ -0,0 +1,5 @@
+LEVEL = ../../make
+OBJCXX_SOURCES := main.mm util.mm
+include $(LEVEL)/Makefile.rules
+
+LDFLAGS += -framework Foundation
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits