mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-15 10:46:15 +02:00
Merge pull request #11550 from DeterminateSystems/traceable-allocator-alias
Alias traceable_allocator to std::allocator when building without GC
This commit is contained in:
commit
c5c68558b5
12 changed files with 31 additions and 98 deletions
|
@ -127,14 +127,9 @@ ref<EvalState> EvalCommand::getEvalState()
|
||||||
{
|
{
|
||||||
if (!evalState) {
|
if (!evalState) {
|
||||||
evalState =
|
evalState =
|
||||||
#if HAVE_BOEHMGC
|
|
||||||
std::allocate_shared<EvalState>(
|
std::allocate_shared<EvalState>(
|
||||||
traceable_allocator<EvalState>(),
|
traceable_allocator<EvalState>(),
|
||||||
#else
|
lookupPath, getEvalStore(), fetchSettings, evalSettings, getStore());
|
||||||
std::make_shared<EvalState>(
|
|
||||||
#endif
|
|
||||||
lookupPath, getEvalStore(), fetchSettings, evalSettings, getStore())
|
|
||||||
;
|
|
||||||
|
|
||||||
evalState->repair = repair;
|
evalState->repair = repair;
|
||||||
|
|
||||||
|
|
|
@ -29,11 +29,6 @@
|
||||||
#include "ref.hh"
|
#include "ref.hh"
|
||||||
#include "value.hh"
|
#include "value.hh"
|
||||||
|
|
||||||
#if HAVE_BOEHMGC
|
|
||||||
#define GC_INCLUDE_NEW
|
|
||||||
#include <gc/gc_cpp.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "strings.hh"
|
#include "strings.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
@ -62,9 +57,7 @@ enum class ProcessLineResult {
|
||||||
struct NixRepl
|
struct NixRepl
|
||||||
: AbstractNixRepl
|
: AbstractNixRepl
|
||||||
, detail::ReplCompleterMixin
|
, detail::ReplCompleterMixin
|
||||||
#if HAVE_BOEHMGC
|
|
||||||
, gc
|
, gc
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
size_t debugTraceIndex;
|
size_t debugTraceIndex;
|
||||||
|
|
||||||
|
|
|
@ -14,12 +14,6 @@
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
#if HAVE_BOEHMGC
|
|
||||||
# include "gc/gc.h"
|
|
||||||
# define GC_INCLUDE_NEW 1
|
|
||||||
# include "gc_cpp.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void nix_set_string_return(nix_string_return * str, const char * c)
|
void nix_set_string_return(nix_string_return * str, const char * c)
|
||||||
{
|
{
|
||||||
str->str = c;
|
str->str = c;
|
||||||
|
|
|
@ -14,12 +14,6 @@
|
||||||
#include "nix_api_value.h"
|
#include "nix_api_value.h"
|
||||||
#include "value/context.hh"
|
#include "value/context.hh"
|
||||||
|
|
||||||
#if HAVE_BOEHMGC
|
|
||||||
# include "gc/gc.h"
|
|
||||||
# define GC_INCLUDE_NEW 1
|
|
||||||
# include "gc_cpp.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Internal helper functions to check [in] and [out] `Value *` parameters
|
// Internal helper functions to check [in] and [out] `Value *` parameters
|
||||||
static const nix::Value & check_value_not_null(const nix_value * value)
|
static const nix::Value & check_value_not_null(const nix_value * value)
|
||||||
{
|
{
|
||||||
|
|
|
@ -3,6 +3,32 @@
|
||||||
|
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
|
|
||||||
|
#if HAVE_BOEHMGC
|
||||||
|
|
||||||
|
# define GC_INCLUDE_NEW
|
||||||
|
|
||||||
|
# include <gc/gc.h>
|
||||||
|
# include <gc/gc_cpp.h>
|
||||||
|
# include <gc/gc_allocator.h>
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* Some dummy aliases for Boehm GC definitions to reduce the number of
|
||||||
|
#ifdefs. */
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
using traceable_allocator = std::allocator<T>;
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
using gc_allocator = std::allocator<T>;
|
||||||
|
|
||||||
|
# define GC_MALLOC_ATOMIC std::malloc
|
||||||
|
# define GC_STRDUP std::strdup
|
||||||
|
struct gc
|
||||||
|
{};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#include "eval.hh"
|
#include "eval.hh"
|
||||||
#include "eval-gc.hh"
|
|
||||||
#include "eval-settings.hh"
|
#include "eval-settings.hh"
|
||||||
#include "primops.hh"
|
#include "primops.hh"
|
||||||
#include "print-options.hh"
|
#include "print-options.hh"
|
||||||
|
@ -39,16 +38,6 @@
|
||||||
# include <sys/resource.h>
|
# include <sys/resource.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HAVE_BOEHMGC
|
|
||||||
|
|
||||||
# define GC_INCLUDE_NEW
|
|
||||||
|
|
||||||
# include <gc/gc.h>
|
|
||||||
# include <gc/gc_cpp.h>
|
|
||||||
# include <gc/gc_allocator.h>
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "strings-inline.hh"
|
#include "strings-inline.hh"
|
||||||
|
|
||||||
using json = nlohmann::json;
|
using json = nlohmann::json;
|
||||||
|
@ -58,11 +47,7 @@ namespace nix {
|
||||||
static char * allocString(size_t size)
|
static char * allocString(size_t size)
|
||||||
{
|
{
|
||||||
char * t;
|
char * t;
|
||||||
#if HAVE_BOEHMGC
|
|
||||||
t = (char *) GC_MALLOC_ATOMIC(size);
|
t = (char *) GC_MALLOC_ATOMIC(size);
|
||||||
#else
|
|
||||||
t = (char *) malloc(size);
|
|
||||||
#endif
|
|
||||||
if (!t) throw std::bad_alloc();
|
if (!t) throw std::bad_alloc();
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
@ -71,11 +56,7 @@ static char * allocString(size_t size)
|
||||||
static char * dupString(const char * s)
|
static char * dupString(const char * s)
|
||||||
{
|
{
|
||||||
char * t;
|
char * t;
|
||||||
#if HAVE_BOEHMGC
|
|
||||||
t = GC_STRDUP(s);
|
t = GC_STRDUP(s);
|
||||||
#else
|
|
||||||
t = strdup(s);
|
|
||||||
#endif
|
|
||||||
if (!t) throw std::bad_alloc();
|
if (!t) throw std::bad_alloc();
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
@ -99,11 +80,7 @@ static const char * makeImmutableString(std::string_view s)
|
||||||
|
|
||||||
RootValue allocRootValue(Value * v)
|
RootValue allocRootValue(Value * v)
|
||||||
{
|
{
|
||||||
#if HAVE_BOEHMGC
|
|
||||||
return std::allocate_shared<Value *>(traceable_allocator<Value *>(), v);
|
return std::allocate_shared<Value *>(traceable_allocator<Value *>(), v);
|
||||||
#else
|
|
||||||
return std::make_shared<Value *>(v);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pretty print types for assertion errors
|
// Pretty print types for assertion errors
|
||||||
|
|
|
@ -139,11 +139,7 @@ struct Constant
|
||||||
bool impureOnly = false;
|
bool impureOnly = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
#if HAVE_BOEHMGC
|
typedef std::map<std::string, Value *, std::less<std::string>, traceable_allocator<std::pair<const std::string, Value *> > > ValMap;
|
||||||
typedef std::map<std::string, Value *, std::less<std::string>, traceable_allocator<std::pair<const std::string, Value *> > > ValMap;
|
|
||||||
#else
|
|
||||||
typedef std::map<std::string, Value *> ValMap;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef std::unordered_map<PosIdx, DocComment> DocCommentMap;
|
typedef std::unordered_map<PosIdx, DocComment> DocCommentMap;
|
||||||
|
|
||||||
|
@ -329,21 +325,13 @@ private:
|
||||||
/**
|
/**
|
||||||
* A cache from path names to parse trees.
|
* A cache from path names to parse trees.
|
||||||
*/
|
*/
|
||||||
#if HAVE_BOEHMGC
|
|
||||||
typedef std::unordered_map<SourcePath, Expr *, std::hash<SourcePath>, std::equal_to<SourcePath>, traceable_allocator<std::pair<const SourcePath, Expr *>>> FileParseCache;
|
typedef std::unordered_map<SourcePath, Expr *, std::hash<SourcePath>, std::equal_to<SourcePath>, traceable_allocator<std::pair<const SourcePath, Expr *>>> FileParseCache;
|
||||||
#else
|
|
||||||
typedef std::unordered_map<SourcePath, Expr *> FileParseCache;
|
|
||||||
#endif
|
|
||||||
FileParseCache fileParseCache;
|
FileParseCache fileParseCache;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A cache from path names to values.
|
* A cache from path names to values.
|
||||||
*/
|
*/
|
||||||
#if HAVE_BOEHMGC
|
|
||||||
typedef std::unordered_map<SourcePath, Value, std::hash<SourcePath>, std::equal_to<SourcePath>, traceable_allocator<std::pair<const SourcePath, Value>>> FileEvalCache;
|
typedef std::unordered_map<SourcePath, Value, std::hash<SourcePath>, std::equal_to<SourcePath>, traceable_allocator<std::pair<const SourcePath, Value>>> FileEvalCache;
|
||||||
#else
|
|
||||||
typedef std::unordered_map<SourcePath, Value> FileEvalCache;
|
|
||||||
#endif
|
|
||||||
FileEvalCache fileEvalCache;
|
FileEvalCache fileEvalCache;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -2,28 +2,15 @@
|
||||||
|
|
||||||
#include <boost/container/small_vector.hpp>
|
#include <boost/container/small_vector.hpp>
|
||||||
|
|
||||||
#if HAVE_BOEHMGC
|
#include "value.hh"
|
||||||
|
|
||||||
#include <gc/gc.h>
|
|
||||||
#include <gc/gc_cpp.h>
|
|
||||||
#include <gc/gc_allocator.h>
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
struct Value;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A GC compatible vector that may used a reserved portion of `nItems` on the stack instead of allocating on the heap.
|
* A GC compatible vector that may used a reserved portion of `nItems` on the stack instead of allocating on the heap.
|
||||||
*/
|
*/
|
||||||
#if HAVE_BOEHMGC
|
|
||||||
template <typename T, size_t nItems>
|
template <typename T, size_t nItems>
|
||||||
using SmallVector = boost::container::small_vector<T, nItems, traceable_allocator<T>>;
|
using SmallVector = boost::container::small_vector<T, nItems, traceable_allocator<T>>;
|
||||||
#else
|
|
||||||
template <typename T, size_t nItems>
|
|
||||||
using SmallVector = boost::container::small_vector<T, nItems>;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A vector of value pointers. See `SmallVector`.
|
* A vector of value pointers. See `SmallVector`.
|
||||||
|
|
|
@ -83,11 +83,7 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#if HAVE_BOEHMGC
|
|
||||||
typedef std::list<PackageInfo, traceable_allocator<PackageInfo>> PackageInfos;
|
typedef std::list<PackageInfo, traceable_allocator<PackageInfo>> PackageInfos;
|
||||||
#else
|
|
||||||
typedef std::list<PackageInfo> PackageInfos;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -631,11 +631,7 @@ struct CompareValues
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#if HAVE_BOEHMGC
|
|
||||||
typedef std::list<Value *, gc_allocator<Value *>> ValueList;
|
typedef std::list<Value *, gc_allocator<Value *>> ValueList;
|
||||||
#else
|
|
||||||
typedef std::list<Value *> ValueList;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
static Bindings::const_iterator getAttr(
|
static Bindings::const_iterator getAttr(
|
||||||
|
@ -3136,11 +3132,7 @@ static void prim_zipAttrsWith(EvalState & state, const PosIdx pos, Value * * arg
|
||||||
std::optional<ListBuilder> list;
|
std::optional<ListBuilder> list;
|
||||||
};
|
};
|
||||||
|
|
||||||
#if HAVE_BOEHMGC
|
|
||||||
std::map<Symbol, Item, std::less<Symbol>, traceable_allocator<std::pair<const Symbol, Item>>> attrsSeen;
|
std::map<Symbol, Item, std::less<Symbol>, traceable_allocator<std::pair<const Symbol, Item>>> attrsSeen;
|
||||||
#else
|
|
||||||
std::map<Symbol, Item> attrsSeen;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
state.forceFunction(*args[0], pos, "while evaluating the first argument passed to builtins.zipAttrsWith");
|
state.forceFunction(*args[0], pos, "while evaluating the first argument passed to builtins.zipAttrsWith");
|
||||||
state.forceList(*args[1], pos, "while evaluating the second argument passed to builtins.zipAttrsWith");
|
state.forceList(*args[1], pos, "while evaluating the second argument passed to builtins.zipAttrsWith");
|
||||||
|
|
|
@ -4,15 +4,13 @@
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <span>
|
#include <span>
|
||||||
|
|
||||||
|
#include "eval-gc.hh"
|
||||||
#include "symbol-table.hh"
|
#include "symbol-table.hh"
|
||||||
#include "value/context.hh"
|
#include "value/context.hh"
|
||||||
#include "source-path.hh"
|
#include "source-path.hh"
|
||||||
#include "print-options.hh"
|
#include "print-options.hh"
|
||||||
#include "checked-arithmetic.hh"
|
#include "checked-arithmetic.hh"
|
||||||
|
|
||||||
#if HAVE_BOEHMGC
|
|
||||||
#include <gc/gc_allocator.h>
|
|
||||||
#endif
|
|
||||||
#include <nlohmann/json_fwd.hpp>
|
#include <nlohmann/json_fwd.hpp>
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
@ -498,15 +496,9 @@ void Value::mkBlackhole()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if HAVE_BOEHMGC
|
|
||||||
typedef std::vector<Value *, traceable_allocator<Value *>> ValueVector;
|
typedef std::vector<Value *, traceable_allocator<Value *>> ValueVector;
|
||||||
typedef std::unordered_map<Symbol, Value *, std::hash<Symbol>, std::equal_to<Symbol>, traceable_allocator<std::pair<const Symbol, Value *>>> ValueMap;
|
typedef std::unordered_map<Symbol, Value *, std::hash<Symbol>, std::equal_to<Symbol>, traceable_allocator<std::pair<const Symbol, Value *>>> ValueMap;
|
||||||
typedef std::map<Symbol, ValueVector, std::less<Symbol>, traceable_allocator<std::pair<const Symbol, ValueVector>>> ValueVectorMap;
|
typedef std::map<Symbol, ValueVector, std::less<Symbol>, traceable_allocator<std::pair<const Symbol, ValueVector>>> ValueVectorMap;
|
||||||
#else
|
|
||||||
typedef std::vector<Value *> ValueVector;
|
|
||||||
typedef std::unordered_map<Symbol, Value *> ValueMap;
|
|
||||||
typedef std::map<Symbol, ValueVector> ValueVectorMap;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
#include "current-process.hh"
|
#include "current-process.hh"
|
||||||
#include "command.hh"
|
#include "command.hh"
|
||||||
#include "common-args.hh"
|
#include "common-args.hh"
|
||||||
#include "eval-gc.hh"
|
|
||||||
#include "eval.hh"
|
#include "eval.hh"
|
||||||
#include "eval-settings.hh"
|
#include "eval-settings.hh"
|
||||||
#include "globals.hh"
|
#include "globals.hh"
|
||||||
|
|
Loading…
Reference in a new issue