mirror of https://github.com/djcb/mu.git
mu-sexp: add some small conveniences
This commit is contained in:
parent
be2f91c0ad
commit
69a465d849
|
@ -61,14 +61,25 @@ struct Sexp {
|
||||||
* Make a node for a string/integer/symbol/list value
|
* Make a node for a string/integer/symbol/list value
|
||||||
*
|
*
|
||||||
* @param val some value
|
* @param val some value
|
||||||
|
* @param empty_is_nil turn empty string into a 'nil' symbol
|
||||||
*
|
*
|
||||||
* @return a node
|
* @return a node
|
||||||
*/
|
*/
|
||||||
static Sexp make_string(std::string&& val) { return Sexp{Type::String, std::move(val)}; }
|
static Sexp make_string(std::string&& val, bool empty_is_nil=false)
|
||||||
static Sexp make_string(const std::string& val)
|
|
||||||
{
|
{
|
||||||
return Sexp{Type::String, std::string(val)};
|
if (empty_is_nil && val.empty())
|
||||||
|
return make_symbol("nil");
|
||||||
|
else
|
||||||
|
return Sexp{Type::String, std::move(val)};
|
||||||
}
|
}
|
||||||
|
static Sexp make_string(const std::string& val, bool empty_is_nil=false)
|
||||||
|
{
|
||||||
|
if (empty_is_nil && val.empty())
|
||||||
|
return make_symbol("nil");
|
||||||
|
else
|
||||||
|
return Sexp{Type::String, std::string(val)};
|
||||||
|
}
|
||||||
|
|
||||||
static Sexp make_number(int val) { return Sexp{Type::Number, format("%d", val)}; }
|
static Sexp make_number(int val) { return Sexp{Type::Number, format("%d", val)}; }
|
||||||
static Sexp make_symbol(std::string&& val)
|
static Sexp make_symbol(std::string&& val)
|
||||||
{
|
{
|
||||||
|
@ -165,8 +176,8 @@ struct Sexp {
|
||||||
{
|
{
|
||||||
if (!is_prop_name(name))
|
if (!is_prop_name(name))
|
||||||
throw Error{Error::Code::InvalidArgument,
|
throw Error{Error::Code::InvalidArgument,
|
||||||
"invalid property name ('%s')",
|
"invalid property name ('%s')",
|
||||||
name.c_str()};
|
name.c_str()};
|
||||||
seq_.emplace_back(make_symbol(std::move(name)));
|
seq_.emplace_back(make_symbol(std::move(name)));
|
||||||
seq_.emplace_back(std::move(sexp));
|
seq_.emplace_back(std::move(sexp));
|
||||||
return *this;
|
return *this;
|
||||||
|
@ -344,9 +355,9 @@ struct Sexp {
|
||||||
|
|
||||||
const Type type_; /**< Type of node */
|
const Type type_; /**< Type of node */
|
||||||
const std::string value_; /**< String value of node (only for
|
const std::string value_; /**< String value of node (only for
|
||||||
* non-Type::Lst)*/
|
* non-Type::Lst)*/
|
||||||
const Seq seq_; /**< Children of node (only for
|
const Seq seq_; /**< Children of node (only for
|
||||||
* Type::Lst) */
|
* Type::Lst) */
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline std::ostream&
|
static inline std::ostream&
|
||||||
|
|
Loading…
Reference in New Issue