Skip to content
  1. Aug 23, 2011
    • Sean Callanan's avatar
      Added support for persistent types to the · bccce813
      Sean Callanan authored
      expression parser.  You can use a persistent
      type like this:
      
      (lldb) expr struct $foo { int a; int b; };
      (lldb) struct $foo i; i.a = 2; i.b = 3; i
      ($foo) $0 = {
        (int) a = 2
        (int) b = 3
      }
      
      typedefs work similarly.
      
      This patch affects the following files:
      
      test/expression_command/persistent_types/*
        A test case for persistent types,
        in particular structs and typedefs.
      
      ClangForward.h
        Added TypeDecl, needed to declare some
        functions in ASTResultSynthesizer.h
      
      ClangPersistentVariables.[h,cpp]
        Added a list of persistent types to the
        persistent variable store.
      
      ASTResultSynthesizer.[h,cpp]
        Made the AST result synthesizer iterate
        across TypeDecls in the expression, and
        record any persistent types found.  Also
        made a minor documentation fix.
      
      ClangUserExpression.[h,cpp]
        Extended the user expression class to
        keep the state needed to report the
        persistent variable store for the target
        to the AST result synthesizers. 
      
        Also introduced a new error code for
        expressions that executed normally but
        did not return a result.
      
      CommandObjectExpression.cpp
        Improved output for expressions (like 
        declarations of new persistent types) that
        don't return a result.  This is no longer
        treated as an error.
      
      llvm-svn: 138383
      bccce813
  2. Mar 31, 2011
    • Jim Ingham's avatar
      Convert ValueObject to explicitly maintain the Execution Context in which they... · 6035b67d
      Jim Ingham authored
      Convert ValueObject to explicitly maintain the Execution Context in which they were created, and then use that when they update themselves.  That means all the ValueObject evaluate me type functions that used to require a Frame object now do not.  I didn't remove the SBValue API's that take this now useless frame, but I added ones that don't require the frame, and marked the SBFrame taking ones as deprecated.
      
      llvm-svn: 128593
      6035b67d
  3. Dec 20, 2010
  4. Dec 14, 2010
    • Greg Clayton's avatar
      Modified LLDB expressions to not have to JIT and run code just to see variable · 8b2fe6dc
      Greg Clayton authored
      values or persistent expression variables. Now if an expression consists of
      a value that is a child of a variable, or of a persistent variable only, we
      will create a value object for it and make a ValueObjectConstResult from it to
      freeze the value (for program variables only, not persistent variables) and
      avoid running JITed code. For everything else we still parse up and JIT code
      and run it in the inferior. 
      
      There was also a lot of clean up in the expression code. I made the 
      ClangExpressionVariables be stored in collections of shared pointers instead
      of in collections of objects. This will help stop a lot of copy constructors on
      these large objects and also cleans up the code considerably. The persistent
      clang expression variables were moved over to the Target to ensure they persist
      across process executions.
      
      Added the ability for lldb_private::Target objects to evaluate expressions.
      We want to evaluate expressions at the target level in case we aren't running
      yet, or we have just completed running. We still want to be able to access the
      persistent expression variables between runs, and also evaluate constant 
      expressions. 
      
      Added extra logging to the dynamic loader plug-in for MacOSX. ModuleList objects
      can now dump their contents with the UUID, arch and full paths being logged with
      appropriate prefix values.
      
      Thread hardened the Communication class a bit by making the connection auto_ptr
      member into a shared pointer member and then making a local copy of the shared
      pointer in each method that uses it to make sure another thread can't nuke the
      connection object while it is being used by another thread.
      
      Added a new file to the lldb/test/load_unload test that causes the test a.out file
      to link to the libd.dylib file all the time. This will allow us to test using
      the DYLD_LIBRARY_PATH environment variable after moving libd.dylib somewhere else.
      
      llvm-svn: 121745
      8b2fe6dc
  5. Oct 16, 2010
    • Greg Clayton's avatar
      Made many ConstString functions inlined in the header file. · 7b462cc1
      Greg Clayton authored
      Changed all of our synthesized "___clang" functions, types and variables
      that get used in expressions over to have a prefix of "$_lldb". Now when we
      do name lookups we can easily switch off of the first '$' character to know
      if we should look through only our internal (when first char is '$') stuff,
      or when we should look through program variables, functions and types.
      
      Converted all of the clang expression code over to using "const ConstString&" 
      values for names instead of "const char *" since there were many places that
      were converting the "const char *" names into ConstString names and them
      throwing them away. We now avoid making a lot of ConstString conversions and
      benefit from the quick comparisons in a few extra spots.
      
      Converted a lot of code from LLVM coding conventions into LLDB coding 
      conventions.
      
      llvm-svn: 116634
      7b462cc1
  6. Oct 05, 2010
    • Greg Clayton's avatar
      Added a new ValueObject type that will be used to freeze dry expression · 1d3afba3
      Greg Clayton authored
      results. The clang opaque type for the expression result will be added to the
      Target's ASTContext, and the bytes will be stored in a DataBuffer inside
      the new object. The class is named: ValueObjectConstResult
      
      Now after an expression is evaluated, we can get a ValueObjectSP back that
      contains a ValueObjectConstResult object.
      
      Relocated the value object dumping code into a static function within
      the ValueObject class instead of being in the CommandObjectFrame.cpp file
      which is what contained the code to dump variables ("frame variables").
      
      llvm-svn: 115578
      1d3afba3
  7. Aug 20, 2010
    • Sean Callanan's avatar
      First step of refactoring variable handling in the · d0ef0eff
      Sean Callanan authored
      expression parser.  There shouldn't be four separate
      classes encapsulating a variable.
      
      ClangExpressionVariable is now meant to be the
      container for all variable information.  It has
      several optional components that hold data for
      different subsystems.
      
      ClangPersistentVariable has been removed; we now
      use ClangExpressionVariable instead.
      
      llvm-svn: 111600
      d0ef0eff
  8. Aug 12, 2010
    • Sean Callanan's avatar
      Added automatically generated result variables for each · d1e5b439
      Sean Callanan authored
      expression.  It is now possible to do things like this:
      
      (lldb) expr int $i = 5; $i + 1
      $0 = (int) 6
      (lldb) expr $i + 3
      $1 = (int) 8
      (lldb) expr $1 + $0
      $2 = (int) 14
      
      As a bonus, this allowed us to move printing of
      expression results into the ClangPersistentVariable
      class.  This code needs a bit of refactoring -- in
      particular, ClangExpressionDeclMap has eaten one too
      many bacteria and needs to undergo mitosis -- but the
      infrastructure appears to be holding up nicely.
      
      llvm-svn: 110896
      d1e5b439
  9. Aug 11, 2010
    • Sean Callanan's avatar
      Added support for persistent variables to the · 2235f32b
      Sean Callanan authored
      expression parser.  It is now possible to type:
      
      (lldb) expr int $i = 5; $i + 1
      (int) 6
      (lldb) expr $i + 2
      (int) 7
      
      The skeleton for automatic result variables is
      also implemented.  The changes affect:
      
      - the process, which now contains a 
        ClangPersistentVariables object that holds
        persistent variables associated with it
      - the expression parser, which now uses
        the persistent variables during variable
        lookup
      - TaggedASTType, where I loaded some commonly
        used tags into a header so that they are
        interchangeable between different clients of
        the class
      
      llvm-svn: 110777
      2235f32b
Loading