diff options
Diffstat (limited to 'build/variable.ixx')
-rw-r--r-- | build/variable.ixx | 46 |
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; + } +} |