diff options
Diffstat (limited to 'third_party/nix/src/libexpr/value.cc')
-rw-r--r-- | third_party/nix/src/libexpr/value.cc | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/third_party/nix/src/libexpr/value.cc b/third_party/nix/src/libexpr/value.cc new file mode 100644 index 000000000000..93fe1874786a --- /dev/null +++ b/third_party/nix/src/libexpr/value.cc @@ -0,0 +1,121 @@ +#include "libexpr/value.hh" + +#include <glog/logging.h> + +namespace nix { + +Value::Value(const Value& copy) { *this = copy; } + +Value::Value(Value&& move) { *this = move; } + +Value& Value::operator=(const Value& copy) { + if (type != copy.type) { + memset(this, 0, sizeof(*this)); + } + type = copy.type; + switch (type) { + case tInt: + integer = copy.integer; + break; + case tBool: + boolean = copy.boolean; + break; + case tString: + string = copy.string; + break; + case tPath: + path = copy.path; + break; + case tNull: + /* no fields */ + break; + case tAttrs: + attrs = copy.attrs; + break; + case tList: + list = copy.list; + break; + case tThunk: + thunk = copy.thunk; + break; + case tApp: + app = copy.app; + break; + case tLambda: + lambda = copy.lambda; + break; + case tBlackhole: + /* no fields */ + break; + case tPrimOp: + primOp = copy.primOp; + break; + case tPrimOpApp: + primOpApp = copy.primOpApp; + break; + case _reserved1: + LOG(FATAL) << "attempted to assign a tExternal value"; + break; + case tFloat: + fpoint = copy.fpoint; + break; + } + return *this; +} + +Value& Value::operator=(Value&& move) { + if (type != move.type) { + memset(this, 0, sizeof(*this)); + } + type = move.type; + switch (type) { + case tInt: + integer = move.integer; + break; + case tBool: + boolean = move.boolean; + break; + case tString: + string = move.string; + break; + case tPath: + path = move.path; + break; + case tNull: + /* no fields */ + break; + case tAttrs: + attrs = move.attrs; + break; + case tList: + list = move.list; + break; + case tThunk: + thunk = move.thunk; + break; + case tApp: + app = move.app; + break; + case tLambda: + lambda = move.lambda; + break; + case tBlackhole: + /* no fields */ + break; + case tPrimOp: + primOp = move.primOp; + break; + case tPrimOpApp: + primOpApp = move.primOpApp; + break; + case _reserved1: + LOG(FATAL) << "attempted to assign a tExternal value"; + break; + case tFloat: + fpoint = move.fpoint; + break; + } + return *this; +} + +} // namespace nix |