pub fn expr_to_string_lossy(mut ctx: Context<'_>, expr: &ast::Expr) -> String {
    ctx.dump_lambdas = true;

    let env = ExprEnv { codegen_env: None };
    let mut escaped_src = Vec::new();
    print_expr(&ctx, &mut escaped_src, &env, expr).expect("Printing failed");

    let bs = escaper::unescape_double(unsafe { std::str::from_utf8_unchecked(&escaped_src) })
        .expect("Unescaping failed");
    let s = String::from_utf8_lossy(&bs);
    s.to_string()
}
/// Convert an `Expr` to a `String` of the equivalent source code.
///
/// This is a debugging tool abusing a printer written for bytecode
/// emission. It does not support all Hack expressions, and panics
/// on unsupported syntax.
///
/// If you have an `Expr` with positions, you are much better off
/// getting the source code at those positions rather than using this.
Convert an `Expr` to a `String` of the equivalent source code.
This is a debugging tool abusing a printer written for bytecode
emission. It does not support all Hack expressions, and panics
on unsupported syntax.

If you have an `Expr` with positions, you are much better off
getting the source code at those positions rather than using this.
Convert an ` Expr ` to a ` String ` of the equivalent source code . This is a debugging tool abusing a printer written for bytecode emission . It does not support all Hack expressions and panics on unsupported syntax . If you have an ` Expr ` with positions you are much better off getting the source code at those positions rather than using this .
pub fn expr_to_string_lossy(mut ctx: Context<'_>, expr: &ast::Expr) -> String {
    ctx.dump_lambdas = true;
    let env = ExprEnv { codegen_env: None };
    let mut escaped_src = Vec::new();
    print_expr(&ctx, &mut escaped_src, &env, expr).expect("Printing failed");
    let bs = escaper::unescape_double(unsafe { std::str::from_utf8_unchecked(&escaped_src) })
        .expect("Unescaping failed");
    let s = String::from_utf8_lossy(&bs);
    s.to_string()
}
pub fn expr_to_string_lossy ( mut ctx : Context < ' _ > , expr : & ast :: Expr ) -> String { ctx . dump_lambdas = true ; let env = ExprEnv { codegen_env : None } ; let mut escaped_src = Vec :: new ( ) ; print_expr ( & ctx , & mut escaped_src , & env , expr ) . expect ( " " ) ; let bs = escaper :: unescape_double ( unsafe { std :: str :: from_utf8_unchecked ( & escaped_src ) } ) . expect ( " " ) ; let s = String :: from_utf8_lossy ( & bs ) ; s . to_string ( ) }
Convert an `Expr` to a `String` of the equivalent source code.
Convert an ` Expr ` to a ` String ` of the equivalent source code .
ctx
Context<'_>
expr
&ast::Expr