[lldb-dev] invalid use of 'this' outside of a non-static member function

jingham at apple.com jingham at apple.com
Wed Jan 7 14:45:31 PST 2015


The expression parser uses C++ features (specifically references) to implement capturing values from expressions.  It rewrites the expressions before compiling them to do this.  So for now we need to compile our expressions in C++ mode in order for them to work at all...  

It is certainly possible to rework how the expression parser does this bit of business so we can support a straight C parsing mode, either by having a modified C mode in clang that allows references or by some other tricks in the parser itself.  But this hasn't caused enough problems to warrant digging into this up to now.

Jim


> On Jan 7, 2015, at 11:48 AM, mobi phil <mobi at mobiphil.com> wrote:
> 
> All expressions are compiled in C++ mode and thus the restriction.
> 
> There are a few solutions:
> 1 - make expressions match the current language of the current frame. So if your function was a C function, you will be restricted from using C++ in your expression
> 2 - rename your "this" and benefit from the C++ abilities of the expression parser
> 
> I personally really like the ability to use "auto" and all of the C++11 constructs in any expression:
> 
> (lldb) expr for (auto x = 0; x < my_renamed_this; ++x) { ... }
> 
> So I see the problem with C expressions, but I would rather not limit you from being able to access your C++ code from a C function by limiting the language based on where you are stopped.
> 
> Thanks, but was not ware how do you switch the current language of the current frame
> that is fine, though at the point where the keyword this is tested, a simple ( and frame.language != "C"  ) could be implemented, or?
> 
> 
>  
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev





More information about the lldb-dev mailing list