21 lines
663 B
OCaml
21 lines
663 B
OCaml
|
|
open Ppxlib
|
||
|
|
|
||
|
|
let expand ~ctxt env_var =
|
||
|
|
let loc = Expansion_context.Extension.extension_point_loc ctxt in
|
||
|
|
match Sys.getenv env_var with
|
||
|
|
| value -> Ast_builder.Default.estring ~loc value
|
||
|
|
| exception Not_found ->
|
||
|
|
let ext =
|
||
|
|
Location.error_extensionf ~loc "The environement variable %s is unbound"
|
||
|
|
env_var
|
||
|
|
in
|
||
|
|
Ast_builder.Default.pexp_extension ~loc ext
|
||
|
|
|
||
|
|
let my_extension =
|
||
|
|
Extension.V3.declare "get_env" Extension.Context.expression
|
||
|
|
Ast_pattern.(single_expr_payload (estring __))
|
||
|
|
expand
|
||
|
|
|
||
|
|
let rule = Ppxlib.Context_free.Rule.extension my_extension
|
||
|
|
let () = Driver.register_transformation ~rules:[ rule ] "get_env"
|