- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcompiling-bytecode.c
More file actions
Latest commit
52 lines (42 loc) · 1.38 KB
/
Copy pathcompiling-bytecode.c
File metadata and controls
52 lines (42 loc) · 1.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include<stdbool.h>
#include<stdio.h>
#include<mruby.h>
#include<mruby/compile.h>
#include<mruby/dump.h>
#include<mruby/irep.h>
#include<mruby/proc.h>
/* Like mrbc, but simpler and stupid */
intmain(intargc, char*argv[]) {
mrb_state*mrb=mrb_open();
if (!mrb) {
fprintf(stderr, "Couldn't initialize MRuby\n");
return1;
}
// Prepare our files
FILE*input=fopen("input.rb", "r");
if (!input) {
fprintf(stderr, "Couldn't find input.rb current directory, quitting...\n");
mrb_close(mrb);
return1;
}
FILE*output=fopen("output.mrb", "wb");
structmrbc_context*cxt;
cxt=mrbc_context_new(mrb);
cxt->no_exec= true; // To not run the file when loaded
mrbc_filename(mrb, cxt, "input.rb");
mrb_valueresult=mrb_load_file_cxt(mrb, input, cxt);
fclose(input);
mrbc_context_free(mrb, cxt);
structRProc*proc=mrb_proc_ptr(result);
constmrb_irep*irep=proc->body.irep;
// NOTE: DUMP_DEBUG_INFO was deprecated in 3.3.0 and used only for compatibility, in newer
// MRuby you should use MRB_DUMP_DEBUG_INFO
#ifMRUBY_RELEASE_MAJOR==3&&MRUBY_RELEASE_MINOR<3
mrb_dump_irep_binary(mrb, irep, DUMP_DEBUG_INFO, output);
#else
mrb_dump_irep_binary(mrb, irep, MRB_DUMP_DEBUG_INFO, output);
#endif
fclose(output);
mrb_close(mrb);
return0;
}