Re: [Lldb-commits] [PATCH] D17856: Fix expression evaluation with operator new

2016-08-15 Thread Pavel Labath via lldb-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL278670: Fix expression evaluation with operator new 
(authored by labath).

Changed prior to commit:
  https://reviews.llvm.org/D17856?vs=56252=68036#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D17856

Files:
  lldb/trunk/include/lldb/Symbol/ClangASTContext.h
  
lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/global_operators/TestCppGlobalOperators.py
  lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/global_operators/main.cpp
  lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp
  lldb/trunk/source/Symbol/ClangASTContext.cpp

Index: lldb/trunk/source/Symbol/ClangASTContext.cpp
===
--- lldb/trunk/source/Symbol/ClangASTContext.cpp
+++ lldb/trunk/source/Symbol/ClangASTContext.cpp
@@ -131,6 +131,241 @@
 return *g_map_ptr;
 }
 
+static bool
+IsOperator(const char *name, clang::OverloadedOperatorKind _kind)
+{
+if (name == nullptr || name[0] == '\0')
+return false;
+
+#define OPERATOR_PREFIX "operator"
+#define OPERATOR_PREFIX_LENGTH (sizeof(OPERATOR_PREFIX) - 1)
+
+const char *post_op_name = nullptr;
+
+bool no_space = true;
+
+if (::strncmp(name, OPERATOR_PREFIX, OPERATOR_PREFIX_LENGTH))
+return false;
+
+post_op_name = name + OPERATOR_PREFIX_LENGTH;
+
+if (post_op_name[0] == ' ')
+{
+post_op_name++;
+no_space = false;
+}
+
+#undef OPERATOR_PREFIX
+#undef OPERATOR_PREFIX_LENGTH
+
+// This is an operator, set the overloaded operator kind to invalid
+// in case this is a conversion operator...
+op_kind = clang::NUM_OVERLOADED_OPERATORS;
+
+switch (post_op_name[0])
+{
+default:
+if (no_space)
+return false;
+break;
+case 'n':
+if (no_space)
+return false;
+if (strcmp(post_op_name, "new") == 0)
+op_kind = clang::OO_New;
+else if (strcmp(post_op_name, "new[]") == 0)
+op_kind = clang::OO_Array_New;
+break;
+
+case 'd':
+if (no_space)
+return false;
+if (strcmp(post_op_name, "delete") == 0)
+op_kind = clang::OO_Delete;
+else if (strcmp(post_op_name, "delete[]") == 0)
+op_kind = clang::OO_Array_Delete;
+break;
+
+case '+':
+if (post_op_name[1] == '\0')
+op_kind = clang::OO_Plus;
+else if (post_op_name[2] == '\0')
+{
+if (post_op_name[1] == '=')
+op_kind = clang::OO_PlusEqual;
+else if (post_op_name[1] == '+')
+op_kind = clang::OO_PlusPlus;
+}
+break;
+
+case '-':
+if (post_op_name[1] == '\0')
+op_kind = clang::OO_Minus;
+else if (post_op_name[2] == '\0')
+{
+switch (post_op_name[1])
+{
+case '=':
+op_kind = clang::OO_MinusEqual;
+break;
+case '-':
+op_kind = clang::OO_MinusMinus;
+break;
+case '>':
+op_kind = clang::OO_Arrow;
+break;
+}
+}
+else if (post_op_name[3] == '\0')
+{
+if (post_op_name[2] == '*')
+op_kind = clang::OO_ArrowStar;
+break;
+}
+break;
+
+case '*':
+if (post_op_name[1] == '\0')
+op_kind = clang::OO_Star;
+else if (post_op_name[1] == '=' && post_op_name[2] == '\0')
+op_kind = clang::OO_StarEqual;
+break;
+
+case '/':
+if (post_op_name[1] == '\0')
+op_kind = clang::OO_Slash;
+else if (post_op_name[1] == '=' && post_op_name[2] == '\0')
+op_kind = clang::OO_SlashEqual;
+break;
+
+case '%':
+if (post_op_name[1] == '\0')
+op_kind = clang::OO_Percent;
+else if (post_op_name[1] == '=' && post_op_name[2] == '\0')
+op_kind = clang::OO_PercentEqual;
+break;
+
+case '^':
+if (post_op_name[1] == '\0')
+op_kind = clang::OO_Caret;
+else if (post_op_name[1] == '=' && post_op_name[2] == '\0')
+op_kind = clang::OO_CaretEqual;
+break;
+
+case '&':
+if (post_op_name[1] == '\0')
+op_kind = clang::OO_Amp;
+else if (post_op_name[2] == '\0')
+{
+switch (post_op_name[1])
+{
+case '=':
+

Re: [Lldb-commits] [PATCH] D17856: Fix expression evaluation with operator new

2016-08-08 Thread Pavel Labath via lldb-commits
labath added a comment.

Sean, if you don't object, I am going to put this in next week.

pl


https://reviews.llvm.org/D17856



___
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


Re: [Lldb-commits] [PATCH] D17856: Fix expression evaluation with operator new

2016-07-12 Thread Pavel Labath via lldb-commits
labath requested a review of this revision.
labath added a comment.

Sean, could you take a quick look at this one as well?


http://reviews.llvm.org/D17856



___
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


Re: [Lldb-commits] [PATCH] D17856: Fix expression evaluation with operator new

2016-06-20 Thread Greg Clayton via lldb-commits
clayborg accepted this revision.
clayborg added a comment.
This revision is now accepted and ready to land.

I am OK if Sean is OK with this.


http://reviews.llvm.org/D17856



___
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


Re: [Lldb-commits] [PATCH] D17856: Fix expression evaluation with operator new

2016-06-06 Thread Pavel Labath via lldb-commits
labath added a comment.

Sean, could you find some time to look at this please?


http://reviews.llvm.org/D17856



___
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


Re: [Lldb-commits] [PATCH] D17856: Fix expression evaluation with operator new

2016-05-05 Thread Pavel Labath via lldb-commits
labath added a reviewer: clayborg.
labath added a comment.

This has been sitting in the queue for a long time. Greg, could you take a look?


http://reviews.llvm.org/D17856



___
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


Re: [Lldb-commits] [PATCH] D17856: Fix expression evaluation with operator new

2016-05-05 Thread Pavel Labath via lldb-commits
labath updated this revision to Diff 56252.
labath added a comment.

Rebase on ToT.


http://reviews.llvm.org/D17856

Files:
  include/lldb/Symbol/ClangASTContext.h
  
packages/Python/lldbsuite/test/lang/cpp/global_operators/TestCppGlobalOperators.py
  packages/Python/lldbsuite/test/lang/cpp/global_operators/main.cpp
  source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp
  source/Symbol/ClangASTContext.cpp

Index: source/Symbol/ClangASTContext.cpp
===
--- source/Symbol/ClangASTContext.cpp
+++ source/Symbol/ClangASTContext.cpp
@@ -130,6 +130,241 @@
 return *g_map_ptr;
 }
 
+static bool
+IsOperator(const char *name, clang::OverloadedOperatorKind _kind)
+{
+if (name == nullptr || name[0] == '\0')
+return false;
+
+#define OPERATOR_PREFIX "operator"
+#define OPERATOR_PREFIX_LENGTH (sizeof(OPERATOR_PREFIX) - 1)
+
+const char *post_op_name = nullptr;
+
+bool no_space = true;
+
+if (::strncmp(name, OPERATOR_PREFIX, OPERATOR_PREFIX_LENGTH))
+return false;
+
+post_op_name = name + OPERATOR_PREFIX_LENGTH;
+
+if (post_op_name[0] == ' ')
+{
+post_op_name++;
+no_space = false;
+}
+
+#undef OPERATOR_PREFIX
+#undef OPERATOR_PREFIX_LENGTH
+
+// This is an operator, set the overloaded operator kind to invalid
+// in case this is a conversion operator...
+op_kind = clang::NUM_OVERLOADED_OPERATORS;
+
+switch (post_op_name[0])
+{
+default:
+if (no_space)
+return false;
+break;
+case 'n':
+if (no_space)
+return false;
+if (strcmp(post_op_name, "new") == 0)
+op_kind = clang::OO_New;
+else if (strcmp(post_op_name, "new[]") == 0)
+op_kind = clang::OO_Array_New;
+break;
+
+case 'd':
+if (no_space)
+return false;
+if (strcmp(post_op_name, "delete") == 0)
+op_kind = clang::OO_Delete;
+else if (strcmp(post_op_name, "delete[]") == 0)
+op_kind = clang::OO_Array_Delete;
+break;
+
+case '+':
+if (post_op_name[1] == '\0')
+op_kind = clang::OO_Plus;
+else if (post_op_name[2] == '\0')
+{
+if (post_op_name[1] == '=')
+op_kind = clang::OO_PlusEqual;
+else if (post_op_name[1] == '+')
+op_kind = clang::OO_PlusPlus;
+}
+break;
+
+case '-':
+if (post_op_name[1] == '\0')
+op_kind = clang::OO_Minus;
+else if (post_op_name[2] == '\0')
+{
+switch (post_op_name[1])
+{
+case '=':
+op_kind = clang::OO_MinusEqual;
+break;
+case '-':
+op_kind = clang::OO_MinusMinus;
+break;
+case '>':
+op_kind = clang::OO_Arrow;
+break;
+}
+}
+else if (post_op_name[3] == '\0')
+{
+if (post_op_name[2] == '*')
+op_kind = clang::OO_ArrowStar;
+break;
+}
+break;
+
+case '*':
+if (post_op_name[1] == '\0')
+op_kind = clang::OO_Star;
+else if (post_op_name[1] == '=' && post_op_name[2] == '\0')
+op_kind = clang::OO_StarEqual;
+break;
+
+case '/':
+if (post_op_name[1] == '\0')
+op_kind = clang::OO_Slash;
+else if (post_op_name[1] == '=' && post_op_name[2] == '\0')
+op_kind = clang::OO_SlashEqual;
+break;
+
+case '%':
+if (post_op_name[1] == '\0')
+op_kind = clang::OO_Percent;
+else if (post_op_name[1] == '=' && post_op_name[2] == '\0')
+op_kind = clang::OO_PercentEqual;
+break;
+
+case '^':
+if (post_op_name[1] == '\0')
+op_kind = clang::OO_Caret;
+else if (post_op_name[1] == '=' && post_op_name[2] == '\0')
+op_kind = clang::OO_CaretEqual;
+break;
+
+case '&':
+if (post_op_name[1] == '\0')
+op_kind = clang::OO_Amp;
+else if (post_op_name[2] == '\0')
+{
+switch (post_op_name[1])
+{
+case '=':
+op_kind = clang::OO_AmpEqual;
+break;
+case '&':
+op_kind = clang::OO_AmpAmp;
+break;
+}
+}
+break;
+
+case '|':
+if 

Re: [Lldb-commits] [PATCH] D17856: Fix expression evaluation with operator new

2016-03-11 Thread Pavel Labath via lldb-commits
labath added a comment.

Any thoughts on this?


http://reviews.llvm.org/D17856



___
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits