mirror of
https://github.com/mkxp-z/mkxp-z.git
synced 2025-09-03 04:33:02 +02:00
Refactor out the SANDBOX_COROUTINE()
macro
Removing this macro allows the correct line numbers to show up in GDB stack traces.
This commit is contained in:
parent
2de7a050db
commit
09bcb1532c
20 changed files with 368 additions and 322 deletions
|
@ -28,9 +28,9 @@
|
|||
namespace mkxp_sandbox {
|
||||
static VALUE audio_module;
|
||||
|
||||
SANDBOX_COROUTINE(audio_binding_init,
|
||||
struct audio_binding_init : boost::asio::coroutine {
|
||||
static VALUE bgm_play(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
wasm_ptr_t filename;
|
||||
int32_t volume;
|
||||
int32_t pitch;
|
||||
|
@ -69,7 +69,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
@ -80,7 +80,7 @@ namespace mkxp_sandbox {
|
|||
}
|
||||
|
||||
static VALUE bgm_fade(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t time;
|
||||
int32_t track;
|
||||
|
||||
|
@ -96,13 +96,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
||||
static VALUE bgm_pos(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t track;
|
||||
double pos;
|
||||
VALUE value;
|
||||
|
@ -119,13 +119,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return value;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
||||
static VALUE bgm_volume(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t track;
|
||||
int32_t volume;
|
||||
VALUE value;
|
||||
|
@ -142,13 +142,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return value;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
||||
static VALUE bgm_set_volume(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t volume;
|
||||
int32_t track;
|
||||
|
||||
|
@ -164,13 +164,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
||||
static VALUE bgs_play(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
wasm_ptr_t filename;
|
||||
int32_t volume;
|
||||
int32_t pitch;
|
||||
|
@ -198,7 +198,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
@ -209,7 +209,7 @@ namespace mkxp_sandbox {
|
|||
}
|
||||
|
||||
static VALUE bgs_fade(VALUE self, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t time;
|
||||
|
||||
VALUE operator()(VALUE self, VALUE value) {
|
||||
|
@ -220,13 +220,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
}
|
||||
|
||||
static VALUE bgs_pos(VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
double pos;
|
||||
VALUE value;
|
||||
|
||||
|
@ -238,13 +238,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return value;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self);
|
||||
}
|
||||
|
||||
static VALUE me_play(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
wasm_ptr_t filename;
|
||||
int32_t volume;
|
||||
int32_t pitch;
|
||||
|
@ -267,7 +267,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
@ -278,7 +278,7 @@ namespace mkxp_sandbox {
|
|||
}
|
||||
|
||||
static VALUE me_fade(VALUE self, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t time;
|
||||
|
||||
VALUE operator()(VALUE self, VALUE value) {
|
||||
|
@ -289,13 +289,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
}
|
||||
|
||||
static VALUE se_play(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
wasm_ptr_t filename;
|
||||
int32_t volume;
|
||||
int32_t pitch;
|
||||
|
@ -318,7 +318,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
@ -360,7 +360,7 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_AWAIT(rb_define_module_function, audio_module, "__reset__", (VALUE (*)(ANYARGS))reset, 0);
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
#endif // MKXPZ_SANDBOX_AUDIO_BINDING_H
|
||||
|
|
|
@ -26,9 +26,11 @@
|
|||
#include <cstdint>
|
||||
#include <cstring>
|
||||
#include <memory>
|
||||
#include <type_traits>
|
||||
#include <unordered_map>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
#include <boost/core/enable_if.hpp>
|
||||
#include <boost/container_hash/hash.hpp>
|
||||
#include <boost/asio/coroutine.hpp>
|
||||
#include <mkxp-retro-ruby.h>
|
||||
|
@ -122,7 +124,15 @@ namespace mkxp_sandbox {
|
|||
return bind.fibers[key];
|
||||
}
|
||||
|
||||
static wasm_ptr_t init_inner(struct binding_base &bind, struct fiber &fiber) {
|
||||
template <typename U> static typename boost::enable_if<std::is_constructible<U, struct binding_base &>, void>::type construct_frame_at(void *ptr, struct binding_base &bind) {
|
||||
new(ptr) U(bind);
|
||||
}
|
||||
|
||||
template <typename U> static typename boost::disable_if<std::is_constructible<U, struct binding_base &>, void>::type construct_frame_at(void *ptr, struct binding_base &bind) {
|
||||
new(ptr) U;
|
||||
}
|
||||
|
||||
static wasm_ptr_t init_frame(struct binding_base &bind, struct fiber &fiber) {
|
||||
uint32_t state = w2c_ruby_asyncify_get_state(&bind.instance());
|
||||
|
||||
if (fiber.stack_ptr > fiber.stack.size()) {
|
||||
|
@ -151,12 +161,12 @@ namespace mkxp_sandbox {
|
|||
);
|
||||
assert(sp % sizeof(VALUE) == 0);
|
||||
assert(sp % WASMSTACKALIGN == 0);
|
||||
new(*bind + sp) T(bind);
|
||||
construct_frame_at<T>(*bind + sp, bind);
|
||||
w2c_ruby_rb_wasm_set_stack_pointer(&bind.instance(), sp);
|
||||
return sp;
|
||||
}
|
||||
|
||||
stack_frame_guard(struct binding_base &b) : bind(&b), fiber(&init_fiber(b)), ptr(init_inner(b, *fiber)) {}
|
||||
stack_frame_guard(struct binding_base &b) : bind(&b), fiber(&init_fiber(b)), ptr(init_frame(b, *fiber)) {}
|
||||
|
||||
public:
|
||||
stack_frame_guard(const stack_frame_guard &frame) = delete;
|
||||
|
|
|
@ -47,10 +47,10 @@ extern const char module_rpg3[];
|
|||
|
||||
namespace mkxp_sandbox {
|
||||
// Evaluates a script, returning the exception if it encountered an exception or `SANDBOX_UNDEF` otherwise.
|
||||
SANDBOX_COROUTINE(eval_script,
|
||||
struct eval_script : boost::asio::coroutine {
|
||||
private:
|
||||
static VALUE func(VALUE arg) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
VALUE string;
|
||||
VALUE filename;
|
||||
ID id;
|
||||
|
@ -63,18 +63,18 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_AWAIT(rb_funcall, SANDBOX_NIL, id, 3, string, SANDBOX_NIL, filename);
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
sb()->bind<struct coro>()()(arg);
|
||||
return SANDBOX_UNDEF;
|
||||
}
|
||||
|
||||
static VALUE rescue(VALUE arg, VALUE exception) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
VALUE operator()(VALUE exception) {
|
||||
return exception;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(exception);
|
||||
}
|
||||
|
@ -92,10 +92,10 @@ namespace mkxp_sandbox {
|
|||
|
||||
return value;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
// Runs the game scripts.
|
||||
SANDBOX_COROUTINE(run_rmxp_scripts,
|
||||
struct run_rmxp_scripts : boost::asio::coroutine {
|
||||
VALUE value;
|
||||
VALUE scripts;
|
||||
wasm_size_t script_count;
|
||||
|
@ -225,11 +225,11 @@ namespace mkxp_sandbox {
|
|||
std::free(decode_buffer);
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
SANDBOX_COROUTINE(sandbox_binding_init,
|
||||
struct sandbox_binding_init : boost::asio::coroutine {
|
||||
static VALUE load_data(VALUE self, VALUE path) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
VALUE value;
|
||||
VALUE file;
|
||||
wasm_ptr_t ptr;
|
||||
|
@ -254,15 +254,15 @@ namespace mkxp_sandbox {
|
|||
delete path_str;
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(path);
|
||||
}
|
||||
|
||||
static VALUE rgss_main(VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
static VALUE func(VALUE block) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
ID id;
|
||||
|
||||
VALUE operator()(VALUE block) {
|
||||
|
@ -273,7 +273,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_UNDEF;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(block);
|
||||
}
|
||||
|
@ -297,13 +297,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self);
|
||||
}
|
||||
|
||||
static VALUE rgss_stop(VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
VALUE operator()(VALUE self) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
while (true) {
|
||||
|
@ -313,7 +313,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self);
|
||||
}
|
||||
|
@ -360,7 +360,7 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_AWAIT(run_rmxp_scripts);
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
#endif // MKXPZ_BINDING_SANDBOX_H
|
||||
|
|
|
@ -29,42 +29,46 @@
|
|||
|
||||
#define SANDBOX_DEF_ALLOC(rbtype) \
|
||||
static VALUE alloc(VALUE _klass) { \
|
||||
SANDBOX_COROUTINE(alloc, \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
struct coro : boost::asio::coroutine { \
|
||||
VALUE _obj; \
|
||||
VALUE operator()(VALUE _klass) { \
|
||||
BOOST_ASIO_CORO_REENTER (this) { \
|
||||
SANDBOX_AWAIT_AND_SET(_obj, mkxp_sandbox::rb_data_typed_object_wrap, _klass, 0, rbtype); \
|
||||
SANDBOX_AWAIT_AND_SET(_obj, rb_data_typed_object_wrap, _klass, 0, rbtype); \
|
||||
} \
|
||||
return _obj; \
|
||||
} \
|
||||
) \
|
||||
return mkxp_sandbox::sb()->bind<struct alloc>()()(_klass); \
|
||||
}; \
|
||||
return sb()->bind<struct coro>()()(_klass); \
|
||||
}
|
||||
|
||||
#define SANDBOX_DEF_ALLOC_WITH_INIT(rbtype, initializer) \
|
||||
static VALUE alloc(VALUE _klass) { \
|
||||
SANDBOX_COROUTINE(alloc, \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
struct coro : boost::asio::coroutine { \
|
||||
VALUE _obj; \
|
||||
VALUE operator()(VALUE _klass) { \
|
||||
BOOST_ASIO_CORO_REENTER (this) { \
|
||||
SANDBOX_AWAIT_AND_SET(_obj, mkxp_sandbox::rb_data_typed_object_wrap, _klass, 0, rbtype); \
|
||||
mkxp_sandbox::set_private_data(_obj, initializer); /* TODO: free when sandbox is deallocated */ \
|
||||
SANDBOX_AWAIT_AND_SET(_obj, rb_data_typed_object_wrap, _klass, 0, rbtype); \
|
||||
set_private_data(_obj, initializer); /* TODO: free when sandbox is deallocated */ \
|
||||
} \
|
||||
return _obj; \
|
||||
} \
|
||||
) \
|
||||
return mkxp_sandbox::sb()->bind<struct alloc>()()(_klass); \
|
||||
}; \
|
||||
return sb()->bind<struct coro>()()(_klass); \
|
||||
}
|
||||
|
||||
#define SANDBOX_DEF_DFREE(T) \
|
||||
static void dfree(wasm_ptr_t _buf) { \
|
||||
delete *(T **)(**mkxp_sandbox::sb() + _buf); \
|
||||
mkxp_sandbox::sb()->sandbox_free(_buf); \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
delete *(T **)(**sb() + _buf); \
|
||||
sb()->sandbox_free(_buf); \
|
||||
}
|
||||
|
||||
#define SANDBOX_DEF_LOAD(T) \
|
||||
static VALUE load(VALUE _self, VALUE _serialized) { \
|
||||
SANDBOX_COROUTINE(load, \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
struct coro : boost::asio::coroutine { \
|
||||
VALUE _obj; \
|
||||
wasm_ptr_t _ptr; \
|
||||
wasm_size_t _len; \
|
||||
|
@ -73,19 +77,21 @@
|
|||
SANDBOX_AWAIT_AND_SET(_obj, rb_obj_alloc, _self); \
|
||||
SANDBOX_AWAIT_AND_SET(_ptr, rb_string_value_ptr, &_serialized); \
|
||||
SANDBOX_AWAIT_AND_SET(_len, get_bytesize, _serialized); \
|
||||
set_private_data(_obj, T::deserialize((const char *)(**mkxp_sandbox::sb() + _ptr), _len)); /* TODO: free when sandbox is deallocated */ \
|
||||
set_private_data(_obj, T::deserialize((const char *)(**sb() + _ptr), _len)); /* TODO: free when sandbox is deallocated */ \
|
||||
} \
|
||||
return _obj; \
|
||||
} \
|
||||
) \
|
||||
return mkxp_sandbox::sb()->bind<struct load>()()(_self, _serialized); \
|
||||
}; \
|
||||
return sb()->bind<struct coro>()()(_self, _serialized); \
|
||||
}
|
||||
|
||||
#define SANDBOX_DEF_CLASS_PROP_B(S, prop, name) \
|
||||
static VALUE get_##name(VALUE self) { \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
return SANDBOX_BOOL_TO_VALUE(S::get##prop()); \
|
||||
} \
|
||||
static VALUE set_##name(VALUE self, VALUE value) { \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
bool v = SANDBOX_VALUE_TO_BOOL(value); \
|
||||
S::set##prop(v); \
|
||||
return value; \
|
||||
|
@ -93,10 +99,12 @@
|
|||
|
||||
#define SANDBOX_DEF_CLASS_PROP(V, num2val, val2num, S, prop, name) \
|
||||
static VALUE get_##name(VALUE self) { \
|
||||
return mkxp_sandbox::sb()->bind<struct num2val>()()(S::get##prop()); \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
return sb()->bind<struct num2val>()()(S::get##prop()); \
|
||||
} \
|
||||
static VALUE set_##name(VALUE self, VALUE value) { \
|
||||
SANDBOX_COROUTINE(coro, \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
struct coro : boost::asio::coroutine { \
|
||||
VALUE operator()(VALUE self, VALUE value) { \
|
||||
V v; \
|
||||
BOOST_ASIO_CORO_REENTER (this) { \
|
||||
|
@ -105,8 +113,8 @@
|
|||
} \
|
||||
return value; \
|
||||
} \
|
||||
) \
|
||||
return mkxp_sandbox::sb()->bind<struct coro>()()(self, value); \
|
||||
}; \
|
||||
return sb()->bind<struct coro>()()(self, value); \
|
||||
}
|
||||
|
||||
#define SANDBOX_DEF_CLASS_PROP_I(S, prop, name) SANDBOX_DEF_CLASS_PROP(int32_t, rb_ll2inum, rb_num2int, S, prop, name)
|
||||
|
@ -115,10 +123,12 @@
|
|||
|
||||
#define SANDBOX_DEF_CLASS_PROP_OBJ_REF(S, V, prop, name) \
|
||||
static VALUE get_##name(VALUE self) { \
|
||||
return mkxp_sandbox::sb()->bind<struct rb_iv_get>()()(self, #name); \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
return sb()->bind<struct rb_iv_get>()()(self, #name); \
|
||||
} \
|
||||
static VALUE set_##name(VALUE self, VALUE value) { \
|
||||
SANDBOX_COROUTINE(coro, \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
struct coro : boost::asio::coroutine { \
|
||||
VALUE operator()(VALUE self, VALUE value) { \
|
||||
BOOST_ASIO_CORO_REENTER (this) { \
|
||||
{ \
|
||||
|
@ -129,15 +139,17 @@
|
|||
} \
|
||||
return value; \
|
||||
} \
|
||||
) \
|
||||
return mkxp_sandbox::sb()->bind<struct coro>()()(self, value); \
|
||||
}; \
|
||||
return sb()->bind<struct coro>()()(self, value); \
|
||||
}
|
||||
|
||||
#define SANDBOX_DEF_CLASS_PROP_OBJ_VAL(S, V, prop, name) \
|
||||
static VALUE get_##name(VALUE self) { \
|
||||
return mkxp_sandbox::sb()->bind<struct rb_iv_get>()()(self, #name); \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
return sb()->bind<struct rb_iv_get>()()(self, #name); \
|
||||
} \
|
||||
static VALUE set_##name(VALUE self, VALUE value) { \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
V *v = get_private_data<V>(value); \
|
||||
S::set##prop(*v); \
|
||||
return value; \
|
||||
|
@ -145,10 +157,12 @@
|
|||
|
||||
#define SANDBOX_DEF_PROP_B(S, prop, name) \
|
||||
static VALUE get_##name(VALUE self) { \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
S *s = get_private_data<S>(self); \
|
||||
return SANDBOX_BOOL_TO_VALUE(s->get##prop()); \
|
||||
} \
|
||||
static VALUE set_##name(VALUE self, VALUE value) { \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
S *s = get_private_data<S>(self); \
|
||||
bool v = SANDBOX_VALUE_TO_BOOL(value); \
|
||||
s->set##prop(v); \
|
||||
|
@ -157,10 +171,12 @@
|
|||
|
||||
#define SANDBOX_DEF_PROP(V, num2val, val2num, S, prop, name) \
|
||||
static VALUE get_##name(VALUE self) { \
|
||||
return mkxp_sandbox::sb()->bind<struct num2val>()()(get_private_data<S>(self)->get##prop()); \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
return sb()->bind<struct num2val>()()(get_private_data<S>(self)->get##prop()); \
|
||||
} \
|
||||
static VALUE set_##name(VALUE self, VALUE value) { \
|
||||
SANDBOX_COROUTINE(coro, \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
struct coro : boost::asio::coroutine { \
|
||||
VALUE operator()(VALUE self, VALUE value) { \
|
||||
V v; \
|
||||
BOOST_ASIO_CORO_REENTER (this) { \
|
||||
|
@ -170,8 +186,8 @@
|
|||
} \
|
||||
return value; \
|
||||
} \
|
||||
) \
|
||||
return mkxp_sandbox::sb()->bind<struct coro>()()(self, value); \
|
||||
}; \
|
||||
return sb()->bind<struct coro>()()(self, value); \
|
||||
}
|
||||
|
||||
#define SANDBOX_DEF_PROP_I(S, prop, name) SANDBOX_DEF_PROP(int32_t, rb_ll2inum, rb_num2int, S, prop, name)
|
||||
|
@ -180,10 +196,12 @@
|
|||
|
||||
#define SANDBOX_DEF_PROP_OBJ_REF(S, V, prop, name) \
|
||||
static VALUE get_##name(VALUE self) { \
|
||||
return mkxp_sandbox::sb()->bind<struct rb_iv_get>()()(self, #name); \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
return sb()->bind<struct rb_iv_get>()()(self, #name); \
|
||||
} \
|
||||
static VALUE set_##name(VALUE self, VALUE value) { \
|
||||
SANDBOX_COROUTINE(coro, \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
struct coro : boost::asio::coroutine { \
|
||||
VALUE operator()(VALUE self, VALUE value) { \
|
||||
BOOST_ASIO_CORO_REENTER (this) { \
|
||||
{ \
|
||||
|
@ -195,15 +213,17 @@
|
|||
} \
|
||||
return value; \
|
||||
} \
|
||||
) \
|
||||
return mkxp_sandbox::sb()->bind<struct coro>()()(self, value); \
|
||||
}; \
|
||||
return sb()->bind<struct coro>()()(self, value); \
|
||||
}
|
||||
|
||||
#define SANDBOX_DEF_PROP_OBJ_VAL(S, V, prop, name) \
|
||||
static VALUE get_##name(VALUE self) { \
|
||||
return mkxp_sandbox::sb()->bind<struct rb_iv_get>()()(self, #name); \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
return sb()->bind<struct rb_iv_get>()()(self, #name); \
|
||||
} \
|
||||
static VALUE set_##name(VALUE self, VALUE value) { \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
S *s = get_private_data<S>(self); \
|
||||
V *v = get_private_data<V>(value); \
|
||||
s->set##prop(*v); \
|
||||
|
@ -212,10 +232,12 @@
|
|||
|
||||
#define SANDBOX_DEF_GFX_PROP_B(S, prop, name) \
|
||||
static VALUE get_##name(VALUE self) { \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
S *s = get_private_data<S>(self); \
|
||||
return SANDBOX_BOOL_TO_VALUE(s->get##prop()); \
|
||||
} \
|
||||
static VALUE set_##name(VALUE self, VALUE value) { \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
S *s = get_private_data<S>(self); \
|
||||
bool v = SANDBOX_VALUE_TO_BOOL(value); \
|
||||
GFX_GUARD_EXC(s->set##prop(v);); \
|
||||
|
@ -224,10 +246,12 @@
|
|||
|
||||
#define SANDBOX_DEF_GFX_PROP(V, num2val, val2num, S, prop, name) \
|
||||
static VALUE get_##name(VALUE self) { \
|
||||
return mkxp_sandbox::sb()->bind<struct num2val>()()(get_private_data<S>(self)->get##prop()); \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
return sb()->bind<struct num2val>()()(get_private_data<S>(self)->get##prop()); \
|
||||
} \
|
||||
static VALUE set_##name(VALUE self, VALUE value) { \
|
||||
SANDBOX_COROUTINE(coro, \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
struct coro : boost::asio::coroutine { \
|
||||
VALUE operator()(VALUE self, VALUE value) { \
|
||||
V v; \
|
||||
BOOST_ASIO_CORO_REENTER (this) { \
|
||||
|
@ -237,8 +261,8 @@
|
|||
} \
|
||||
return value; \
|
||||
} \
|
||||
) \
|
||||
return mkxp_sandbox::sb()->bind<struct coro>()()(self, value); \
|
||||
}; \
|
||||
return sb()->bind<struct coro>()()(self, value); \
|
||||
}
|
||||
|
||||
#define SANDBOX_DEF_GFX_PROP_I(S, prop, name) SANDBOX_DEF_GFX_PROP(int32_t, rb_ll2inum, rb_num2int, S, prop, name)
|
||||
|
@ -247,10 +271,12 @@
|
|||
|
||||
#define SANDBOX_DEF_GFX_PROP_OBJ_REF(S, V, prop, name) \
|
||||
static VALUE get_##name(VALUE self) { \
|
||||
return mkxp_sandbox::sb()->bind<struct rb_iv_get>()()(self, #name); \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
return sb()->bind<struct rb_iv_get>()()(self, #name); \
|
||||
} \
|
||||
static VALUE set_##name(VALUE self, VALUE value) { \
|
||||
SANDBOX_COROUTINE(coro, \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
struct coro : boost::asio::coroutine { \
|
||||
VALUE operator()(VALUE self, VALUE value) { \
|
||||
BOOST_ASIO_CORO_REENTER (this) { \
|
||||
{ \
|
||||
|
@ -262,15 +288,17 @@
|
|||
} \
|
||||
return value; \
|
||||
} \
|
||||
) \
|
||||
return mkxp_sandbox::sb()->bind<struct coro>()()(self, value); \
|
||||
}; \
|
||||
return sb()->bind<struct coro>()()(self, value); \
|
||||
}
|
||||
|
||||
#define SANDBOX_DEF_GFX_PROP_OBJ_VAL(S, V, prop, name) \
|
||||
static VALUE get_##name(VALUE self) { \
|
||||
return mkxp_sandbox::sb()->bind<struct rb_iv_get>()()(self, #name); \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
return sb()->bind<struct rb_iv_get>()()(self, #name); \
|
||||
} \
|
||||
static VALUE set_##name(VALUE self, VALUE value) { \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
S *s = get_private_data<S>(self); \
|
||||
V *v = get_private_data<V>(value); \
|
||||
GFX_GUARD_EXC(s->set##prop(*v);); \
|
||||
|
@ -279,9 +307,11 @@
|
|||
|
||||
#define SANDBOX_DEF_GRA_PROP_B(prop, name) \
|
||||
static VALUE get_##name(VALUE self) { \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
return SANDBOX_BOOL_TO_VALUE(shState->graphics().get##prop()); \
|
||||
} \
|
||||
static VALUE set_##name(VALUE self, VALUE value) { \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
bool v = SANDBOX_VALUE_TO_BOOL(value); \
|
||||
GFX_LOCK; \
|
||||
shState->graphics().set##prop(v); \
|
||||
|
@ -291,10 +321,12 @@
|
|||
|
||||
#define SANDBOX_DEF_GRA_PROP(V, num2val, val2num, prop, name) \
|
||||
static VALUE get_##name(VALUE self) { \
|
||||
return mkxp_sandbox::sb()->bind<struct num2val>()()(shState->graphics().get##prop()); \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
return sb()->bind<struct num2val>()()(shState->graphics().get##prop()); \
|
||||
} \
|
||||
static VALUE set_##name(VALUE self, VALUE value) { \
|
||||
SANDBOX_COROUTINE(coro, \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
struct coro : boost::asio::coroutine { \
|
||||
VALUE operator()(VALUE self, VALUE value) { \
|
||||
V v; \
|
||||
BOOST_ASIO_CORO_REENTER (this) { \
|
||||
|
@ -305,8 +337,8 @@
|
|||
} \
|
||||
return value; \
|
||||
} \
|
||||
) \
|
||||
return mkxp_sandbox::sb()->bind<struct coro>()()(self, value); \
|
||||
}; \
|
||||
return sb()->bind<struct coro>()()(self, value); \
|
||||
}
|
||||
|
||||
#define SANDBOX_DEF_GRA_PROP_I(prop, name) SANDBOX_DEF_GRA_PROP(int32_t, rb_ll2inum, rb_num2int, prop, name)
|
||||
|
@ -315,10 +347,12 @@
|
|||
|
||||
#define SANDBOX_DEF_GRA_PROP_OBJ_REF(V, prop, name) \
|
||||
static VALUE get_##name(VALUE self) { \
|
||||
return mkxp_sandbox::sb()->bind<struct rb_iv_get>()()(self, #name); \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
return sb()->bind<struct rb_iv_get>()()(self, #name); \
|
||||
} \
|
||||
static VALUE set_##name(VALUE self, VALUE value) { \
|
||||
SANDBOX_COROUTINE(coro, \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
struct coro : boost::asio::coroutine { \
|
||||
VALUE operator()(VALUE self, VALUE value) { \
|
||||
BOOST_ASIO_CORO_REENTER (this) { \
|
||||
{ \
|
||||
|
@ -331,15 +365,17 @@
|
|||
} \
|
||||
return value; \
|
||||
} \
|
||||
) \
|
||||
return mkxp_sandbox::sb()->bind<struct coro>()()(self, value); \
|
||||
}; \
|
||||
return sb()->bind<struct coro>()()(self, value); \
|
||||
}
|
||||
|
||||
#define SANDBOX_DEF_GRA_PROP_OBJ_VAL(V, prop, name) \
|
||||
static VALUE get_##name(VALUE self) { \
|
||||
return mkxp_sandbox::sb()->bind<struct rb_iv_get>()()(self, #name); \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
return sb()->bind<struct rb_iv_get>()()(self, #name); \
|
||||
} \
|
||||
static VALUE set_##name(VALUE self, VALUE value) { \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
V *v = get_private_data<V>(value); \
|
||||
GFX_LOCK; \
|
||||
shState->graphics().set##prop(*v); \
|
||||
|
@ -366,7 +402,7 @@ namespace mkxp_sandbox {
|
|||
}
|
||||
|
||||
// Gets the length of a Ruby object.
|
||||
SANDBOX_COROUTINE(get_length,
|
||||
struct get_length : boost::asio::coroutine {
|
||||
ID id;
|
||||
VALUE length_value;
|
||||
wasm_size_t result;
|
||||
|
@ -380,10 +416,10 @@ namespace mkxp_sandbox {
|
|||
|
||||
return result;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
// Gets the bytesize of a Ruby object.
|
||||
SANDBOX_COROUTINE(get_bytesize,
|
||||
struct get_bytesize : boost::asio::coroutine {
|
||||
ID id;
|
||||
VALUE length_value;
|
||||
wasm_size_t result;
|
||||
|
@ -397,9 +433,9 @@ namespace mkxp_sandbox {
|
|||
|
||||
return result;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
SANDBOX_COROUTINE(wrap_property,
|
||||
struct wrap_property : boost::asio::coroutine {
|
||||
VALUE obj;
|
||||
|
||||
VALUE operator()(VALUE self, void *ptr, const char *iv, VALUE klass) {
|
||||
|
@ -411,10 +447,10 @@ namespace mkxp_sandbox {
|
|||
|
||||
return obj;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
// Prints the backtrace of a Ruby exception to the log.
|
||||
SANDBOX_COROUTINE(log_backtrace,
|
||||
struct log_backtrace : boost::asio::coroutine {
|
||||
ID id;
|
||||
VALUE backtrace;
|
||||
VALUE separator;
|
||||
|
@ -432,7 +468,7 @@ namespace mkxp_sandbox {
|
|||
mkxp_retro::log_printf(RETRO_LOG_ERROR, "%s\n", **sb() + backtrace_str);
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
#endif // MKXPZ_SANDBOX_BINDING_UTIL_H
|
||||
|
|
|
@ -32,7 +32,7 @@ namespace mkxp_sandbox {
|
|||
static struct mkxp_sandbox::bindings::rb_data_type bitmap_type;
|
||||
static VALUE bitmap_class;
|
||||
|
||||
SANDBOX_COROUTINE(bitmap_init_props,
|
||||
struct bitmap_init_props : boost::asio::coroutine {
|
||||
VALUE font;
|
||||
VALUE hires;
|
||||
VALUE hires_font;
|
||||
|
@ -55,14 +55,14 @@ namespace mkxp_sandbox {
|
|||
bitmap->setInitFont(get_private_data<Font>(font));
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
SANDBOX_COROUTINE(bitmap_binding_init,
|
||||
struct bitmap_binding_init : boost::asio::coroutine {
|
||||
SANDBOX_DEF_ALLOC(bitmap_type)
|
||||
SANDBOX_DEF_DFREE(Bitmap)
|
||||
|
||||
static VALUE initialize(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
Bitmap *bitmap;
|
||||
wasm_ptr_t filename;
|
||||
wasm_size_t width;
|
||||
|
@ -85,13 +85,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
||||
static VALUE initialize_copy(VALUE self, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
Bitmap *bitmap;
|
||||
Bitmap *orig;
|
||||
|
||||
|
@ -113,7 +113,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return self;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
}
|
||||
|
@ -142,7 +142,7 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_DEF_GFX_PROP_OBJ_REF(Bitmap, Bitmap, Hires, hires);
|
||||
|
||||
static VALUE rect(VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
VALUE obj;
|
||||
|
||||
VALUE operator()(VALUE self) {
|
||||
|
@ -153,13 +153,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return obj;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self);
|
||||
}
|
||||
|
||||
static VALUE blt(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int x;
|
||||
int y;
|
||||
VALUE srcObj;
|
||||
|
@ -189,13 +189,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return self;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
||||
static VALUE stretch_blt(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
VALUE destRectObj;
|
||||
VALUE srcObj;
|
||||
VALUE srcRectObj;
|
||||
|
@ -224,13 +224,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return self;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
||||
static VALUE fill_rect(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
Bitmap *bitmap;
|
||||
int x;
|
||||
int y;
|
||||
|
@ -254,7 +254,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
@ -265,7 +265,7 @@ namespace mkxp_sandbox {
|
|||
}
|
||||
|
||||
static VALUE get_pixel(VALUE self, VALUE xval, VALUE yval) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
Bitmap *bitmap;
|
||||
int x;
|
||||
int y;
|
||||
|
@ -295,13 +295,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return obj;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, xval, yval);
|
||||
}
|
||||
|
||||
static VALUE set_pixel(VALUE self, VALUE xval, VALUE yval, VALUE colorObj) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
Bitmap *bitmap;
|
||||
int x;
|
||||
int y;
|
||||
|
@ -319,13 +319,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return self;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, xval, yval, colorObj);
|
||||
}
|
||||
|
||||
static VALUE hue_change(VALUE self, VALUE hueval) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
Bitmap *bitmap;
|
||||
int hue;
|
||||
|
||||
|
@ -340,13 +340,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return self;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, hueval);
|
||||
}
|
||||
|
||||
static VALUE draw_text(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
Bitmap *bitmap;
|
||||
wasm_ptr_t str;
|
||||
VALUE obj;
|
||||
|
@ -395,13 +395,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
||||
static VALUE text_size(VALUE self, VALUE text) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
wasm_ptr_t str;
|
||||
VALUE obj;
|
||||
|
||||
|
@ -419,13 +419,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return obj;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, text);
|
||||
}
|
||||
|
||||
static VALUE get_raw_data(VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
VALUE value;
|
||||
wasm_ptr_t str;
|
||||
|
||||
|
@ -442,13 +442,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return value;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self);
|
||||
}
|
||||
|
||||
static VALUE set_raw_data(VALUE self, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
wasm_ptr_t str;
|
||||
wasm_size_t size;
|
||||
|
||||
|
@ -462,13 +462,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return self;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
}
|
||||
|
||||
static VALUE to_file(VALUE self, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
wasm_ptr_t str;
|
||||
|
||||
VALUE operator()(VALUE self, VALUE value) {
|
||||
|
@ -480,13 +480,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
}
|
||||
|
||||
static VALUE snap_to_bitmap(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
Bitmap *bitmap;
|
||||
VALUE obj;
|
||||
int32_t pos;
|
||||
|
@ -509,13 +509,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return obj;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
||||
static VALUE gradient_fill_rect(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t x;
|
||||
int32_t y;
|
||||
int32_t w;
|
||||
|
@ -547,13 +547,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
||||
static VALUE clear_rect(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t x;
|
||||
int32_t y;
|
||||
int32_t w;
|
||||
|
@ -574,7 +574,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
@ -585,7 +585,7 @@ namespace mkxp_sandbox {
|
|||
}
|
||||
|
||||
static VALUE radial_blur(VALUE self, VALUE angle, VALUE divisions) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t a;
|
||||
int32_t d;
|
||||
|
||||
|
@ -598,7 +598,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, angle, divisions);
|
||||
}
|
||||
|
@ -636,7 +636,7 @@ namespace mkxp_sandbox {
|
|||
}
|
||||
|
||||
static VALUE goto_and_play(VALUE self, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t frame;
|
||||
|
||||
VALUE operator()(VALUE self, VALUE value) {
|
||||
|
@ -648,13 +648,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
}
|
||||
|
||||
static VALUE goto_and_stop(VALUE self, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t frame;
|
||||
|
||||
VALUE operator()(VALUE self, VALUE value) {
|
||||
|
@ -666,7 +666,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
}
|
||||
|
@ -680,7 +680,7 @@ namespace mkxp_sandbox {
|
|||
}
|
||||
|
||||
static VALUE add_frame(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
VALUE value;
|
||||
int32_t pos;
|
||||
|
||||
|
@ -705,13 +705,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return value;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
||||
static VALUE remove_frame(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t pos;
|
||||
|
||||
VALUE operator()(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
|
@ -730,7 +730,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
@ -755,7 +755,7 @@ namespace mkxp_sandbox {
|
|||
}
|
||||
|
||||
static VALUE set_font(VALUE self, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
VALUE f;
|
||||
VALUE prop;
|
||||
|
||||
|
@ -790,7 +790,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return value;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
}
|
||||
|
@ -851,7 +851,7 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_INIT_PROP_BIND(bitmap_class, font);
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
#endif // MKXPZ_SANDBOX_BITMAP_BINDING_H
|
||||
|
|
|
@ -36,14 +36,14 @@ namespace mkxp_sandbox {
|
|||
static struct mkxp_sandbox::bindings::rb_data_type rect_type;
|
||||
static VALUE rect_class;
|
||||
|
||||
SANDBOX_COROUTINE(etc_binding_init,
|
||||
SANDBOX_COROUTINE(color_binding_init,
|
||||
struct etc_binding_init : boost::asio::coroutine {
|
||||
struct color_binding_init : boost::asio::coroutine {
|
||||
SANDBOX_DEF_ALLOC_WITH_INIT(color_type, new Color)
|
||||
SANDBOX_DEF_DFREE(Color)
|
||||
SANDBOX_DEF_LOAD(Color)
|
||||
|
||||
static VALUE initialize(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
Color *color;
|
||||
double red;
|
||||
double green;
|
||||
|
@ -71,13 +71,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
||||
static VALUE initialize_copy(VALUE self, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
VALUE operator()(VALUE self, VALUE value) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
if (self != value) {
|
||||
|
@ -88,13 +88,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return self;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
}
|
||||
|
||||
static VALUE set(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
double red;
|
||||
double green;
|
||||
double blue;
|
||||
|
@ -119,7 +119,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
@ -130,7 +130,7 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_DEF_PROP_D(Color, Alpha, alpha);
|
||||
|
||||
static VALUE equal(VALUE self, VALUE other) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
VALUE value;
|
||||
|
||||
VALUE operator()(VALUE self, VALUE other) {
|
||||
|
@ -146,7 +146,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return value;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, other);
|
||||
}
|
||||
|
@ -177,15 +177,15 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_AWAIT(rb_define_method, color_class, "inspect", (VALUE (*)(ANYARGS))stringify, 0);
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
SANDBOX_COROUTINE(tone_binding_init,
|
||||
struct tone_binding_init : boost::asio::coroutine {
|
||||
SANDBOX_DEF_ALLOC_WITH_INIT(tone_type, new Tone)
|
||||
SANDBOX_DEF_DFREE(Tone)
|
||||
SANDBOX_DEF_LOAD(Tone)
|
||||
|
||||
static VALUE initialize(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
Tone *tone;
|
||||
double red;
|
||||
double green;
|
||||
|
@ -213,13 +213,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
||||
static VALUE initialize_copy(VALUE self, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
VALUE operator()(VALUE self, VALUE value) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
if (self != value) {
|
||||
|
@ -230,13 +230,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return self;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
}
|
||||
|
||||
static VALUE set(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
double red;
|
||||
double green;
|
||||
double blue;
|
||||
|
@ -261,7 +261,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
@ -272,7 +272,7 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_DEF_PROP_D(Tone, Gray, gray);
|
||||
|
||||
static VALUE equal(VALUE self, VALUE other) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
VALUE value;
|
||||
|
||||
VALUE operator()(VALUE self, VALUE other) {
|
||||
|
@ -288,7 +288,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return value;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, other);
|
||||
}
|
||||
|
@ -319,15 +319,15 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_AWAIT(rb_define_method, tone_class, "inspect", (VALUE (*)(ANYARGS))stringify, 0);
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
SANDBOX_COROUTINE(rect_binding_init,
|
||||
struct rect_binding_init : boost::asio::coroutine {
|
||||
SANDBOX_DEF_ALLOC_WITH_INIT(rect_type, new Rect)
|
||||
SANDBOX_DEF_DFREE(Rect)
|
||||
SANDBOX_DEF_LOAD(Rect)
|
||||
|
||||
static VALUE initialize(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
Rect *rect;
|
||||
int x;
|
||||
int y;
|
||||
|
@ -351,13 +351,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
||||
static VALUE initialize_copy(VALUE self, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
VALUE operator()(VALUE self, VALUE value) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
if (self != value) {
|
||||
|
@ -368,13 +368,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return self;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
}
|
||||
|
||||
static VALUE set(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int x;
|
||||
int y;
|
||||
int width;
|
||||
|
@ -395,7 +395,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
@ -411,7 +411,7 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_DEF_PROP_D(Rect, Height, height);
|
||||
|
||||
static VALUE equal(VALUE self, VALUE other) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
VALUE value;
|
||||
|
||||
VALUE operator()(VALUE self, VALUE other) {
|
||||
|
@ -427,7 +427,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return value;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, other);
|
||||
}
|
||||
|
@ -459,7 +459,7 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_AWAIT(rb_define_method, rect_class, "inspect", (VALUE (*)(ANYARGS))stringify, 0);
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
void operator()() {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
|
@ -468,7 +468,7 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_AWAIT(rect_binding_init);
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
#endif // MKXPZ_SANDBOX_ETC_BINDING_H
|
||||
|
|
|
@ -33,7 +33,7 @@ namespace mkxp_sandbox {
|
|||
static struct mkxp_sandbox::bindings::rb_data_type font_type;
|
||||
static VALUE font_class;
|
||||
|
||||
SANDBOX_COROUTINE(font_binding_init,
|
||||
struct font_binding_init : boost::asio::coroutine {
|
||||
SANDBOX_DEF_ALLOC(font_type)
|
||||
SANDBOX_DEF_DFREE(Font)
|
||||
|
||||
|
@ -41,7 +41,7 @@ namespace mkxp_sandbox {
|
|||
VALUE default_name;
|
||||
wasm_size_t default_name_index;
|
||||
|
||||
SANDBOX_COROUTINE(collect_strings,
|
||||
struct collect_strings : boost::asio::coroutine {
|
||||
VALUE value;
|
||||
VALUE entry;
|
||||
wasm_ptr_t str;
|
||||
|
@ -72,10 +72,10 @@ namespace mkxp_sandbox {
|
|||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
static VALUE initialize(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
Font *font;
|
||||
std::vector<std::string> *names;
|
||||
VALUE names_obj;
|
||||
|
@ -120,13 +120,13 @@ namespace mkxp_sandbox {
|
|||
~coro() {
|
||||
delete names;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
||||
static VALUE initialize_copy(VALUE self, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
Font *font;
|
||||
|
||||
VALUE operator()(VALUE self, VALUE value) {
|
||||
|
@ -150,7 +150,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return self;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
}
|
||||
|
@ -160,7 +160,7 @@ namespace mkxp_sandbox {
|
|||
}
|
||||
|
||||
static VALUE set_name(VALUE self, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
std::vector<std::string> *names;
|
||||
|
||||
VALUE operator()(VALUE self, VALUE value) {
|
||||
|
@ -177,7 +177,7 @@ namespace mkxp_sandbox {
|
|||
~coro() {
|
||||
delete names;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
}
|
||||
|
@ -195,7 +195,7 @@ namespace mkxp_sandbox {
|
|||
}
|
||||
|
||||
static VALUE set_default_name(VALUE self, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
std::vector<std::string> *names;
|
||||
|
||||
VALUE operator()(VALUE self, VALUE value) {
|
||||
|
@ -212,7 +212,7 @@ namespace mkxp_sandbox {
|
|||
~coro() {
|
||||
delete names;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
}
|
||||
|
@ -226,7 +226,7 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_DEF_CLASS_PROP_OBJ_VAL(Font, Color, DefaultOutColor, default_out_color);
|
||||
|
||||
static VALUE exist(VALUE self, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
wasm_ptr_t str;
|
||||
VALUE is_string;
|
||||
|
||||
|
@ -243,7 +243,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_UNDEF;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
}
|
||||
|
@ -309,7 +309,7 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_AWAIT(rb_define_singleton_method, font_class, "exist?", (VALUE (*)(ANYARGS))exist, 1);
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
#endif // MKXPZ_SANDBOX_FONT_BINDING_H
|
||||
|
|
|
@ -32,9 +32,9 @@
|
|||
namespace mkxp_sandbox {
|
||||
static VALUE graphics_module;
|
||||
|
||||
SANDBOX_COROUTINE(graphics_binding_init,
|
||||
struct graphics_binding_init : boost::asio::coroutine {
|
||||
static VALUE delta(VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
VALUE value;
|
||||
|
||||
VALUE operator()(VALUE self) {
|
||||
|
@ -46,13 +46,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return value;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self);
|
||||
}
|
||||
|
||||
static VALUE update(VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
VALUE operator()(VALUE self) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
if (shState->graphics().update()) {
|
||||
|
@ -62,7 +62,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self);
|
||||
}
|
||||
|
@ -73,7 +73,7 @@ namespace mkxp_sandbox {
|
|||
}
|
||||
|
||||
static VALUE transition(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
Bitmap *trans_map;
|
||||
wasm_ptr_t str;
|
||||
int32_t duration;
|
||||
|
@ -125,7 +125,7 @@ namespace mkxp_sandbox {
|
|||
delete trans_map;
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
@ -138,7 +138,7 @@ namespace mkxp_sandbox {
|
|||
}
|
||||
|
||||
static VALUE screenshot(VALUE self, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
wasm_ptr_t str;
|
||||
|
||||
VALUE operator()(VALUE self, VALUE value) {
|
||||
|
@ -149,7 +149,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
}
|
||||
|
@ -183,7 +183,7 @@ namespace mkxp_sandbox {
|
|||
}
|
||||
|
||||
static VALUE wait(VALUE self, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t duration;
|
||||
int32_t i;
|
||||
|
||||
|
@ -199,13 +199,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
}
|
||||
|
||||
static VALUE fadeout(VALUE self, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t duration;
|
||||
int32_t i;
|
||||
int32_t brightness;
|
||||
|
@ -223,13 +223,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
}
|
||||
|
||||
static VALUE fadein(VALUE self, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t duration;
|
||||
int32_t i;
|
||||
int32_t brightness;
|
||||
|
@ -247,13 +247,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
}
|
||||
|
||||
static VALUE snap_to_bitmap(VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
Bitmap *bitmap;
|
||||
VALUE obj;
|
||||
|
||||
|
@ -267,13 +267,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return obj;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self);
|
||||
}
|
||||
|
||||
static VALUE resize_screen(VALUE self, VALUE width, VALUE height) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t w;
|
||||
int32_t h;
|
||||
|
||||
|
@ -288,13 +288,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, width, height);
|
||||
}
|
||||
|
||||
static VALUE resize_window(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t w;
|
||||
int32_t h;
|
||||
|
||||
|
@ -314,7 +314,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
@ -327,7 +327,7 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_DEF_GRA_PROP_I(Brightness, brightness);
|
||||
|
||||
static VALUE play_movie(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
wasm_ptr_t str;
|
||||
int32_t volume;
|
||||
|
||||
|
@ -347,7 +347,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
@ -405,7 +405,7 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_INIT_MODULE_PROP_BIND(graphics_module, threadsafe);
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
#endif // MKXPZ_SANDBOX_GRAPHICS_BINDING_H
|
||||
|
|
|
@ -62,8 +62,8 @@ namespace mkxp_sandbox {
|
|||
{"MOUSEX2", Input::MouseX2},
|
||||
};
|
||||
|
||||
SANDBOX_COROUTINE(input_binding_init,
|
||||
SANDBOX_COROUTINE(get_button_arg,
|
||||
struct input_binding_init : boost::asio::coroutine {
|
||||
struct get_button_arg : boost::asio::coroutine {
|
||||
VALUE value;
|
||||
int32_t button;
|
||||
|
||||
|
@ -88,7 +88,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return button;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
static VALUE delta(VALUE self) {
|
||||
return sb()->bind<struct rb_float_new>()()(mkxp_retro::input->getDelta());
|
||||
|
@ -100,7 +100,7 @@ namespace mkxp_sandbox {
|
|||
}
|
||||
|
||||
static VALUE press(VALUE self, VALUE code) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t button;
|
||||
|
||||
VALUE operator()(VALUE self, VALUE code) {
|
||||
|
@ -111,13 +111,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_UNDEF;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, code);
|
||||
}
|
||||
|
||||
static VALUE trigger(VALUE self, VALUE code) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t button;
|
||||
|
||||
VALUE operator()(VALUE self, VALUE code) {
|
||||
|
@ -128,13 +128,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_UNDEF;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, code);
|
||||
}
|
||||
|
||||
static VALUE repeat(VALUE self, VALUE code) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t button;
|
||||
|
||||
VALUE operator()(VALUE self, VALUE code) {
|
||||
|
@ -145,13 +145,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_UNDEF;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, code);
|
||||
}
|
||||
|
||||
static VALUE release(VALUE self, VALUE code) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t button;
|
||||
|
||||
VALUE operator()(VALUE self, VALUE code) {
|
||||
|
@ -162,13 +162,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_UNDEF;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, code);
|
||||
}
|
||||
|
||||
static VALUE count(VALUE self, VALUE code) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t button;
|
||||
int32_t count;
|
||||
VALUE value;
|
||||
|
@ -182,13 +182,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return value;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, code);
|
||||
}
|
||||
|
||||
static VALUE time(VALUE self, VALUE code) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t button;
|
||||
double time;
|
||||
VALUE value;
|
||||
|
@ -202,13 +202,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return value;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, code);
|
||||
}
|
||||
|
||||
static VALUE pressex(VALUE self, VALUE code) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t button;
|
||||
|
||||
VALUE operator()(VALUE self, VALUE code) {
|
||||
|
@ -219,13 +219,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_UNDEF;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, code);
|
||||
}
|
||||
|
||||
static VALUE triggerex(VALUE self, VALUE code) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t button;
|
||||
|
||||
VALUE operator()(VALUE self, VALUE code) {
|
||||
|
@ -236,13 +236,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_UNDEF;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, code);
|
||||
}
|
||||
|
||||
static VALUE repeatex(VALUE self, VALUE code) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t button;
|
||||
|
||||
VALUE operator()(VALUE self, VALUE code) {
|
||||
|
@ -253,13 +253,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_UNDEF;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, code);
|
||||
}
|
||||
|
||||
static VALUE releaseex(VALUE self, VALUE code) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t button;
|
||||
|
||||
VALUE operator()(VALUE self, VALUE code) {
|
||||
|
@ -270,13 +270,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_UNDEF;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, code);
|
||||
}
|
||||
|
||||
static VALUE repeatcount(VALUE self, VALUE code) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t button;
|
||||
int32_t count;
|
||||
VALUE value;
|
||||
|
@ -290,13 +290,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return value;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, code);
|
||||
}
|
||||
|
||||
static VALUE timeex(VALUE self, VALUE code) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t button;
|
||||
double time;
|
||||
VALUE value;
|
||||
|
@ -310,7 +310,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return value;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, code);
|
||||
}
|
||||
|
@ -394,7 +394,7 @@ namespace mkxp_sandbox {
|
|||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
#endif // MKXPZ_SANDBOX_INPUT_BINDING_H
|
||||
|
|
|
@ -31,12 +31,12 @@ namespace mkxp_sandbox {
|
|||
static struct mkxp_sandbox::bindings::rb_data_type plane_type;
|
||||
static VALUE plane_class;
|
||||
|
||||
SANDBOX_COROUTINE(plane_binding_init,
|
||||
struct plane_binding_init : boost::asio::coroutine {
|
||||
SANDBOX_DEF_ALLOC(plane_type)
|
||||
SANDBOX_DEF_DFREE(Plane)
|
||||
|
||||
static VALUE initialize(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
Plane *plane;
|
||||
VALUE viewport_obj;
|
||||
Viewport *viewport;
|
||||
|
@ -73,7 +73,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
@ -126,7 +126,7 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_INIT_PROP_BIND(plane_class, blend_type);
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
#endif // MKXPZ_SANDBOX_PLANE_BINDING_H
|
||||
|
|
|
@ -27,12 +27,11 @@
|
|||
#include <mkxp-sandbox-bindgen.h>
|
||||
#include "types.h"
|
||||
|
||||
#define SANDBOX_COROUTINE(name, definition) struct name : boost::asio::coroutine { inline name(struct mkxp_sandbox::binding_base &bind) {} definition };
|
||||
|
||||
#define SANDBOX_AWAIT(coroutine, ...) \
|
||||
do { \
|
||||
{ \
|
||||
struct mkxp_sandbox::bindings::stack_frame_guard<struct coroutine> _frame = mkxp_sandbox::sb()->bind<struct coroutine>(); \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
struct bindings::stack_frame_guard<struct coroutine> _frame = sb()->bind<struct coroutine>(); \
|
||||
_frame()(__VA_ARGS__); \
|
||||
if (_frame().is_complete()) break; \
|
||||
} \
|
||||
|
@ -42,7 +41,8 @@
|
|||
#define SANDBOX_AWAIT_AND_SET(variable, coroutine, ...) \
|
||||
do { \
|
||||
{ \
|
||||
struct mkxp_sandbox::bindings::stack_frame_guard<struct coroutine> _frame = mkxp_sandbox::sb()->bind<struct coroutine>(); \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
struct bindings::stack_frame_guard<struct coroutine> _frame = sb()->bind<struct coroutine>(); \
|
||||
auto ret = _frame()(__VA_ARGS__); \
|
||||
if (_frame().is_complete()) { \
|
||||
variable = ret; \
|
||||
|
@ -54,6 +54,7 @@
|
|||
|
||||
#define SANDBOX_YIELD \
|
||||
do { \
|
||||
using namespace ::mkxp_sandbox; \
|
||||
sb()._begin_yield(); \
|
||||
BOOST_ASIO_CORO_YIELD; \
|
||||
sb()._end_yield(); \
|
||||
|
|
|
@ -31,12 +31,12 @@ namespace mkxp_sandbox {
|
|||
static struct mkxp_sandbox::bindings::rb_data_type sprite_type;
|
||||
static VALUE sprite_class;
|
||||
|
||||
SANDBOX_COROUTINE(sprite_binding_init,
|
||||
struct sprite_binding_init : boost::asio::coroutine {
|
||||
SANDBOX_DEF_ALLOC(sprite_type)
|
||||
SANDBOX_DEF_DFREE(Sprite)
|
||||
|
||||
static VALUE initialize(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
Sprite *sprite;
|
||||
VALUE viewport_obj;
|
||||
Viewport *viewport;
|
||||
|
@ -69,7 +69,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
@ -88,7 +88,7 @@ namespace mkxp_sandbox {
|
|||
}
|
||||
|
||||
static VALUE flash(VALUE self, VALUE obj, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int duration;
|
||||
|
||||
VALUE operator()(VALUE self, VALUE obj, VALUE value) {
|
||||
|
@ -99,7 +99,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, obj, value);
|
||||
}
|
||||
|
@ -173,7 +173,7 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_INIT_PROP_BIND(sprite_class, blend_type);
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
#endif // MKXPZ_SANDBOX_SPRITE_BINDING_H
|
||||
|
|
|
@ -31,13 +31,13 @@ namespace mkxp_sandbox {
|
|||
static struct mkxp_sandbox::bindings::rb_data_type table_type;
|
||||
static VALUE table_class;
|
||||
|
||||
SANDBOX_COROUTINE(table_binding_init,
|
||||
struct table_binding_init : boost::asio::coroutine {
|
||||
SANDBOX_DEF_ALLOC_WITH_INIT(table_type, new Table(0, 0, 0))
|
||||
SANDBOX_DEF_DFREE(Table)
|
||||
SANDBOX_DEF_LOAD(Table)
|
||||
|
||||
static VALUE initialize(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int32_t x;
|
||||
int32_t y;
|
||||
int32_t z;
|
||||
|
@ -69,13 +69,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
||||
static VALUE initialize_copy(VALUE self, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
VALUE operator()(VALUE self, VALUE value) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
if (self != value) {
|
||||
|
@ -86,13 +86,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return self;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, value);
|
||||
}
|
||||
|
||||
static VALUE resize(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
Table *table;
|
||||
int32_t x;
|
||||
int32_t y;
|
||||
|
@ -119,7 +119,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
@ -137,7 +137,7 @@ namespace mkxp_sandbox {
|
|||
}
|
||||
|
||||
static VALUE get(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
Table *table;
|
||||
VALUE value;
|
||||
int32_t x;
|
||||
|
@ -167,13 +167,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return value;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
||||
static VALUE set(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
Table *table;
|
||||
int32_t x;
|
||||
int32_t y;
|
||||
|
@ -203,7 +203,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_UNDEF;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
@ -224,7 +224,7 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_AWAIT(rb_define_method, table_class, "[]=", (VALUE (*)(ANYARGS))set, -1);
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
#endif // MKXPZ_SANDBOX_TABLE_BINDING_H
|
||||
|
|
|
@ -33,12 +33,12 @@ namespace mkxp_sandbox {
|
|||
static struct mkxp_sandbox::bindings::rb_data_type tilemap_autotiles_type;
|
||||
static VALUE tilemap_autotiles_class;
|
||||
|
||||
SANDBOX_COROUTINE(tilemap_binding_init,
|
||||
SANDBOX_COROUTINE(tilemap_autotiles_binding_init,
|
||||
struct tilemap_binding_init : boost::asio::coroutine {
|
||||
struct tilemap_autotiles_binding_init : boost::asio::coroutine {
|
||||
SANDBOX_DEF_ALLOC(tilemap_autotiles_type)
|
||||
|
||||
static VALUE get(VALUE self, VALUE i) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
VALUE ary;
|
||||
wasm_size_t index;
|
||||
VALUE value;
|
||||
|
@ -52,13 +52,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return value;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, i);
|
||||
}
|
||||
|
||||
static VALUE set(VALUE self, VALUE i, VALUE obj) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
Tilemap::Autotiles *autotiles;
|
||||
Bitmap *bitmap;
|
||||
VALUE ary;
|
||||
|
@ -84,7 +84,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return self;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, i, obj);
|
||||
}
|
||||
|
@ -98,13 +98,13 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_AWAIT(rb_define_method, tilemap_autotiles_class, "[]=", (VALUE (*)(ANYARGS))set, 2);
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
SANDBOX_DEF_ALLOC(tilemap_type)
|
||||
SANDBOX_DEF_DFREE(Tilemap)
|
||||
|
||||
static VALUE initialize(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
Tilemap *tilemap;
|
||||
VALUE viewport_obj;
|
||||
Viewport *viewport;
|
||||
|
@ -162,7 +162,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
@ -228,7 +228,7 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_INIT_PROP_BIND(tilemap_class, blend_type);
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
#endif // MKXPZ_SANDBOX_TILEMAP_BINDING_H
|
||||
|
|
|
@ -32,12 +32,12 @@ namespace mkxp_sandbox {
|
|||
static struct mkxp_sandbox::bindings::rb_data_type bitmap_array_type;
|
||||
static VALUE bitmap_array_class;
|
||||
|
||||
SANDBOX_COROUTINE(tilemapvx_binding_init,
|
||||
SANDBOX_COROUTINE(bitmap_array_binding_init,
|
||||
struct tilemapvx_binding_init : boost::asio::coroutine {
|
||||
struct bitmap_array_binding_init : boost::asio::coroutine {
|
||||
SANDBOX_DEF_ALLOC(bitmap_array_type)
|
||||
|
||||
static VALUE get(VALUE self, VALUE i) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
VALUE ary;
|
||||
wasm_size_t index;
|
||||
VALUE value;
|
||||
|
@ -51,13 +51,13 @@ namespace mkxp_sandbox {
|
|||
|
||||
return value;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, i);
|
||||
}
|
||||
|
||||
static VALUE set(VALUE self, VALUE i, VALUE obj) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
TilemapVX::BitmapArray *bitmap_array;
|
||||
Bitmap *bitmap;
|
||||
VALUE ary;
|
||||
|
@ -83,7 +83,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return self;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, i, obj);
|
||||
}
|
||||
|
@ -97,13 +97,13 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_AWAIT(rb_define_method, bitmap_array_class, "[]=", (VALUE (*)(ANYARGS))set, 2);
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
SANDBOX_DEF_ALLOC(tilemapvx_type)
|
||||
SANDBOX_DEF_DFREE(TilemapVX)
|
||||
|
||||
static VALUE initialize(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
TilemapVX *tilemap;
|
||||
VALUE viewport_obj;
|
||||
Viewport *viewport;
|
||||
|
@ -156,7 +156,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
@ -217,7 +217,7 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_INIT_PROP_BIND(tilemapvx_class, oy);
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
#endif // MKXPZ_SANDBOX_TILEMAPVX_BINDING_H
|
||||
|
|
|
@ -31,12 +31,12 @@ namespace mkxp_sandbox {
|
|||
static struct mkxp_sandbox::bindings::rb_data_type viewport_type;
|
||||
static VALUE viewport_class;
|
||||
|
||||
SANDBOX_COROUTINE(viewport_binding_init,
|
||||
struct viewport_binding_init : boost::asio::coroutine {
|
||||
SANDBOX_DEF_ALLOC(viewport_type)
|
||||
SANDBOX_DEF_DFREE(Viewport)
|
||||
|
||||
static VALUE initialize(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
Viewport *viewport;
|
||||
int32_t x;
|
||||
int32_t y;
|
||||
|
@ -74,7 +74,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
@ -93,7 +93,7 @@ namespace mkxp_sandbox {
|
|||
}
|
||||
|
||||
static VALUE flash(VALUE self, VALUE obj, VALUE value) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
int duration;
|
||||
|
||||
VALUE operator()(VALUE self, VALUE obj, VALUE value) {
|
||||
|
@ -104,7 +104,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, obj, value);
|
||||
}
|
||||
|
@ -141,7 +141,7 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_INIT_PROP_BIND(viewport_class, z);
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
#endif // MKXPZ_SANDBOX_VIEWPORT_BINDING_H
|
||||
|
|
|
@ -31,12 +31,12 @@ namespace mkxp_sandbox {
|
|||
static struct mkxp_sandbox::bindings::rb_data_type window_type;
|
||||
static VALUE window_class;
|
||||
|
||||
SANDBOX_COROUTINE(window_binding_init,
|
||||
struct window_binding_init : boost::asio::coroutine {
|
||||
SANDBOX_DEF_ALLOC(window_type)
|
||||
SANDBOX_DEF_DFREE(Window)
|
||||
|
||||
static VALUE initialize(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
Window *window;
|
||||
VALUE viewport_obj;
|
||||
Viewport *viewport;
|
||||
|
@ -67,7 +67,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
@ -138,7 +138,7 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_INIT_PROP_BIND(window_class, contents_opacity);
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
#endif // MKXPZ_SANDBOX_WINDOW_BINDING_H
|
||||
|
|
|
@ -34,12 +34,12 @@ namespace mkxp_sandbox {
|
|||
static struct mkxp_sandbox::bindings::rb_data_type windowvx_type;
|
||||
static VALUE windowvx_class;
|
||||
|
||||
SANDBOX_COROUTINE(windowvx_binding_init,
|
||||
struct windowvx_binding_init : boost::asio::coroutine {
|
||||
SANDBOX_DEF_ALLOC(windowvx_type)
|
||||
SANDBOX_DEF_DFREE(WindowVX)
|
||||
|
||||
static VALUE initialize(int32_t argc, wasm_ptr_t argv, VALUE self) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
WindowVX *window;
|
||||
VALUE viewport_obj;
|
||||
Viewport *viewport;
|
||||
|
@ -97,7 +97,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(argc, argv, self);
|
||||
}
|
||||
|
@ -140,7 +140,7 @@ namespace mkxp_sandbox {
|
|||
SANDBOX_DEF_GFX_PROP_I(WindowVX, Openness, openness);
|
||||
|
||||
static VALUE move(VALUE self, VALUE xv, VALUE yv, VALUE wv, VALUE hv) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
WindowVX *window;
|
||||
int32_t x;
|
||||
int32_t y;
|
||||
|
@ -160,7 +160,7 @@ namespace mkxp_sandbox {
|
|||
|
||||
return SANDBOX_NIL;
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
return sb()->bind<struct coro>()()(self, xv, yv, wv, hv);
|
||||
}
|
||||
|
@ -217,7 +217,7 @@ namespace mkxp_sandbox {
|
|||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
}
|
||||
|
||||
#endif // MKXPZ_SANDBOX_WINDOWVX_BINDING_H
|
||||
|
|
|
@ -616,11 +616,10 @@ File.readlines('tags', chomp: true).each do |line|
|
|||
|
||||
coroutine_declaration = <<~HEREDOC
|
||||
struct #{func_name} : boost::asio::coroutine {
|
||||
friend struct bindings::stack_frame_guard<struct #{func_name}>;
|
||||
#{coroutine_ret} operator()(#{declaration_args.join(', ')});
|
||||
#{func_name}(struct binding_base &b);
|
||||
#{coroutine_destructor.empty? ? '' : "~#{func_name}();\n "}private:
|
||||
struct binding_base &bind;
|
||||
#{func_name}(struct binding_base &b);
|
||||
#{fields.empty? ? '' : fields.map { |field| " #{field};\n" }.join}};
|
||||
HEREDOC
|
||||
|
||||
|
|
12
src/core.cpp
12
src/core.cpp
|
@ -223,13 +223,13 @@ static void audio_render(size_t samples) {
|
|||
}
|
||||
|
||||
static VALUE func(VALUE arg) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
void operator()() {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_AWAIT(sandbox_binding_init);
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
sb()->bind<struct coro>()()();
|
||||
|
||||
|
@ -237,27 +237,27 @@ static VALUE func(VALUE arg) {
|
|||
}
|
||||
|
||||
static VALUE rescue(VALUE arg, VALUE exception) {
|
||||
SANDBOX_COROUTINE(coro,
|
||||
struct coro : boost::asio::coroutine {
|
||||
void operator()(VALUE exception) {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_AWAIT(rb_eval_string, "puts 'Entered rescue()'");
|
||||
SANDBOX_AWAIT(rb_p, exception);
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
sb()->bind<struct coro>()()(exception);
|
||||
|
||||
return arg;
|
||||
}
|
||||
|
||||
SANDBOX_COROUTINE(main,
|
||||
struct main : boost::asio::coroutine {
|
||||
void operator()() {
|
||||
BOOST_ASIO_CORO_REENTER (this) {
|
||||
SANDBOX_AWAIT(rb_rescue2, func, SANDBOX_NIL, rescue, SANDBOX_NIL, sb()->rb_eException(), 0);
|
||||
}
|
||||
}
|
||||
)
|
||||
};
|
||||
|
||||
static void deinit_sandbox() {
|
||||
shared_state_initialized = false;
|
||||
|
|
Loading…
Add table
Reference in a new issue