]>
Commit | Line | Data |
---|---|---|
7453a54e SL |
1 | // Copyright 2015 The Rust Project Developers. See the COPYRIGHT |
2 | // file at the top-level directory of this distribution and at | |
3 | // http://rust-lang.org/COPYRIGHT. | |
4 | // | |
5 | // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or | |
6 | // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license | |
7 | // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your | |
8 | // option. This file may not be copied, modified, or distributed | |
9 | // except according to those terms. | |
10 | ||
11 | // force-host | |
12 | ||
13 | #![feature(plugin_registrar, rustc_private)] | |
14 | #![feature(box_syntax)] | |
15 | ||
16 | #[macro_use] extern crate rustc; | |
7453a54e | 17 | extern crate rustc_plugin; |
54a0048b | 18 | extern crate rustc_const_math; |
7453a54e SL |
19 | extern crate syntax; |
20 | ||
54a0048b | 21 | use rustc::mir::transform::{self, MirPass}; |
7453a54e SL |
22 | use rustc::mir::repr::{Mir, Literal}; |
23 | use rustc::mir::visit::MutVisitor; | |
54a0048b SL |
24 | use rustc::ty; |
25 | use rustc::middle::const_val::ConstVal; | |
26 | use rustc_const_math::ConstInt; | |
7453a54e SL |
27 | use rustc_plugin::Registry; |
28 | ||
54a0048b SL |
29 | use syntax::ast::NodeId; |
30 | ||
7453a54e SL |
31 | struct Pass; |
32 | ||
54a0048b SL |
33 | impl transform::Pass for Pass {} |
34 | impl<'tcx> MirPass<'tcx> for Pass { | |
35 | fn run_pass(&mut self, _: &ty::TyCtxt<'tcx>, _: NodeId, mir: &mut Mir<'tcx>) { | |
7453a54e SL |
36 | Visitor.visit_mir(mir) |
37 | } | |
38 | } | |
39 | ||
40 | struct Visitor; | |
41 | ||
42 | impl<'tcx> MutVisitor<'tcx> for Visitor { | |
43 | fn visit_literal(&mut self, literal: &mut Literal<'tcx>) { | |
54a0048b SL |
44 | if let Literal::Value { ref mut value } = *literal { |
45 | if let ConstVal::Integral(ConstInt::I32(ref mut i @ 11)) = *value { | |
46 | *i = 42; | |
47 | } | |
7453a54e SL |
48 | } |
49 | } | |
50 | } | |
51 | ||
52 | #[plugin_registrar] | |
53 | pub fn plugin_registrar(reg: &mut Registry) { | |
54 | reg.register_mir_pass(box Pass); | |
55 | } |