rust/src/libsyntax/ext/env.rs

36 lines
1.0 KiB
Rust
Raw Normal View History

/*
* The compiler code necessary to support the #env extension. Eventually this
* should all get sucked into either the compiler syntax extension plugin
* interface.
*/
import base::*;
export expand_syntax_ext;
fn expand_syntax_ext(cx: ext_ctxt, sp: codemap::span, arg: ast::mac_arg,
_body: ast::mac_body) -> @ast::expr {
let args = get_mac_args(cx, sp, arg, 1u, option::some(1u), "env");
// FIXME: if this was more thorough it would manufacture an
2012-04-19 17:20:11 -05:00
// option<str> rather than just an maybe-empty string. (Issue #2248)
2011-09-02 17:34:58 -05:00
let var = expr_to_str(cx, args[0], "#env requires a string");
alt os::getenv(var) {
option::none { ret make_new_str(cx, sp, ""); }
2011-09-02 17:34:58 -05:00
option::some(s) { ret make_new_str(cx, sp, s); }
}
}
2012-06-10 02:49:59 -05:00
fn make_new_str(cx: ext_ctxt, sp: codemap::span, +s: str) -> @ast::expr {
ret make_new_lit(cx, sp, ast::lit_str(@s));
}
//
// Local Variables:
// mode: rust
// fill-column: 78;
// indent-tabs-mode: nil
// c-basic-offset: 4
// buffer-file-coding-system: utf-8-unix
// End:
//