blob: b294f84fcff8d57c19e09e5a8814d6b6da8799d7 [file] [log] [blame]
Kate Stoneb9c1b512016-09-06 20:57:50 +00001//===-- OCamlLanguage.cpp ----------------------------------------*- C++
2//-*-===//
Tamas Berghammer00adc412016-08-02 11:15:55 +00003//
4// The LLVM Compiler Infrastructure
5//
6// This file is distributed under the University of Illinois Open Source
7// License. See LICENSE.TXT for details.
8//
9//===----------------------------------------------------------------------===//
10
11// C Includes
12#include <string.h>
13// C++ Includes
14#include <functional>
15#include <mutex>
16
17// Other libraries and framework includes
18#include "llvm/ADT/StringRef.h"
19
20// Project includes
21#include "OCamlLanguage.h"
Tamas Berghammer00adc412016-08-02 11:15:55 +000022#include "lldb/Core/PluginManager.h"
23#include "lldb/DataFormatters/DataVisualization.h"
24#include "lldb/DataFormatters/FormattersHelpers.h"
25#include "lldb/Symbol/OCamlASTContext.h"
Zachary Turnerbf9a7732017-02-02 21:39:50 +000026#include "lldb/Utility/ConstString.h"
Tamas Berghammer00adc412016-08-02 11:15:55 +000027
28using namespace lldb;
29using namespace lldb_private;
30
Raphael Isemann566afa02018-08-02 00:30:15 +000031bool OCamlLanguage::IsSourceFile(llvm::StringRef file_path) const {
32 const auto suffixes = {".ml", ".mli"};
33 for (auto suffix : suffixes) {
34 if (file_path.endswith_lower(suffix))
35 return true;
36 }
37 return false;
38}
39
Kate Stoneb9c1b512016-09-06 20:57:50 +000040void OCamlLanguage::Initialize() {
41 PluginManager::RegisterPlugin(GetPluginNameStatic(), "OCaml Language",
42 CreateInstance);
Tamas Berghammer00adc412016-08-02 11:15:55 +000043}
44
Kate Stoneb9c1b512016-09-06 20:57:50 +000045void OCamlLanguage::Terminate() {
46 PluginManager::UnregisterPlugin(CreateInstance);
Tamas Berghammer00adc412016-08-02 11:15:55 +000047}
48
Kate Stoneb9c1b512016-09-06 20:57:50 +000049lldb_private::ConstString OCamlLanguage::GetPluginNameStatic() {
50 static ConstString g_name("OCaml");
51 return g_name;
Tamas Berghammer00adc412016-08-02 11:15:55 +000052}
53
Kate Stoneb9c1b512016-09-06 20:57:50 +000054lldb_private::ConstString OCamlLanguage::GetPluginName() {
55 return GetPluginNameStatic();
Tamas Berghammer00adc412016-08-02 11:15:55 +000056}
57
Kate Stoneb9c1b512016-09-06 20:57:50 +000058uint32_t OCamlLanguage::GetPluginVersion() { return 1; }
59
60Language *OCamlLanguage::CreateInstance(lldb::LanguageType language) {
61 if (language == eLanguageTypeOCaml)
62 return new OCamlLanguage();
63 return nullptr;
Tamas Berghammer00adc412016-08-02 11:15:55 +000064}
65
Kate Stoneb9c1b512016-09-06 20:57:50 +000066bool OCamlLanguage::IsNilReference(ValueObject &valobj) {
67 if (!valobj.GetCompilerType().IsReferenceType())
68 return false;
69
70 // If we failed to read the value then it is not a nil reference.
71 return valobj.GetValueAsUnsigned(UINT64_MAX) == 0;
Tamas Berghammer00adc412016-08-02 11:15:55 +000072}