Skip to content
  • Sean Callanan's avatar
    Implemented a major overhaul of the way variables are handled · 92adcac9
    Sean Callanan authored
    by LLDB.  Instead of being materialized into the input structure
    passed to the expression, variables are left in place and pointers
    to them are materialzied into the structure.  Variables not resident
    in memory (notably, registers) get temporary memory regions allocated
    for them.
    
    Persistent variables are the most complex part of this, because they
    are made in various ways and there are different expectations about
    their lifetime.  Persistent variables now have flags indicating their
    status and what the expectations for longevity are.  They can be
    marked as residing in target memory permanently -- this is the
    default for result variables from expressions entered on the command
    line and for explicitly declared persistent variables (but more on
    that below).  Other result variables have their memory freed.
    
    Some major improvements resulting from this include being able to
    properly take the address of variables, better and cleaner support
    for functions that return references, and cleaner C++ support in
    general.  One problem that remains is the problem of explicitly
    declared persistent variables; I have not yet implemented the code
    that makes references to them into indirect references, so currently
    materialization and dematerialization of these variables is broken.
    
    llvm-svn: 123371
    92adcac9
Loading