blob: beaa1d69da34a3d7efc86c850695df0f1c520ce9 [file] [log] [blame]
Sean Callanan2235f322010-08-11 03:57:18 +00001//===-- ClangPersistentVariables.cpp ----------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
Sean Callanan4dbb2712015-09-25 20:35:58 +000010#include "ClangPersistentVariables.h"
11
Sean Callanand1e5b432010-08-12 01:56:52 +000012#include "lldb/Core/DataExtractor.h"
Sean Callanan2235f322010-08-11 03:57:18 +000013#include "lldb/Core/Log.h"
14#include "lldb/Core/StreamString.h"
Sean Callanand1e5b432010-08-12 01:56:52 +000015#include "lldb/Core/Value.h"
Sean Callanan2235f322010-08-11 03:57:18 +000016
Sean Callananbccce812011-08-23 21:20:51 +000017#include "llvm/ADT/StringMap.h"
18
Greg Clayton8b2fe6d2010-12-14 02:59:59 +000019using namespace lldb;
Sean Callanan2235f322010-08-11 03:57:18 +000020using namespace lldb_private;
Sean Callanand1e5b432010-08-12 01:56:52 +000021
Sean Callanan2235f322010-08-11 03:57:18 +000022ClangPersistentVariables::ClangPersistentVariables () :
Sean Callananbc8ac342015-09-04 20:49:51 +000023 ExpressionVariableList(),
Greg Clayton8b2fe6d2010-12-14 02:59:59 +000024 m_next_persistent_variable_id (0)
Sean Callanan2235f322010-08-11 03:57:18 +000025{
Sean Callanan2235f322010-08-11 03:57:18 +000026}
Sean Callanand1e5b432010-08-12 01:56:52 +000027
Sean Callananbc8ac342015-09-04 20:49:51 +000028ExpressionVariableSP
Greg Clayton8b2fe6d2010-12-14 02:59:59 +000029ClangPersistentVariables::CreatePersistentVariable (const lldb::ValueObjectSP &valobj_sp)
Sean Callanand1e5b432010-08-12 01:56:52 +000030{
Sean Callananbc8ac342015-09-04 20:49:51 +000031 return ClangExpressionVariable::CreateVariableInList(*this, valobj_sp)->shared_from_this();
Sean Callanand1e5b432010-08-12 01:56:52 +000032}
Sean Callanand0ef0ef2010-08-20 01:02:30 +000033
Sean Callananbc8ac342015-09-04 20:49:51 +000034ClangExpressionVariable *
Jim Ingham6035b672011-03-31 00:19:25 +000035ClangPersistentVariables::CreatePersistentVariable (ExecutionContextScope *exe_scope,
36 const ConstString &name,
37 const TypeFromUser& user_type,
38 lldb::ByteOrder byte_order,
39 uint32_t addr_byte_size)
Sean Callanand0ef0ef2010-08-20 01:02:30 +000040{
Sean Callananbc8ac342015-09-04 20:49:51 +000041 return ClangExpressionVariable::CreateVariableInList(*this, exe_scope, name, user_type, byte_order, addr_byte_size);
Greg Clayton8b2fe6d2010-12-14 02:59:59 +000042}
43
Sean Callanan5b26f272012-02-04 08:49:35 +000044void
Sean Callananbc8ac342015-09-04 20:49:51 +000045ClangPersistentVariables::RemovePersistentVariable (lldb::ExpressionVariableSP variable)
Sean Callanan5b26f272012-02-04 08:49:35 +000046{
47 RemoveVariable(variable);
48
49 const char *name = variable->GetName().AsCString();
50
51 if (*name != '$')
52 return;
53 name++;
54
55 if (strtoul(name, NULL, 0) == m_next_persistent_variable_id - 1)
56 m_next_persistent_variable_id--;
57}
Greg Clayton8b2fe6d2010-12-14 02:59:59 +000058
59ConstString
60ClangPersistentVariables::GetNextPersistentVariableName ()
61{
62 char name_cstr[256];
63 ::snprintf (name_cstr, sizeof(name_cstr), "$%u", m_next_persistent_variable_id++);
64 ConstString name(name_cstr);
65 return name;
66}
Sean Callananbccce812011-08-23 21:20:51 +000067
68void
69ClangPersistentVariables::RegisterPersistentType (const ConstString &name,
70 clang::TypeDecl *type_decl)
71{
72 m_persistent_types.insert(std::pair<const char*, clang::TypeDecl*>(name.GetCString(), type_decl));
73}
74
75clang::TypeDecl *
76ClangPersistentVariables::GetPersistentType (const ConstString &name)
77{
78 PersistentTypeMap::const_iterator i = m_persistent_types.find(name.GetCString());
79
80 if (i == m_persistent_types.end())
81 return NULL;
82 else
83 return i->second;
84}