summaryrefslogtreecommitdiff
path: root/src/expand/env.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/expand/env.cpp')
-rw-r--r--src/expand/env.cpp20
1 files changed, 8 insertions, 12 deletions
diff --git a/src/expand/env.cpp b/src/expand/env.cpp
index f4577ef1..825c895a 100644
--- a/src/expand/env.cpp
+++ b/src/expand/env.cpp
@@ -34,48 +34,44 @@ namespace {
class CExpanderEnv:
public ExpandProcMacro
{
- ::std::unique_ptr<TokenStream> expand(const Span& sp, const AST::Crate& crate, const ::std::string& ident, const TokenTree& tt, AST::Module& mod) override
+ ::std::unique_ptr<TokenStream> expand(const Span& sp, const AST::Crate& crate, const TokenTree& tt, AST::Module& mod) override
{
- if( ident != "" )
- ERROR(sp, E0000, "env! doesn't take an ident");
::std::string varname = get_string(sp, crate, mod, tt);
const char* var_val_cstr = getenv(varname.c_str());
if( !var_val_cstr ) {
ERROR(sp, E0000, "Environment variable '" << varname << "' not defined");
}
- return box$( TTStreamO(sp, TokenTree(Token(TOK_STRING, var_val_cstr))) );
+ return box$( TTStreamO(sp, TokenTree(Token(TOK_STRING, ::std::string(var_val_cstr)))) );
}
};
class CExpanderOptionEnv:
public ExpandProcMacro
{
- ::std::unique_ptr<TokenStream> expand(const Span& sp, const AST::Crate& crate, const ::std::string& ident, const TokenTree& tt, AST::Module& mod) override
+ ::std::unique_ptr<TokenStream> expand(const Span& sp, const AST::Crate& crate, const TokenTree& tt, AST::Module& mod) override
{
- if( ident != "" )
- ERROR(sp, E0000, "option_env! doesn't take an ident");
::std::string varname = get_string(sp, crate, mod, tt);
const char* var_val_cstr = getenv(varname.c_str());
if( !var_val_cstr ) {
::std::vector< TokenTree> rv;
rv.reserve(7);
- rv.push_back( Token(TOK_IDENT, "None") );
+ rv.push_back( Token(TOK_IDENT, RcString::new_interned("None")) );
rv.push_back( Token(TOK_DOUBLE_COLON) );
rv.push_back( Token(TOK_LT) );
rv.push_back( Token(TOK_AMP) );
- rv.push_back( Token(TOK_LIFETIME, "static") );
- rv.push_back( Token(TOK_IDENT, "str") );
+ rv.push_back( Token(TOK_LIFETIME, RcString::new_interned("static")) );
+ rv.push_back( Token(TOK_IDENT, RcString::new_interned("str")) );
rv.push_back( Token(TOK_GT) );
return box$( TTStreamO(sp, TokenTree( {}, mv$(rv) )) );
}
else {
::std::vector< TokenTree> rv;
rv.reserve(4);
- rv.push_back( Token(TOK_IDENT, "Some") );
+ rv.push_back( Token(TOK_IDENT, RcString::new_interned("Some")) );
rv.push_back( Token(TOK_PAREN_OPEN) );
- rv.push_back( Token(TOK_STRING, var_val_cstr) );
+ rv.push_back( Token(TOK_STRING, ::std::string(var_val_cstr)) );
rv.push_back( Token(TOK_PAREN_CLOSE) );
return box$( TTStreamO(sp, TokenTree( {}, mv$(rv) )) );
}