aboutsummaryrefslogtreecommitdiff
path: root/build/variable.ixx
diff options
context:
space:
mode:
Diffstat (limited to 'build/variable.ixx')
-rw-r--r--build/variable.ixx46
1 files changed, 46 insertions, 0 deletions
diff --git a/build/variable.ixx b/build/variable.ixx
new file mode 100644
index 0000000..85fdd50
--- /dev/null
+++ b/build/variable.ixx
@@ -0,0 +1,46 @@
+// file : build/variable.ixx -*- C++ -*-
+// copyright : Copyright (c) 2014-2015 Code Synthesis Tools CC
+// license : MIT; see accompanying LICENSE file
+
+namespace build
+{
+ inline const value_proxy& value_proxy::
+ operator= (value_ptr v) const
+ {
+ assert (v == nullptr || &v->scope == s);
+ *p = std::move (v);
+ return *this;
+ }
+
+ inline const value_proxy& value_proxy::
+ operator= (const value_proxy& v) const
+ {
+ if (this != &v)
+ {
+ if (v)
+ *p = v.as<const value&> ().clone (*s);
+ else
+ p->reset ();
+ }
+
+ return *this;
+ }
+
+ inline const value_proxy& value_proxy::
+ operator= (std::string v) const
+ {
+ // In most cases this is used to initialize a new variable, so
+ // don't bother trying to optimize for the case where p is not
+ // NULL.
+ //
+ p->reset (new list_value (*s, std::move (v)));
+ return *this;
+ }
+
+ inline const value_proxy& value_proxy::
+ operator= (path v) const
+ {
+ p->reset (new list_value (*s, std::move (v)));
+ return *this;
+ }
+}