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 <m...@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@cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev


_______________________________________________
lldb-dev mailing list
lldb-dev@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to