Module: IRust

Defined in:
lib/irust.rb,
lib/irust/version.rb

Constant Summary collapse

VERSION =
"1.0.1"

Class Method Summary collapse

Class Method Details

.compile(tmpdir) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/irust.rb', line 29

def compile(tmpdir)
  Dir.chdir(tmpdir) do
    stdin, stderr, status = Open3.capture3("rustc irust.rs")

    if status.success?
      true
    else
      STDERR.puts stderr
      false
    end
  end
end

.eval(line) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/irust.rb', line 42

def eval(line)
  exit 0 if line.nil?

  Dir.mktmpdir do |tmpdir|
    input_src = File.join(tmpdir, "irust.rs")
    File.write input_src, rust_program(line)

    if compile(tmpdir)
      system input_src.sub(/\.rs$/, '')
    end
  end
end

.readObject



8
9
10
# File 'lib/irust.rb', line 8

def read
  Readline.readline("irust> ", true)
end

.runObject



55
56
57
# File 'lib/irust.rb', line 55

def run
  loop { eval read }
end

.rust_program(line) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/irust.rb', line 12

def rust_program(line)
<<-RUST
#[feature(globs, macro_rules, struct_variant)];
extern mod extra;

fn main() {
let r = {
  fn type_of<T>(_: &T) -> &'static str { unsafe {
  (*std::unstable::intrinsics::get_tydesc::<T>()).name } } struct
  Foo<T>(T);
  #{line}
};
println!("{:?}", r)
}
RUST
end