Skip to content

Commit 858a7b3

Browse files
committed
Merge pull request #8 from mattn/platform
Add CFunc::Platform to recognize mruby platform
2 parents 552d1a1 + 7bc4485 commit 858a7b3

File tree

3 files changed

+64
-6
lines changed

3 files changed

+64
-6
lines changed

include/cfunc_platform.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
//
2+
// CFunc::Platform class
3+
//
4+
// See Copyright Notice in cfunc.h
5+
//
6+
7+
8+
#ifndef cfunc_platform_h
9+
#define cfunc_platform_h
10+
11+
#include "cfunc.h"
12+
13+
void init_cfunc_platform(mrb_state *mrb, struct RClass* module);
14+
15+
#endif

src/cfunc.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "cfunc_closure.h"
1313
#include "cfunc_type.h"
1414
#include "cfunc_rubyvm.h"
15+
#include "cfunc_platform.h"
1516

1617
#include "mruby/proc.h"
1718
#include "mruby/dump.h"
@@ -37,12 +38,14 @@ mrb_mruby_cfunc_gem_init(mrb_state* mrb)
3738
set_cfunc_state(mrb, ns, state);
3839
state->namespace = ns;
3940

40-
init_cfunc_type(mrb, ns);
41-
init_cfunc_pointer(mrb, ns);
42-
init_cfunc_struct(mrb, ns);
43-
init_cfunc_closure(mrb, ns);
44-
init_cfunc_call(mrb, ns);
45-
init_cfunc_rubyvm(mrb, ns);
41+
int ai = mrb_gc_arena_save(mrb);
42+
init_cfunc_type(mrb, ns); mrb_gc_arena_restore(mrb, ai);
43+
init_cfunc_pointer(mrb, ns); mrb_gc_arena_restore(mrb, ai);
44+
init_cfunc_struct(mrb, ns); mrb_gc_arena_restore(mrb, ai);
45+
init_cfunc_closure(mrb, ns); mrb_gc_arena_restore(mrb, ai);
46+
init_cfunc_call(mrb, ns); mrb_gc_arena_restore(mrb, ai);
47+
init_cfunc_rubyvm(mrb, ns); mrb_gc_arena_restore(mrb, ai);
48+
init_cfunc_platform(mrb, ns); mrb_gc_arena_restore(mrb, ai);
4649

4750
mrb_define_class_method(mrb, ns, "mrb_state", cfunc_mrb_state, ARGS_NONE());
4851
}

src/cfunc_platform.c

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
//
2+
// CFunc::call method
3+
//
4+
// See Copyright Notice in cfunc.h
5+
//
6+
7+
#include "cfunc_platform.h"
8+
#include "mruby/string.h"
9+
#include "mruby/class.h"
10+
11+
static mrb_value
12+
cfunc_platform_is_posix(mrb_state *mrb, mrb_value self)
13+
{
14+
#ifdef __USE_POSIX
15+
return mrb_true_value();
16+
#else
17+
return mrb_false_value();
18+
#endif
19+
}
20+
21+
22+
static mrb_value
23+
cfunc_platform_is_win32(mrb_state *mrb, mrb_value self)
24+
{
25+
#ifdef _WIN32
26+
return mrb_true_value();
27+
#else
28+
return mrb_false_value();
29+
#endif
30+
}
31+
32+
33+
void init_cfunc_platform(mrb_state *mrb, struct RClass* module)
34+
{
35+
struct cfunc_state *state = cfunc_state(mrb, module);
36+
struct RClass *struct_class = mrb_define_class_under(mrb, module, "Platform", mrb->object_class);
37+
38+
mrb_define_class_method(mrb, struct_class, "is_posix?", cfunc_platform_is_posix, ARGS_NONE());
39+
mrb_define_class_method(mrb, struct_class, "is_win32?", cfunc_platform_is_win32, ARGS_NONE());
40+
}

0 commit comments

Comments
 (0)