Skip to content

Instantly share code, notes, and snippets.

@miura1729
Created January 18, 2026 02:53
Show Gist options
  • Select an option

  • Save miura1729/ce2b37dd5f86f4437620359b590191a0 to your computer and use it in GitHub Desktop.

Select an option

Save miura1729/ce2b37dd5f86f4437620359b590191a0 to your computer and use it in GitHub Desktop.
#include <mruby.h>
#include <mruby/value.h>
#include <mruby/array.h>
#include <mruby/hash.h>
#include <mruby/throw.h>
#include <mruby/proc.h>
#include <mruby/string.h>
#include <mruby/range.h>
#include <mruby/error.h>
#include <mruby/variable.h>
#include <mruby/throw.h>
#include <mruby/data.h>
#include <mruby/class.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <pthread.h>
#undef mrb_int
typedef mrb_float mrb_float2;
#define mrb_float_value2(n) ({\
mrb_value rc; \
rc.f = n; \
rc; \
})
#define mmc_boxing_array(src, size, boxing_func) ({ \
mrb_value ary; \
ary = mrb_ary_new_capa(mrb, (size)); \
for (int i = 0; i < (size); i++) { \
mrb_ary_push(mrb, ary, (boxing_func)(mrb, (src)[i])); \
} \
ary; \
})
#define ARY_PTR2(a) ({struct RArray* ary=(a);ARY_PTR(ary);})
#define ARY_LEN2(a) ({struct RArray* ary=(a);ARY_LEN(ary);})
typedef void *gproc;
struct gctab {
int size;
int csize;
int osize;
struct gctab *prev;
mrb_value **complex;
mrb_value **object;
void *caller_alloc;
int ret_status;
mrb_value *single[0];
};
typedef mrb_value mrb_value_mutex;
typedef mrb_value mrb_value_mutex_emptylock;
struct mutex_wrapper {
pthread_mutex_t mp;
mrb_value obj;
};
struct mutex_wrapper_emptylock {
pthread_mutex_t mp;
pthread_cond_t empty_cond;
mrb_value obj;
};
void mrb_mutex_free(mrb_state *mrb, void *data)
{
struct mutex_wrapper *mutex_data = (struct mutex_wrapper *)data;
pthread_mutex_destroy(&mutex_data->mp);
mrb_free(mrb, data);
}
mrb_data_type mutex_data_header = {"Mutex Data", mrb_mutex_free};
mrb_data_type thread_data_header = {"Thread Data", mrb_free};
struct thread_list {
struct pthead_t *thread;
mrb_state *mrb;
struct thread_list *next;
};
struct mmc_system {
struct RClass *pthread_class;
struct thread_list *thread_list;
mrb_state *root_mrb;
pthread_mutex_t *io_mutex;
pthread_mutex_t *gc_mutex;
};
void mrb_mark_local(mrb_state *mrb)
{
if (mrb->ud == NULL) {
return;
}
struct thread_list *thlist = ((struct mmc_system *)mrb->ud)->thread_list;
while (thlist) {
mrb_state *tmrb = thlist->mrb;
struct gctab *curtab = (struct gctab *)tmrb->allocf_ud;
thlist = thlist->next;
while (curtab) {
for (int i = curtab->size; i--;) {
if (!mrb_immediate_p(*curtab->single[i])) {
mrb_gc_mark(mrb, mrb_basic_ptr(*curtab->single[i]));
}
}
for (int i = curtab->osize; i--;) {
if (!mrb_immediate_p(*curtab->object[i])) {
mrb_gc_mark(mrb, mrb_basic_ptr(*curtab->object[i]));
}
}
for (int i = curtab->csize; i--;) {
mrb_value *cptr = curtab->complex[i];
for (int j = 0; cptr[j].value.ttt != MRB_TT_FREE; j++) {
if (!mrb_immediate_p(cptr[i])) {
mrb_gc_mark(mrb, mrb_basic_ptr(cptr[j]));
}
}
}
curtab = curtab->prev;
}
}
}
struct env2 {
struct env0 *prev;
};
struct thprocarg984 {
mrb_state *mrb;
gproc cgproc;
mrb_value_mutex_emptylock v719;
gproc v720;
struct gctab *prevgctab;
};
struct thprocarg1220 {
mrb_state *mrb;
gproc cgproc;
mrb_value_mutex_emptylock v988;
gproc v989;
struct gctab *prevgctab;
};
struct env3 {
mrb_value v749;
mrb_value_mutex_emptylock v745;
mrb_value_mutex_emptylock v738;
struct env2 *prev;
};
struct env17 {
mrb_value v1015;
mrb_value_mutex_emptylock v1014;
mrb_value_mutex_emptylock v1007;
struct env2 *prev;
};
struct cls0_39 {
};
struct cls5_39 {
pthread_t thread;
void *argv;
void (*thread_func)(void *);
};
struct env7 {
struct env3 *prev;
};
struct env14 {
struct env3 *prev;
};
struct env4 {
struct env3 *prev;
};
struct thprocarg843 {
mrb_state *mrb;
gproc cgproc;
mrb_value_mutex_emptylock v777;
mrb_int v778;
gproc v779;
struct gctab *prevgctab;
};
struct env9 {
mrb_value v863;
struct env3 *prev;
};
struct env16 {
struct env3 *prev;
};
struct env18 {
struct env17 *prev;
};
struct thprocarg1104 {
mrb_state *mrb;
gproc cgproc;
mrb_value_mutex_emptylock v1043;
mrb_int v1044;
gproc v1045;
struct gctab *prevgctab;
};
struct env20 {
mrb_value v1124;
struct env17 *prev;
};
struct env23 {
struct env17 *prev;
};
struct env8 {
struct env4 *prev;
};
struct env19 {
struct env18 *prev;
};
struct env10 {
struct env9 *prev;
};
struct env11 {
struct env9 *prev;
};
struct env15 {
struct env9 *prev;
};
struct env21 {
struct env20 *prev;
};
struct env22 {
struct env20 *prev;
};
static mrb_value main_Object_0(mrb_state *, mrb_value v9,struct gctab *);
mrb_value const0;
mrb_value const1;
struct proc3 {
int id;
void *code[1];
struct env2 *env;
mrb_value self;
};
struct proc17 {
int id;
void *code[1];
struct env2 *env;
mrb_value self;
};
static mrb_value main__Object__1(mrb_state *, mrb_value v685,struct gctab *);
static mrb_value p3_Object_0_2(mrb_state *, gproc cgproc, mrb_value_mutex_emptylock v725, gproc v726, struct gctab *);
mrb_value const2;
struct proc4 {
int id;
void *code[2];
struct env3 *env;
mrb_value self;
};
struct proc9 {
int id;
void *code[2];
struct env3 *env;
mrb_value self;
};
struct proc16 {
int id;
void *code[1];
struct env3 *env;
mrb_value self;
};
static mrb_value p17_Object_1_21(mrb_state *, gproc cgproc, mrb_value_mutex_emptylock v994, gproc v995, struct gctab *);
struct proc18 {
int id;
void *code[2];
struct env17 *env;
mrb_value self;
};
struct proc20 {
int id;
void *code[2];
struct env17 *env;
mrb_value self;
};
struct proc23 {
int id;
void *code[1];
struct env17 *env;
mrb_value self;
};
static mrb_int times__Fixnum__3(mrb_state *, mrb_int v2213, gproc v2214,struct gctab *);
static mrb_int times__Fixnum__9(mrb_state *, mrb_int v2213, gproc v2214,struct gctab *);
static mrb_value each__Array__19(mrb_state *, mrb_value v3956, gproc v3957,struct gctab *);
static mrb_int times__Fixnum__22(mrb_state *, mrb_int v2213, gproc v2214,struct gctab *);
static mrb_int times__Fixnum__28(mrb_state *, mrb_int v2213, gproc v2214,struct gctab *);
static mrb_value each__Array__37(mrb_state *, mrb_value v3956, gproc v3957,struct gctab *);
static mrb_value p4_Object_0_7(mrb_state *, gproc cgproc, mrb_int v756, struct gctab *);
struct proc8 {
int id;
void *code[3];
struct env4 *env;
mrb_value self;
};
static mrb_value p9_Object_1_18(mrb_state *, gproc cgproc, mrb_int v854, struct gctab *);
struct proc10 {
int id;
void *code[2];
struct env9 *env;
mrb_value self;
};
struct proc11 {
int id;
void *code[1];
struct env9 *env;
mrb_value self;
};
struct proc15 {
int id;
void *code[1];
struct env9 *env;
mrb_value self;
};
static struct cls5_39 * p16_Object_2_20(mrb_state *, gproc cgproc, mrb_value v966, struct gctab *);
static mrb_value p18_Object_0_26(mrb_state *, gproc cgproc, mrb_int v1022, struct gctab *);
struct proc19 {
int id;
void *code[3];
struct env18 *env;
mrb_value self;
};
static mrb_value p20_Object_1_36(mrb_state *, gproc cgproc, mrb_int v1115, struct gctab *);
struct proc21 {
int id;
void *code[2];
struct env20 *env;
mrb_value self;
};
struct proc22 {
int id;
void *code[2];
struct env20 *env;
mrb_value self;
};
static struct cls5_39 * p23_Object_2_38(mrb_state *, gproc cgproc, mrb_value v1202, struct gctab *);
static mrb_value p8_Object_0_8(mrb_state *, gproc cgproc, mrb_value_mutex_emptylock v784, mrb_int v785, gproc v786, struct gctab *);
static mrb_value p19_Object_0_27(mrb_state *, gproc cgproc, mrb_value_mutex_emptylock v1050, mrb_int v1051, gproc v1052, struct gctab *);
static mrb_int times__Fixnum__11(mrb_state *, mrb_int v2213, gproc v2214,struct gctab *);
static mrb_value each__Array__14(mrb_state *, mrb_value v3956, gproc v3957,struct gctab *);
static mrb_value each__Array__16(mrb_state *, mrb_value v3956, gproc v3957,struct gctab *);
static mrb_int times__Fixnum__30(mrb_state *, mrb_int v2213, gproc v2214,struct gctab *);
static mrb_value each__Array__33(mrb_state *, mrb_value v3956, gproc v3957,struct gctab *);
static mrb_value p10_Object_0_13(mrb_state *, gproc cgproc, mrb_int v870, struct gctab *);
static mrb_value p11_Object_1_15(mrb_state *, gproc cgproc, mrb_value v904, struct gctab *);
static mrb_value p15_Object_2_17(mrb_state *, gproc cgproc, mrb_value v930, struct gctab *);
static mrb_value p21_Object_0_32(mrb_state *, gproc cgproc, mrb_int v1131, struct gctab *);
static mrb_value p22_Object_1_35(mrb_state *, gproc cgproc, mrb_value_mutex_emptylock v1169, struct gctab *);
void *apply_thproc_984(void *arg) {
struct thprocarg984 *tpargv = (struct thprocarg984 *)arg;
p3_Object_0_2(tpargv->mrb, tpargv->cgproc, tpargv->v719, tpargv->v720, tpargv->prevgctab);
return NULL;
}
void *apply_thproc_1220(void *arg) {
struct thprocarg1220 *tpargv = (struct thprocarg1220 *)arg;
p17_Object_1_21(tpargv->mrb, tpargv->cgproc, tpargv->v988, tpargv->v989, tpargv->prevgctab);
return NULL;
}
void *apply_thproc_843(void *arg) {
struct thprocarg843 *tpargv = (struct thprocarg843 *)arg;
p8_Object_0_8(tpargv->mrb, tpargv->cgproc, tpargv->v777, tpargv->v778, tpargv->v779, tpargv->prevgctab);
return NULL;
}
void *apply_thproc_1104(void *arg) {
struct thprocarg1104 *tpargv = (struct thprocarg1104 *)arg;
p19_Object_0_27(tpargv->mrb, tpargv->cgproc, tpargv->v1043, tpargv->v1044, tpargv->v1045, tpargv->prevgctab);
return NULL;
}
int main(int argc, char **argv)
{
mrb_state *mrb = mrb_open();
struct mrb_jmpbuf c_jmp;
struct gctab *gctab = (struct gctab *)alloca(sizeof(struct gctab));
struct RClass *pthread_class;
struct thread_list *thread_list;
pthread_mutex_t *io_mutex;
pthread_mutex_t *gc_mutex;
struct mmc_system *mmc_system;
gctab->prev = NULL;
gctab->size = 0;
gctab->csize = 0;
gctab->osize = 0;
gctab->ret_status = 0;
mmc_system = malloc(sizeof(struct mmc_system));
pthread_class = mrb_define_class(mrb, "Pthread", mrb->object_class);
mmc_system->pthread_class = pthread_class;
thread_list = malloc(sizeof(struct thread_list));
thread_list->thread = pthread_self();
thread_list->next = NULL;
mmc_system->thread_list = thread_list;
io_mutex = malloc(sizeof(pthread_mutex_t));
pthread_mutex_init(io_mutex, NULL);
mmc_system->root_mrb = mrb;
mmc_system->io_mutex = io_mutex;
gc_mutex = malloc(sizeof(pthread_mutex_t));
pthread_mutex_init(gc_mutex, NULL);
mmc_system->gc_mutex = gc_mutex;
mrb->ud = (void *)mmc_system;
MRB_SET_INSTANCE_TT(((struct mmc_system *)mrb->ud)->pthread_class, MRB_TT_DATA);
MRB_TRY(&c_jmp) {
mrb->jmp = &c_jmp;
main_Object_0(mrb, mrb_top_self(mrb), gctab);
}
MRB_CATCH(&c_jmp) {
mrb_p(mrb, mrb_obj_value(mrb->exc));
return 1;
}
MRB_END_EXC(&c_jmp);
return 0;
}
static mrb_value main_Object_0(mrb_state *mrb, mrb_value v9, struct gctab *prevgctab) {
mrb_value self;
mrb_value mutexself;
mrb_value v16;
struct gctab *gctab = (struct gctab *)alloca(sizeof(struct gctab) + 1 * sizeof(mrb_value *));
gctab->prev = prevgctab;
gctab->complex = NULL;
gctab->object = NULL;
gctab->size = 0;
gctab->csize = 0;
gctab->osize = 0;
gctab->ret_status = 0;
L0:;
mutexself = v9;
self = v9;
/* START END */
gctab->single[0] = &mutexself;/* normal */
gctab->size = 1;
v16 = main__Object__1(mrb, self, gctab);
return v16;
}
static mrb_value main__Object__1(mrb_state *mrb, mrb_value v685, struct gctab *prevgctab) {
struct env2 env;
struct REnv *venv = NULL;
mrb_value self;
mrb_value mutexself;
char *v713 = "START";
char *v715;
mrb_value_mutex_emptylock v716;
struct proc3 v720;
struct cls5_39 * v984;
struct cls5_39 * ubv984;
;
struct thread_list *thlist984 = malloc(sizeof(struct thread_list));
struct thread_list *orgthlist984 = ((struct mmc_system *)mrb->ud)->thread_list;
struct proc17 v989;
struct cls5_39 * v1220;
struct cls5_39 * ubv1220;
;
struct thread_list *thlist1220 = malloc(sizeof(struct thread_list));
struct thread_list *orgthlist1220 = ((struct mmc_system *)mrb->ud)->thread_list;
mrb_value v1226;
mrb_value_mutex_emptylock v1278;
struct cls5_39 * v1279;
struct cls5_39 * v1280;
mrb_int v1281;
mrb_bool v1289;/*snd1*/
mrb_value v1240;
char *v1243 = "foo";
char *v1245;
mrb_value v1249;
mrb_int v1273;/*snd1*/
struct cls5_39 * v1301;
struct cls5_39 * v1303;
struct cls5_39 * v1304;
struct cls5_39 * v1306;
char *v1308 = "OK";
char *v1310;
int ai = mrb_gc_arena_save(mrb);
struct gctab *gctab = (struct gctab *)alloca(sizeof(struct gctab) + 2 * sizeof(mrb_value *));
gctab->prev = prevgctab;
gctab->complex = NULL;
gctab->object = NULL;
gctab->size = 0;
gctab->csize = 0;
gctab->osize = 0;
gctab->ret_status = 0;
L24:;
mutexself = v685;
self = v685;
/* START END */
gctab->size = 0;
mrb->allocf_ud = (void *)gctab;
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
mrb->allocf_ud = (void *)gctab;
mrb_p(mrb, (mrb_str_new_cstr(mrb, "START")));
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
v715 = "START";
{
mrb_value tmpele[] = {
};
gctab->size = 0;
mrb->allocf_ud = (void *)gctab;
v716 = mrb_nil_value();
gctab->single[gctab->size] = &v716; /* conversion */
gctab->size++;
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
mrb_value array = mrb_ary_new_from_values(mrb, 0, tmpele);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
mrb->allocf_ud = (void *)gctab;
v716 = mrb_nil_value();
gctab->single[gctab->size] = &v716; /* conversion */
gctab->size++;
v716 = ({
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
struct mutex_wrapper_emptylock *mutex = malloc(sizeof(struct mutex_wrapper_emptylock));
mrb_value mutexobj = mrb_obj_value(mrb_data_object_alloc(mrb, ((struct mmc_system *)mrb->ud)->pthread_class, mutex, &mutex_data_header));
pthread_mutex_init(&mutex->mp, NULL);
pthread_cond_init(&mutex->empty_cond, NULL);
mutex->obj = array;
mrb_iv_set(mrb, mutexobj, mrb_intern_cstr(mrb, "@object"), mutex->obj);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
mutexobj;
})
;
ARY_SET_LEN(mrb_ary_ptr(array), 0);
}
v720.id = 3;
v720.self = self;
v720.env = &env;
{
struct thprocarg984 *tpargv = malloc(sizeof(struct thprocarg984));
mrb_state *nmrb = malloc(sizeof(mrb_state));
*nmrb = *mrb;
tpargv->mrb = nmrb;
tpargv->cgproc = ((gproc)&v720);
tpargv->v719 = v716;
tpargv->v720 = ((gproc)&v720);
tpargv->prevgctab = gctab;
ubv984 = malloc(sizeof(*ubv984));
ubv984->argv = tpargv;
pthread_create(&ubv984->thread, NULL, apply_thproc_984, tpargv);
thlist984->thread = ubv984->thread;
thlist984->mrb = nmrb;
thlist984->next = orgthlist984;
((struct mmc_system *)mrb->ud)->thread_list = thlist984;
v984 = ubv984;
}
v989.id = 17;
v989.self = self;
v989.env = &env;
{
struct thprocarg1220 *tpargv = malloc(sizeof(struct thprocarg1220));
mrb_state *nmrb = malloc(sizeof(mrb_state));
*nmrb = *mrb;
tpargv->mrb = nmrb;
tpargv->cgproc = ((gproc)&v989);
tpargv->v988 = v716;
tpargv->v989 = ((gproc)&v989);
tpargv->prevgctab = gctab;
ubv1220 = malloc(sizeof(*ubv1220));
ubv1220->argv = tpargv;
pthread_create(&ubv1220->thread, NULL, apply_thproc_1220, tpargv);
thlist1220->thread = ubv1220->thread;
thlist1220->mrb = nmrb;
thlist1220->next = orgthlist1220;
((struct mmc_system *)mrb->ud)->thread_list = thlist1220;
v1220 = ubv1220;
}
sleep(1);
v1226 = (mrb_fixnum_value(1));
v1278 = v716; /* 1*/
v1279 = v984; /* 1*/
v1280 = v1220; /* 1*/
v1281 = 2; /* 1*/
L28:;
v1289 = (v1281 > 0);
if (v1289) goto L25; else goto L29;
L25:;
mrb->allocf_ud = (void *)gctab;
v1240 = ({
struct mutex_wrapper *mutex = (struct mutex_wrapper *)DATA_PTR(mrb_ary_pop(mrb, ({
struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v1278);
struct mrb_value tmp = mutex->obj;
{
pthread_mutex_t *mut = (&mutex->mp);
pthread_mutex_lock(mut);
}
while (ARY_LEN2(mrb_ary_ptr(tmp)) == 0) {
pthread_cond_wait(&mutex->empty_cond, &mutex->mp);
}
tmp;
})
));
{
pthread_mutex_t *mut = (&mutex->mp);
pthread_mutex_lock(mut);
}
mrb_value tmp = mutex->obj;
tmp;
})
;
pthread_mutex_unlock(&((struct mutex_wrapper *)(DATA_PTR(v1278)))->mp);
mrb->allocf_ud = (void *)gctab;
gctab->single[0] = &v1278;/* normal */
gctab->single[1] = &v1240;/* normal */
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
mrb->allocf_ud = (void *)gctab;
mrb_p(mrb, (mrb_str_new_cstr(mrb, "foo")));
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
v1245 = "foo";
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
mrb->allocf_ud = (void *)gctab;
mrb_p(mrb, v1240);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
v1249 = v1240;
if ((mrb_test(v1240))) goto L26; else goto L27;
L26:;
v1278 = v1278; /* 2*/
v1279 = v1279; /* 2*/
v1280 = v1280; /* 2*/
v1281 = v1281; /* 2*/
goto L28;
L27:;
v1273 = (v1281 - 1);
v1278 = v1278; /* 3*/
v1279 = v1279; /* 3*/
v1280 = v1280; /* 3*/
v1281 = v1273; /* 3*/
goto L28;
L29:;
{
void *ret;
pthread_join(v1279->thread, &ret);
}
{
void *ret;
pthread_join(v1280->thread, &ret);
}
mrb->allocf_ud = (void *)gctab;
gctab->size = 0;
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
mrb->allocf_ud = (void *)gctab;
mrb_p(mrb, (mrb_str_new_cstr(mrb, "OK")));
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
v1310 = "OK";
mrb_gc_arena_restore(mrb, ai);
return mrb_nil_value();
mrb_gc_arena_restore(mrb, ai);
}
static mrb_value p3_Object_0_2(mrb_state *mrb, gproc cgproc, mrb_value_mutex_emptylock v725, gproc v726, struct gctab *prevgctab) {
struct proc3 *proc = (struct proc3 *)cgproc;
mrb_value v724 = proc->self;
struct env3 env;
struct REnv *venv = NULL;
mrb_value self;
mrb_value mutexself;
mrb_value_mutex_emptylock v733;
gproc v734;
mrb_value_mutex_emptylock v738;
mrb_value_mutex_emptylock v745;
mrb_value v748;
struct proc4 v751;
mrb_int v847;
struct proc9 v849;
mrb_int v955;
mrb_value_mutex_emptylock v959;
mrb_value_mutex_emptylock v4091;
struct proc16 v961;
mrb_value v982;
int ai = mrb_gc_arena_save(mrb);
struct gctab *gctab = (struct gctab *)alloca(sizeof(struct gctab) + 3 * sizeof(mrb_value *));
gctab->prev = prevgctab;
gctab->complex = NULL;
gctab->object = NULL;
gctab->size = 0;
gctab->csize = 0;
gctab->osize = 0;
gctab->ret_status = 0;
env.prev = proc->env;
L30:;
mutexself = v724;
self = v724;
v733 = v725;
v734 = v726;
/* START END */
env.v738 = v725;/*enter */
{
mrb_value tmpele[] = {
};
gctab->size = 0;
mrb->allocf_ud = (void *)gctab;
v745 = mrb_nil_value();
gctab->single[gctab->size] = &v745; /* conversion */
gctab->size++;
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
mrb_value array = mrb_ary_new_from_values(mrb, 0, tmpele);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
mrb->allocf_ud = (void *)gctab;
v745 = mrb_nil_value();
gctab->single[gctab->size] = &v745; /* conversion */
gctab->size++;
v745 = ({
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
struct mutex_wrapper_emptylock *mutex = malloc(sizeof(struct mutex_wrapper_emptylock));
mrb_value mutexobj = mrb_obj_value(mrb_data_object_alloc(mrb, ((struct mmc_system *)mrb->ud)->pthread_class, mutex, &mutex_data_header));
pthread_mutex_init(&mutex->mp, NULL);
pthread_cond_init(&mutex->empty_cond, NULL);
mutex->obj = array;
mrb_iv_set(mrb, mutexobj, mrb_intern_cstr(mrb, "@object"), mutex->obj);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
mutexobj;
})
;
ARY_SET_LEN(mrb_ary_ptr(array), 0);
}
env.v745 = v745;/*foo*/
gctab->single[0] = &v725;/* normal */
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
mrb->allocf_ud = (void *)gctab;
{
mrb_value ary = mrb_ary_new_capa(mrb, 1);
ARY_SET_LEN(mrb_ary_ptr(ary), 0);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
v748 = ary;
}
env.v749 = v748;/*foo*/
v751.id = 4;
v751.self = self;
v751.env = &env;
gctab->single[2] = &v748;/* normal */
gctab->size = 3;
v847 = times__Fixnum__3(mrb, 9, ((gproc)&v751), gctab);
v849.id = 9;
v849.self = self;
v849.env = &env;
v955 = times__Fixnum__9(mrb, 3, ((gproc)&v849), gctab);
mrb->allocf_ud = (void *)gctab;
v4091 = ({
struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v725);
struct mrb_value tmp = mutex->obj;
{
pthread_mutex_t *mut = (&mutex->mp);
pthread_mutex_lock(mut);
}
tmp;
})
;
mrb_ary_unshift(mrb, v4091, ({
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
struct mutex_wrapper *mutex = malloc(sizeof(struct mutex_wrapper));
mrb_value mutexobj = mrb_obj_value(mrb_data_object_alloc(mrb, ((struct mmc_system *)mrb->ud)->pthread_class, mutex, &mutex_data_header));
pthread_mutex_init(&mutex->mp, NULL);
mutex->obj = mrb_nil_value();
mrb_iv_set(mrb, mutexobj, mrb_intern_cstr(mrb, "@object"), mutex->obj);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
mutexobj;
})
);
v959 = v725;
pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v725)))->mp);
pthread_cond_signal(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v725)))->empty_cond);
v961.id = 16;
v961.self = self;
v961.env = &env;
v982 = each__Array__19(mrb, v748, ((gproc)&v961), gctab);
mrb_gc_arena_restore(mrb, ai);
return v982;
mrb_gc_arena_restore(mrb, ai);
}
static mrb_value p17_Object_1_21(mrb_state *mrb, gproc cgproc, mrb_value_mutex_emptylock v994, gproc v995, struct gctab *prevgctab) {
struct proc17 *proc = (struct proc17 *)cgproc;
mrb_value v993 = proc->self;
struct env17 env;
struct REnv *venv = NULL;
mrb_value self;
mrb_value mutexself;
mrb_value_mutex_emptylock v1002;
gproc v1003;
mrb_value_mutex_emptylock v1007;
mrb_value_mutex_emptylock v1014;
mrb_value v1015;
struct proc18 v1017;
mrb_int v1108;
struct proc20 v1110;
mrb_int v1191;
mrb_value_mutex_emptylock v1195;
mrb_value_mutex_emptylock v4205;
struct proc23 v1197;
mrb_value v1218;
int ai = mrb_gc_arena_save(mrb);
struct gctab *gctab = (struct gctab *)alloca(sizeof(struct gctab) + 3 * sizeof(mrb_value *));
gctab->prev = prevgctab;
gctab->complex = NULL;
gctab->object = NULL;
gctab->size = 0;
gctab->csize = 0;
gctab->osize = 0;
gctab->ret_status = 0;
env.prev = proc->env;
L38:;
mutexself = v993;
self = v993;
v1002 = v994;
v1003 = v995;
/* START END */
env.v1007 = v994;/*enter */
{
mrb_value tmpele[] = {
};
gctab->size = 0;
mrb->allocf_ud = (void *)gctab;
v1014 = mrb_nil_value();
gctab->single[gctab->size] = &v1014; /* conversion */
gctab->size++;
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
mrb_value array = mrb_ary_new_from_values(mrb, 0, tmpele);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
mrb->allocf_ud = (void *)gctab;
v1014 = mrb_nil_value();
gctab->single[gctab->size] = &v1014; /* conversion */
gctab->size++;
v1014 = ({
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
struct mutex_wrapper_emptylock *mutex = malloc(sizeof(struct mutex_wrapper_emptylock));
mrb_value mutexobj = mrb_obj_value(mrb_data_object_alloc(mrb, ((struct mmc_system *)mrb->ud)->pthread_class, mutex, &mutex_data_header));
pthread_mutex_init(&mutex->mp, NULL);
pthread_cond_init(&mutex->empty_cond, NULL);
mutex->obj = array;
mrb_iv_set(mrb, mutexobj, mrb_intern_cstr(mrb, "@object"), mutex->obj);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
mutexobj;
})
;
ARY_SET_LEN(mrb_ary_ptr(array), 0);
}
env.v1014 = v1014;/*foo*/
{
mrb_value tmpele[] = {
};
mrb->allocf_ud = (void *)gctab;
v1015 = mrb_nil_value();
gctab->single[gctab->size] = &v1015; /* conversion */
gctab->size++;
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
mrb_value array = mrb_ary_new_from_values(mrb, 0, tmpele);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
v1015 = array;
ARY_SET_LEN(mrb_ary_ptr(array), 0);
}
env.v1015 = v1015;/*foo*/
v1017.id = 18;
v1017.self = self;
v1017.env = &env;
gctab->single[0] = &v994;/* normal */
v1108 = times__Fixnum__22(mrb, 27, ((gproc)&v1017), gctab);
v1110.id = 20;
v1110.self = self;
v1110.env = &env;
v1191 = times__Fixnum__28(mrb, 3, ((gproc)&v1110), gctab);
mrb->allocf_ud = (void *)gctab;
v4205 = ({
struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v994);
struct mrb_value tmp = mutex->obj;
{
pthread_mutex_t *mut = (&mutex->mp);
pthread_mutex_lock(mut);
}
tmp;
})
;
mrb_ary_unshift(mrb, v4205, ({
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
struct mutex_wrapper *mutex = malloc(sizeof(struct mutex_wrapper));
mrb_value mutexobj = mrb_obj_value(mrb_data_object_alloc(mrb, ((struct mmc_system *)mrb->ud)->pthread_class, mutex, &mutex_data_header));
pthread_mutex_init(&mutex->mp, NULL);
mutex->obj = mrb_nil_value();
mrb_iv_set(mrb, mutexobj, mrb_intern_cstr(mrb, "@object"), mutex->obj);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
mutexobj;
})
);
v1195 = v994;
pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v994)))->mp);
pthread_cond_signal(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v994)))->empty_cond);
v1197.id = 23;
v1197.self = self;
v1197.env = &env;
v1218 = each__Array__37(mrb, v1015, ((gproc)&v1197), gctab);
mrb_gc_arena_restore(mrb, ai);
return v1218;
mrb_gc_arena_restore(mrb, ai);
}
static mrb_int times__Fixnum__3(mrb_state *mrb, mrb_int v2213, gproc v2214, struct gctab *prevgctab) {
struct env7 env;
struct REnv *venv = NULL;
mrb_int self;
mrb_int mutexself;
gproc v2220;
gproc v2270;
mrb_int v2271;
mrb_bool v2278;/*snd1*/
mrb_value v2264;
mrb_int v2266;/*snd1*/
struct gctab *gctab = prevgctab;
L100:;
mutexself = v2213;
self = 9;
v2220 = v2214;
/* START END */
L101:;
L103:;
v2270 = v2214; /* 1*/
v2271 = 0; /* 1*/
L105:;
v2278 = (v2271 < self);
if (v2278) goto L104; else goto L106;
L104:;
v2264 = (p4_Object_0_7(mrb, v2270, v2271, gctab));
v2266 = (v2271 + 1);
v2270 = v2270; /* 2*/
v2271 = v2266; /* 2*/
goto L105;
L106:;
return self;
}
static mrb_int times__Fixnum__9(mrb_state *mrb, mrb_int v2213, gproc v2214, struct gctab *prevgctab) {
struct env7 env;
struct REnv *venv = NULL;
mrb_int self;
mrb_int mutexself;
gproc v2220;
gproc v2270;
mrb_int v2271;
mrb_bool v2278;/*snd1*/
mrb_value v2264;
mrb_int v2266;/*snd1*/
struct gctab *gctab = prevgctab;
L100:;
mutexself = v2213;
self = 3;
v2220 = v2214;
/* START END */
L101:;
L103:;
v2270 = v2214; /* 1*/
v2271 = 0; /* 1*/
L105:;
v2278 = (v2271 < self);
if (v2278) goto L104; else goto L106;
L104:;
v2264 = (p9_Object_1_18(mrb, v2270, v2271, gctab));
v2266 = (v2271 + 1);
v2270 = v2270; /* 2*/
v2271 = v2266; /* 2*/
goto L105;
L106:;
return self;
}
static mrb_value each__Array__19(mrb_state *mrb, mrb_value v3956, gproc v3957, struct gctab *prevgctab) {
struct env14 env;
struct REnv *venv = NULL;
mrb_value self;
mrb_value mutexself;
gproc v3964;
gproc v4022;
mrb_int v4023;
mrb_int v4031;
mrb_bool v4033;/*snd1*/
mrb_value v4014;
struct cls5_39 * v4016;
mrb_int v4018;/*snd1*/
struct gctab *gctab = prevgctab;
L210:;
mutexself = v3956;
self = v3956;
v3964 = v3957;
/* START END */
L211:;
L213:;
v4022 = v3957; /* 1*/
v4023 = 0; /* 1*/
L215:;
v4031 = ARY_LEN2(mrb_ary_ptr(self));
v4033 = (v4023 < v4031);
if (v4033) goto L214; else goto L216;
L214:;
{
v4014 = ARY_PTR2(mrb_ary_ptr(self))[v4023];
}
v4016 = (p16_Object_2_20(mrb, v4022, v4014, gctab));
v4018 = (v4023 + 1);
v4022 = v4022; /* 2*/
v4023 = v4018; /* 2*/
goto L215;
L216:;
return self;
}
static mrb_int times__Fixnum__22(mrb_state *mrb, mrb_int v2213, gproc v2214, struct gctab *prevgctab) {
struct env7 env;
struct REnv *venv = NULL;
mrb_int self;
mrb_int mutexself;
gproc v2220;
gproc v2270;
mrb_int v2271;
mrb_bool v2278;/*snd1*/
mrb_value v2264;
mrb_int v2266;/*snd1*/
struct gctab *gctab = prevgctab;
L100:;
mutexself = v2213;
self = 27;
v2220 = v2214;
/* START END */
L101:;
L103:;
v2270 = v2214; /* 1*/
v2271 = 0; /* 1*/
L105:;
v2278 = (v2271 < self);
if (v2278) goto L104; else goto L106;
L104:;
v2264 = (p18_Object_0_26(mrb, v2270, v2271, gctab));
v2266 = (v2271 + 1);
v2270 = v2270; /* 2*/
v2271 = v2266; /* 2*/
goto L105;
L106:;
return self;
}
static mrb_int times__Fixnum__28(mrb_state *mrb, mrb_int v2213, gproc v2214, struct gctab *prevgctab) {
struct env7 env;
struct REnv *venv = NULL;
mrb_int self;
mrb_int mutexself;
gproc v2220;
gproc v2270;
mrb_int v2271;
mrb_bool v2278;/*snd1*/
mrb_value v2264;
mrb_int v2266;/*snd1*/
struct gctab *gctab = prevgctab;
L100:;
mutexself = v2213;
self = 3;
v2220 = v2214;
/* START END */
L101:;
L103:;
v2270 = v2214; /* 1*/
v2271 = 0; /* 1*/
L105:;
v2278 = (v2271 < self);
if (v2278) goto L104; else goto L106;
L104:;
v2264 = (p20_Object_1_36(mrb, v2270, v2271, gctab));
v2266 = (v2271 + 1);
v2270 = v2270; /* 2*/
v2271 = v2266; /* 2*/
goto L105;
L106:;
return self;
}
static mrb_value each__Array__37(mrb_state *mrb, mrb_value v3956, gproc v3957, struct gctab *prevgctab) {
struct env14 env;
struct REnv *venv = NULL;
mrb_value self;
mrb_value mutexself;
gproc v3964;
gproc v4022;
mrb_int v4023;
mrb_int v4031;
mrb_bool v4033;/*snd1*/
mrb_value v4014;
struct cls5_39 * v4016;
mrb_int v4018;/*snd1*/
struct gctab *gctab = prevgctab;
L210:;
mutexself = v3956;
self = v3956;
v3964 = v3957;
/* START END */
L211:;
L213:;
v4022 = v3957; /* 1*/
v4023 = 0; /* 1*/
L215:;
v4031 = ARY_LEN2(mrb_ary_ptr(self));
v4033 = (v4023 < v4031);
if (v4033) goto L214; else goto L216;
L214:;
{
v4014 = ARY_PTR2(mrb_ary_ptr(self))[v4023];
}
v4016 = (p23_Object_2_38(mrb, v4022, v4014, gctab));
v4018 = (v4023 + 1);
v4022 = v4022; /* 2*/
v4023 = v4018; /* 2*/
goto L215;
L216:;
return self;
}
static mrb_value p4_Object_0_7(mrb_state *mrb, gproc cgproc, mrb_int v756, struct gctab *prevgctab) {
struct proc4 *proc = (struct proc4 *)cgproc;
mrb_value v755 = proc->self;
struct env4 env;
struct REnv *venv = NULL;
mrb_value self;
mrb_value mutexself;
mrb_int v764;
mrb_value v774;
mrb_value_mutex_emptylock v777;
mrb_int v778;/*snd*/
struct proc8 v779;
mrb_value v843;
struct cls5_39 * ubv843;
;
struct thread_list *thlist843 = malloc(sizeof(struct thread_list));
struct thread_list *orgthlist843 = ((struct mmc_system *)mrb->ud)->thread_list;
mrb_value v845;
mrb_value v2313;
struct gctab *gctab = prevgctab;
env.prev = proc->env;
L31:;
mutexself = v755;
self = v755;
v764 = v756;
/* START END */
v774 = proc->env->v749;
v777 = proc->env->v745;
v778 = v756;
v779.id = 8;
v779.self = self;
v779.env = &env;
{
struct thprocarg843 *tpargv = malloc(sizeof(struct thprocarg843));
mrb_state *nmrb = malloc(sizeof(mrb_state));
*nmrb = *mrb;
tpargv->mrb = nmrb;
tpargv->cgproc = ((gproc)&v779);
tpargv->v777 = v777;
tpargv->v778 = v778;
tpargv->v779 = ((gproc)&v779);
tpargv->prevgctab = gctab;
ubv843 = malloc(sizeof(*ubv843));
ubv843->argv = tpargv;
pthread_create(&ubv843->thread, NULL, apply_thproc_843, tpargv);
thlist843->thread = ubv843->thread;
thlist843->mrb = nmrb;
thlist843->next = orgthlist843;
((struct mmc_system *)mrb->ud)->thread_list = thlist843;
v843 = (mrb_obj_value(mrb_data_object_alloc(mrb, ((struct mmc_system *)mrb->ud)->pthread_class, ubv843, &thread_data_header)));
}
mrb->allocf_ud = (void *)gctab;
v2313 = v774;
mrb_ary_push(mrb, v2313, v843);
v845 = v774;
return v845;
}
static mrb_value p9_Object_1_18(mrb_state *mrb, gproc cgproc, mrb_int v854, struct gctab *prevgctab) {
struct proc9 *proc = (struct proc9 *)cgproc;
mrb_value v853 = proc->self;
struct env9 env;
struct REnv *venv = NULL;
mrb_value self;
mrb_value mutexself;
mrb_int v860;
mrb_value v863;
struct proc10 v865;
mrb_int v896;
mrb_value v897;
struct proc11 v899;
mrb_value v919;
mrb_value_mutex_emptylock v920;
mrb_value_mutex_emptylock v923;
mrb_value_mutex_emptylock v4051;
struct proc15 v925;
mrb_value v953;
int ai = mrb_gc_arena_save(mrb);
struct gctab *gctab = (struct gctab *)alloca(sizeof(struct gctab) + 2 * sizeof(mrb_value *));
gctab->prev = prevgctab;
gctab->complex = NULL;
gctab->object = NULL;
gctab->size = 0;
gctab->csize = 0;
gctab->osize = 0;
gctab->ret_status = 0;
env.prev = proc->env;
L33:;
mutexself = v853;
self = v853;
v860 = v854;
/* START END */
{
mrb_value tmpele[] = {
};
gctab->size = 0;
mrb->allocf_ud = (void *)gctab;
v863 = mrb_nil_value();
gctab->single[gctab->size] = &v863; /* conversion */
gctab->size++;
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
mrb_value array = mrb_ary_new_from_values(mrb, 0, tmpele);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
v863 = array;
ARY_SET_LEN(mrb_ary_ptr(array), 0);
}
env.v863 = v863;/*foo*/
v865.id = 10;
v865.self = self;
v865.env = &env;
v896 = times__Fixnum__11(mrb, 3, ((gproc)&v865), gctab);
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
mrb->allocf_ud = (void *)gctab;
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
v897 = mrb_str_new(mrb, "HoHo Let's make present\n", 24);
v899.id = 11;
v899.self = self;
v899.env = &env;
gctab->single[1] = &v897;/* normal */
gctab->size = 2;
v919 = each__Array__14(mrb, v863, ((gproc)&v899), gctab);
v920 = proc->env->v738;
mrb->allocf_ud = (void *)gctab;
v4051 = ({
struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v920);
struct mrb_value tmp = mutex->obj;
{
pthread_mutex_t *mut = (&mutex->mp);
pthread_mutex_lock(mut);
}
tmp;
})
;
mrb_ary_unshift(mrb, v4051, ({
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
struct mutex_wrapper *mutex = malloc(sizeof(struct mutex_wrapper));
mrb_value mutexobj = mrb_obj_value(mrb_data_object_alloc(mrb, ((struct mmc_system *)mrb->ud)->pthread_class, mutex, &mutex_data_header));
pthread_mutex_init(&mutex->mp, NULL);
mutex->obj = v897;
mrb_iv_set(mrb, mutexobj, mrb_intern_cstr(mrb, "@object"), mutex->obj);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
mutexobj;
})
);
v923 = v920;
pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v920)))->mp);
pthread_cond_signal(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v920)))->empty_cond);
v925.id = 15;
v925.self = self;
v925.env = &env;
v953 = each__Array__16(mrb, v863, ((gproc)&v925), gctab);
mrb_gc_arena_restore(mrb, ai);
return v953;
mrb_gc_arena_restore(mrb, ai);
}
static struct cls5_39 * p16_Object_2_20(mrb_state *mrb, gproc cgproc, mrb_value v966, struct gctab *prevgctab) {
struct proc16 *proc = (struct proc16 *)cgproc;
mrb_value v965 = proc->self;
struct env16 env;
struct REnv *venv = NULL;
mrb_value self;
mrb_value mutexself;
mrb_value v971;
mrb_value v978;
struct cls5_39 * v980;
struct gctab *gctab = prevgctab;
env.prev = proc->env;
L37:;
mutexself = v965;
self = v965;
v971 = v966;
/* START END */
{
void *ret;
pthread_join(((struct cls5_39 * )DATA_PTR(v966))->thread, &ret);
}
return v980;
}
static mrb_value p18_Object_0_26(mrb_state *mrb, gproc cgproc, mrb_int v1022, struct gctab *prevgctab) {
struct proc18 *proc = (struct proc18 *)cgproc;
mrb_value v1021 = proc->self;
struct env18 env;
struct REnv *venv = NULL;
mrb_value self;
mrb_value mutexself;
mrb_int v1030;
mrb_value v1040;
mrb_value_mutex_emptylock v1043;
mrb_int v1044;/*snd*/
struct proc19 v1045;
mrb_value v1104;
struct cls5_39 * ubv1104;
;
struct thread_list *thlist1104 = malloc(sizeof(struct thread_list));
struct thread_list *orgthlist1104 = ((struct mmc_system *)mrb->ud)->thread_list;
mrb_value v1106;
mrb_value v4130;
struct gctab *gctab = prevgctab;
env.prev = proc->env;
L39:;
mutexself = v1021;
self = v1021;
v1030 = v1022;
/* START END */
v1040 = proc->env->v1015;
v1043 = proc->env->v1014;
v1044 = v1022;
v1045.id = 19;
v1045.self = self;
v1045.env = &env;
{
struct thprocarg1104 *tpargv = malloc(sizeof(struct thprocarg1104));
mrb_state *nmrb = malloc(sizeof(mrb_state));
*nmrb = *mrb;
tpargv->mrb = nmrb;
tpargv->cgproc = ((gproc)&v1045);
tpargv->v1043 = v1043;
tpargv->v1044 = v1044;
tpargv->v1045 = ((gproc)&v1045);
tpargv->prevgctab = gctab;
ubv1104 = malloc(sizeof(*ubv1104));
ubv1104->argv = tpargv;
pthread_create(&ubv1104->thread, NULL, apply_thproc_1104, tpargv);
thlist1104->thread = ubv1104->thread;
thlist1104->mrb = nmrb;
thlist1104->next = orgthlist1104;
((struct mmc_system *)mrb->ud)->thread_list = thlist1104;
v1104 = (mrb_obj_value(mrb_data_object_alloc(mrb, ((struct mmc_system *)mrb->ud)->pthread_class, ubv1104, &thread_data_header)));
}
mrb->allocf_ud = (void *)gctab;
v4130 = v1040;
mrb_ary_push(mrb, v4130, v1104);
v1106 = v1040;
return v1106;
}
static mrb_value p20_Object_1_36(mrb_state *mrb, gproc cgproc, mrb_int v1115, struct gctab *prevgctab) {
struct proc20 *proc = (struct proc20 *)cgproc;
mrb_value v1114 = proc->self;
struct env20 env;
struct REnv *venv = NULL;
mrb_value self;
mrb_value mutexself;
mrb_int v1121;
mrb_value v1124;
struct proc21 v1126;
mrb_int v1157;
mrb_value v1158;
mrb_value_mutex_emptylock v1159;
mrb_value_mutex_emptylock v1162;
mrb_value_mutex_emptylock v4173;
struct proc22 v1164;
mrb_value v1189;
int ai = mrb_gc_arena_save(mrb);
struct gctab *gctab = (struct gctab *)alloca(sizeof(struct gctab) + 2 * sizeof(mrb_value *));
gctab->prev = prevgctab;
gctab->complex = NULL;
gctab->object = NULL;
gctab->size = 0;
gctab->csize = 0;
gctab->osize = 0;
gctab->ret_status = 0;
env.prev = proc->env;
L41:;
mutexself = v1114;
self = v1114;
v1121 = v1115;
/* START END */
{
mrb_value tmpele[] = {
};
gctab->size = 0;
mrb->allocf_ud = (void *)gctab;
v1124 = mrb_nil_value();
gctab->single[gctab->size] = &v1124; /* conversion */
gctab->size++;
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
mrb_value array = mrb_ary_new_from_values(mrb, 0, tmpele);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
v1124 = array;
ARY_SET_LEN(mrb_ary_ptr(array), 0);
}
env.v1124 = v1124;/*foo*/
v1126.id = 21;
v1126.self = self;
v1126.env = &env;
v1157 = times__Fixnum__30(mrb, 9, ((gproc)&v1126), gctab);
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
mrb->allocf_ud = (void *)gctab;
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
v1158 = mrb_str_new(mrb, "HoHo Let's send present\n", 24);
v1159 = proc->env->v1007;
mrb->allocf_ud = (void *)gctab;
mrb->allocf_ud = (void *)gctab;
v4173 = ({
struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v1159);
struct mrb_value tmp = mutex->obj;
{
pthread_mutex_t *mut = (&mutex->mp);
pthread_mutex_lock(mut);
}
tmp;
})
;
mrb_ary_push(mrb, v4173, ({
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
struct mutex_wrapper *mutex = malloc(sizeof(struct mutex_wrapper));
mrb_value mutexobj = mrb_obj_value(mrb_data_object_alloc(mrb, ((struct mmc_system *)mrb->ud)->pthread_class, mutex, &mutex_data_header));
pthread_mutex_init(&mutex->mp, NULL);
mutex->obj = v1158;
mrb_iv_set(mrb, mutexobj, mrb_intern_cstr(mrb, "@object"), mutex->obj);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
mutexobj;
})
);
v1162 = v1159;
pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v1159)))->mp);
pthread_cond_signal(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v1159)))->empty_cond);
v1164.id = 22;
v1164.self = self;
v1164.env = &env;
gctab->single[1] = &v1158;/* normal */
gctab->size = 2;
v1189 = each__Array__33(mrb, v1124, ((gproc)&v1164), gctab);
mrb_gc_arena_restore(mrb, ai);
return v1189;
mrb_gc_arena_restore(mrb, ai);
}
static struct cls5_39 * p23_Object_2_38(mrb_state *mrb, gproc cgproc, mrb_value v1202, struct gctab *prevgctab) {
struct proc23 *proc = (struct proc23 *)cgproc;
mrb_value v1201 = proc->self;
struct env23 env;
struct REnv *venv = NULL;
mrb_value self;
mrb_value mutexself;
mrb_value v1207;
mrb_value v1214;
struct cls5_39 * v1216;
struct gctab *gctab = prevgctab;
env.prev = proc->env;
L44:;
mutexself = v1201;
self = v1201;
v1207 = v1202;
/* START END */
{
void *ret;
pthread_join(((struct cls5_39 * )DATA_PTR(v1202))->thread, &ret);
}
return v1216;
}
static mrb_value p8_Object_0_8(mrb_state *mrb, gproc cgproc, mrb_value_mutex_emptylock v784, mrb_int v785, gproc v786, struct gctab *prevgctab) {
struct proc8 *proc = (struct proc8 *)cgproc;
mrb_value v783 = proc->self;
struct env8 env;
struct REnv *venv = NULL;
mrb_value self;
mrb_value mutexself;
mrb_value_mutex_emptylock v793;
mrb_int v794;
gproc v795;
mrb_float2 v809;
mrb_int v814;
mrb_value v816;
char *v818 = "hobbit wake up ";
mrb_value v820; /* cat */
mrb_value v822;
mrb_value_mutex_emptylock v824;
mrb_value v825;
mrb_value_mutex_emptylock v829;
mrb_value_mutex_emptylock v2306;
mrb_value_mutex_emptylock v833;
mrb_value v835;
char *v837 = "Hobbit Work done ";
mrb_int v838;/*snd*/
mrb_value v839; /* cat */
mrb_value v841;
int ai = mrb_gc_arena_save(mrb);
struct gctab *gctab = (struct gctab *)alloca(sizeof(struct gctab) + 3 * sizeof(mrb_value *));
gctab->prev = prevgctab;
gctab->complex = NULL;
gctab->object = NULL;
gctab->size = 0;
gctab->csize = 0;
gctab->osize = 0;
gctab->ret_status = 0;
env.prev = proc->env;
L32:;
mutexself = v783;
self = v783;
v793 = v784;
v794 = v785;
v795 = v786;
/* START END */
v809 = (((mrb_float)(rand() % 0x7fffffff)) / (double)0x7fffffff);
v814 = ((mrb_int)(v809 * ((mrb_float)10)));
sleep(v814);
v816 = (mrb_fixnum_value(v814));
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
gctab->size = 0;
mrb->allocf_ud = (void *)gctab;
v820 = mrb_nil_value();
gctab->single[gctab->size] = &v820; /* conversion */
gctab->size++;
v820 = (mrb_str_new_cstr(mrb, "hobbit wake up "));
mrb->allocf_ud = (void *)gctab;
v820 = mrb_str_cat_cstr(mrb, v820, ({char *_buf = alloca(255);sprintf(_buf, "%d", v785);_buf;}));
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
gctab->single[0] = &v784;/* normal */
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
mrb->allocf_ud = (void *)gctab;
mrb_p(mrb, v820);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
v822 = v820;
{
mrb_value tmpele[] = {
};
mrb->allocf_ud = (void *)gctab;
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
mrb_value array = mrb_ary_new_from_values(mrb, 0, tmpele);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
mrb->allocf_ud = (void *)gctab;
v824 = ({
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
struct mutex_wrapper_emptylock *mutex = malloc(sizeof(struct mutex_wrapper_emptylock));
mrb_value mutexobj = mrb_obj_value(mrb_data_object_alloc(mrb, ((struct mmc_system *)mrb->ud)->pthread_class, mutex, &mutex_data_header));
pthread_mutex_init(&mutex->mp, NULL);
pthread_cond_init(&mutex->empty_cond, NULL);
mutex->obj = array;
mrb_iv_set(mrb, mutexobj, mrb_intern_cstr(mrb, "@object"), mutex->obj);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
mutexobj;
})
;
ARY_SET_LEN(mrb_ary_ptr(array), 0);
}
{
mrb_value tmpele[] = {
(mrb_fixnum_value(v785)), v824
};
mrb->allocf_ud = (void *)gctab;
v825 = mrb_nil_value();
gctab->single[gctab->size] = &v825; /* conversion */
gctab->size++;
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
mrb_value array = mrb_ary_new_from_values(mrb, 2, tmpele);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
v825 = array;
ARY_SET_LEN(mrb_ary_ptr(array), 2);
}
mrb->allocf_ud = (void *)gctab;
mrb->allocf_ud = (void *)gctab;
v2306 = ({
struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v784);
struct mrb_value tmp = mutex->obj;
{
pthread_mutex_t *mut = (&mutex->mp);
pthread_mutex_lock(mut);
}
tmp;
})
;
mrb_ary_push(mrb, v2306, ({
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
struct mutex_wrapper *mutex = malloc(sizeof(struct mutex_wrapper));
mrb_value mutexobj = mrb_obj_value(mrb_data_object_alloc(mrb, ((struct mmc_system *)mrb->ud)->pthread_class, mutex, &mutex_data_header));
pthread_mutex_init(&mutex->mp, NULL);
mutex->obj = v825;
mrb_iv_set(mrb, mutexobj, mrb_intern_cstr(mrb, "@object"), mutex->obj);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
mutexobj;
})
);
v829 = v784;
pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v784)))->mp);
pthread_cond_signal(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v784)))->empty_cond);
{
v833 = ARY_PTR2(mrb_ary_ptr(v825))[1];
}
mrb->allocf_ud = (void *)gctab;
v835 = mrb_ary_pop(mrb, ({
struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v833);
struct mrb_value tmp = mutex->obj;
{
pthread_mutex_t *mut = (&mutex->mp);
pthread_mutex_lock(mut);
}
while (ARY_LEN2(mrb_ary_ptr(tmp)) == 0) {
pthread_cond_wait(&mutex->empty_cond, &mutex->mp);
}
tmp;
})
);
pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v833)))->mp);
v838 = v785;
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
mrb->allocf_ud = (void *)gctab;
v839 = mrb_nil_value();
gctab->single[gctab->size] = &v839; /* conversion */
gctab->size++;
v839 = (mrb_str_new_cstr(mrb, "Hobbit Work done "));
mrb->allocf_ud = (void *)gctab;
v839 = mrb_str_cat_cstr(mrb, v839, ({char *_buf = alloca(255);sprintf(_buf, "%d", v838);_buf;}));
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
gctab->size = 2;
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
mrb->allocf_ud = (void *)gctab;
mrb_p(mrb, v839);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
v841 = v839;
mrb_gc_arena_restore(mrb, ai);
return v841;
mrb_gc_arena_restore(mrb, ai);
}
static mrb_value p19_Object_0_27(mrb_state *mrb, gproc cgproc, mrb_value_mutex_emptylock v1050, mrb_int v1051, gproc v1052, struct gctab *prevgctab) {
struct proc19 *proc = (struct proc19 *)cgproc;
mrb_value v1049 = proc->self;
struct env19 env;
struct REnv *venv = NULL;
mrb_value self;
mrb_value mutexself;
mrb_value_mutex_emptylock v1059;
mrb_int v1060;
gproc v1061;
mrb_float2 v1075;
mrb_int v1080;
mrb_value v1082;
char *v1084 = "tonakai wake up ";
mrb_value v1086; /* cat */
mrb_value v1088;
mrb_value_mutex_emptylock v1089;
mrb_value_mutex_emptylock v1093;
mrb_value_mutex_emptylock v4124;
mrb_value v1096;
char *v1098 = "Tonakai Work done ";
mrb_int v1099;/*snd*/
mrb_value v1100; /* cat */
mrb_value v1102;
int ai = mrb_gc_arena_save(mrb);
struct gctab *gctab = (struct gctab *)alloca(sizeof(struct gctab) + 4 * sizeof(mrb_value *));
gctab->prev = prevgctab;
gctab->complex = NULL;
gctab->object = NULL;
gctab->size = 0;
gctab->csize = 0;
gctab->osize = 0;
gctab->ret_status = 0;
env.prev = proc->env;
L40:;
mutexself = v1049;
self = v1049;
v1059 = v1050;
v1060 = v1051;
v1061 = v1052;
/* START END */
v1075 = (((mrb_float)(rand() % 0x7fffffff)) / (double)0x7fffffff);
v1080 = ((mrb_int)(v1075 * ((mrb_float)10)));
sleep(v1080);
v1082 = (mrb_fixnum_value(v1080));
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
gctab->size = 0;
mrb->allocf_ud = (void *)gctab;
v1086 = mrb_nil_value();
gctab->single[gctab->size] = &v1086; /* conversion */
gctab->size++;
v1086 = (mrb_str_new_cstr(mrb, "tonakai wake up "));
mrb->allocf_ud = (void *)gctab;
v1086 = mrb_str_cat_cstr(mrb, v1086, ({char *_buf = alloca(255);sprintf(_buf, "%d", v1051);_buf;}));
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
gctab->single[0] = &v1050;/* normal */
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
mrb->allocf_ud = (void *)gctab;
mrb_p(mrb, v1086);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
v1088 = v1086;
{
mrb_value tmpele[] = {
};
mrb->allocf_ud = (void *)gctab;
v1089 = mrb_nil_value();
gctab->single[gctab->size] = &v1089; /* conversion */
gctab->size++;
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
mrb_value array = mrb_ary_new_from_values(mrb, 0, tmpele);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
mrb->allocf_ud = (void *)gctab;
v1089 = mrb_nil_value();
gctab->single[gctab->size] = &v1089; /* conversion */
gctab->size++;
v1089 = ({
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
struct mutex_wrapper_emptylock *mutex = malloc(sizeof(struct mutex_wrapper_emptylock));
mrb_value mutexobj = mrb_obj_value(mrb_data_object_alloc(mrb, ((struct mmc_system *)mrb->ud)->pthread_class, mutex, &mutex_data_header));
pthread_mutex_init(&mutex->mp, NULL);
pthread_cond_init(&mutex->empty_cond, NULL);
mutex->obj = array;
mrb_iv_set(mrb, mutexobj, mrb_intern_cstr(mrb, "@object"), mutex->obj);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
mutexobj;
})
;
ARY_SET_LEN(mrb_ary_ptr(array), 0);
}
mrb->allocf_ud = (void *)gctab;
v4124 = ({
struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v1050);
struct mrb_value tmp = mutex->obj;
{
pthread_mutex_t *mut = (&mutex->mp);
pthread_mutex_lock(mut);
}
tmp;
})
;
mrb_ary_push(mrb, v4124, v1089);
v1093 = v1050;
pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v1050)))->mp);
pthread_cond_signal(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v1050)))->empty_cond);
mrb->allocf_ud = (void *)gctab;
v1096 = mrb_ary_pop(mrb, ({
struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v1089);
struct mrb_value tmp = mutex->obj;
{
pthread_mutex_t *mut = (&mutex->mp);
pthread_mutex_lock(mut);
}
while (ARY_LEN2(mrb_ary_ptr(tmp)) == 0) {
pthread_cond_wait(&mutex->empty_cond, &mutex->mp);
}
tmp;
})
);
pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v1089)))->mp);
v1099 = v1051;
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
mrb->allocf_ud = (void *)gctab;
v1100 = mrb_nil_value();
gctab->single[gctab->size] = &v1100; /* conversion */
gctab->size++;
v1100 = (mrb_str_new_cstr(mrb, "Tonakai Work done "));
mrb->allocf_ud = (void *)gctab;
v1100 = mrb_str_cat_cstr(mrb, v1100, ({char *_buf = alloca(255);sprintf(_buf, "%d", v1099);_buf;}));
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
gctab->size = 2;
{
pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex);
pthread_mutex_lock(mut);
}
mrb->allocf_ud = (void *)gctab;
mrb_p(mrb, v1100);
pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex);
v1102 = v1100;
mrb_gc_arena_restore(mrb, ai);
return v1102;
mrb_gc_arena_restore(mrb, ai);
}
static mrb_int times__Fixnum__11(mrb_state *mrb, mrb_int v2213, gproc v2214, struct gctab *prevgctab) {
struct env7 env;
struct REnv *venv = NULL;
mrb_int self;
mrb_int mutexself;
gproc v2220;
gproc v2270;
mrb_int v2271;
mrb_bool v2278;/*snd1*/
mrb_value v2264;
mrb_int v2266;/*snd1*/
struct gctab *gctab = prevgctab;
L100:;
mutexself = v2213;
self = 3;
v2220 = v2214;
/* START END */
L101:;
L103:;
v2270 = v2214; /* 1*/
v2271 = 0; /* 1*/
L105:;
v2278 = (v2271 < self);
if (v2278) goto L104; else goto L106;
L104:;
v2264 = (p10_Object_0_13(mrb, v2270, v2271, gctab));
v2266 = (v2271 + 1);
v2270 = v2270; /* 2*/
v2271 = v2266; /* 2*/
goto L105;
L106:;
return self;
}
static mrb_value each__Array__14(mrb_state *mrb, mrb_value v3956, gproc v3957, struct gctab *prevgctab) {
struct env14 env;
struct REnv *venv = NULL;
mrb_value self;
mrb_value mutexself;
gproc v3964;
gproc v4022;
mrb_int v4023;
mrb_int v4031;
mrb_bool v4033;/*snd1*/
mrb_value v4014;
mrb_value v4016;
mrb_int v4018;/*snd1*/
struct gctab *gctab = prevgctab;
L210:;
mutexself = v3956;
self = v3956;
v3964 = v3957;
/* START END */
L211:;
L213:;
v4022 = v3957; /* 1*/
v4023 = 0; /* 1*/
L215:;
v4031 = ARY_LEN2(mrb_ary_ptr(self));
v4033 = (v4023 < v4031);
if (v4033) goto L214; else goto L216;
L214:;
{
v4014 = ARY_PTR2(mrb_ary_ptr(self))[v4023];
}
v4016 = (p11_Object_1_15(mrb, v4022, v4014, gctab));
v4018 = (v4023 + 1);
v4022 = v4022; /* 2*/
v4023 = v4018; /* 2*/
goto L215;
L216:;
return self;
}
static mrb_value each__Array__16(mrb_state *mrb, mrb_value v3956, gproc v3957, struct gctab *prevgctab) {
struct env14 env;
struct REnv *venv = NULL;
mrb_value self;
mrb_value mutexself;
gproc v3964;
gproc v4022;
mrb_int v4023;
mrb_int v4031;
mrb_bool v4033;/*snd1*/
mrb_value v4014;
mrb_value v4016;
mrb_int v4018;/*snd1*/
struct gctab *gctab = prevgctab;
L210:;
mutexself = v3956;
self = v3956;
v3964 = v3957;
/* START END */
L211:;
L213:;
v4022 = v3957; /* 1*/
v4023 = 0; /* 1*/
L215:;
v4031 = ARY_LEN2(mrb_ary_ptr(self));
v4033 = (v4023 < v4031);
if (v4033) goto L214; else goto L216;
L214:;
{
v4014 = ARY_PTR2(mrb_ary_ptr(self))[v4023];
}
v4016 = (p15_Object_2_17(mrb, v4022, v4014, gctab));
v4018 = (v4023 + 1);
v4022 = v4022; /* 2*/
v4023 = v4018; /* 2*/
goto L215;
L216:;
return self;
}
static mrb_int times__Fixnum__30(mrb_state *mrb, mrb_int v2213, gproc v2214, struct gctab *prevgctab) {
struct env7 env;
struct REnv *venv = NULL;
mrb_int self;
mrb_int mutexself;
gproc v2220;
gproc v2270;
mrb_int v2271;
mrb_bool v2278;/*snd1*/
mrb_value v2264;
mrb_int v2266;/*snd1*/
struct gctab *gctab = prevgctab;
L100:;
mutexself = v2213;
self = 9;
v2220 = v2214;
/* START END */
L101:;
L103:;
v2270 = v2214; /* 1*/
v2271 = 0; /* 1*/
L105:;
v2278 = (v2271 < self);
if (v2278) goto L104; else goto L106;
L104:;
v2264 = (p21_Object_0_32(mrb, v2270, v2271, gctab));
v2266 = (v2271 + 1);
v2270 = v2270; /* 2*/
v2271 = v2266; /* 2*/
goto L105;
L106:;
return self;
}
static mrb_value each__Array__33(mrb_state *mrb, mrb_value v3956, gproc v3957, struct gctab *prevgctab) {
struct env14 env;
struct REnv *venv = NULL;
mrb_value self;
mrb_value mutexself;
gproc v3964;
gproc v4022;
mrb_int v4023;
mrb_int v4031;
mrb_bool v4033;/*snd1*/
mrb_value_mutex_emptylock v4014;
mrb_value v4016;
mrb_int v4018;/*snd1*/
struct gctab *gctab = prevgctab;
L210:;
mutexself = v3956;
self = v3956;
v3964 = v3957;
/* START END */
L211:;
L213:;
v4022 = v3957; /* 1*/
v4023 = 0; /* 1*/
L215:;
v4031 = ARY_LEN2(mrb_ary_ptr(self));
v4033 = (v4023 < v4031);
if (v4033) goto L214; else goto L216;
L214:;
{
v4014 = ARY_PTR2(mrb_ary_ptr(self))[v4023];
}
v4016 = (p22_Object_1_35(mrb, v4022, v4014, gctab));
v4018 = (v4023 + 1);
v4022 = v4022; /* 2*/
v4023 = v4018; /* 2*/
goto L215;
L216:;
return self;
}
static mrb_value p10_Object_0_13(mrb_state *mrb, gproc cgproc, mrb_int v870, struct gctab *prevgctab) {
struct proc10 *proc = (struct proc10 *)cgproc;
mrb_value v869 = proc->self;
struct env10 env;
struct REnv *venv = NULL;
mrb_value self;
mrb_value mutexself;
mrb_int v877;
mrb_value_mutex_emptylock v887;
mrb_value v889;
mrb_value v891;
mrb_value v894;
mrb_value v2348;
struct gctab *gctab = prevgctab;
env.prev = proc->env;
L34:;
mutexself = v869;
self = v869;
v877 = v870;
/* START END */
v887 = proc->env->prev->v745;
mrb->allocf_ud = (void *)gctab;
v889 = ({
struct mutex_wrapper *mutex = (struct mutex_wrapper *)DATA_PTR(mrb_ary_pop(mrb, ({
struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v887);
struct mrb_value tmp = mutex->obj;
{
pthread_mutex_t *mut = (&mutex->mp);
pthread_mutex_lock(mut);
}
while (ARY_LEN2(mrb_ary_ptr(tmp)) == 0) {
pthread_cond_wait(&mutex->empty_cond, &mutex->mp);
}
tmp;
})
));
{
pthread_mutex_t *mut = (&mutex->mp);
pthread_mutex_lock(mut);
}
mrb_value tmp = mutex->obj;
tmp;
})
;
pthread_mutex_unlock(&((struct mutex_wrapper *)(DATA_PTR(v887)))->mp);
v891 = proc->env->v863;
mrb->allocf_ud = (void *)gctab;
v2348 = v891;
mrb_ary_push(mrb, v2348, v889);
v894 = v891;
return v894;
}
static mrb_value p11_Object_1_15(mrb_state *mrb, gproc cgproc, mrb_value v904, struct gctab *prevgctab) {
struct proc11 *proc = (struct proc11 *)cgproc;
mrb_value v903 = proc->self;
struct env11 env;
struct REnv *venv = NULL;
mrb_value self;
mrb_value mutexself;
mrb_value v909;
mrb_int v913;
mrb_value_mutex_emptylock v914;
struct gctab *gctab = prevgctab;
env.prev = proc->env;
L35:;
mutexself = v903;
self = v903;
v909 = v904;
/* START END */
{
mrb_value *array = ARY_PTR2(mrb_ary_ptr(v909));
v913 = (mrb_fixnum(array[0]));
v914 = array[1];
}
return mrb_nil_value();
}
static mrb_value p15_Object_2_17(mrb_state *mrb, gproc cgproc, mrb_value v930, struct gctab *prevgctab) {
struct proc15 *proc = (struct proc15 *)cgproc;
mrb_value v929 = proc->self;
struct env15 env;
struct REnv *venv = NULL;
mrb_value self;
mrb_value mutexself;
mrb_value v936;
mrb_value_mutex_emptylock v947;
mrb_value_mutex_emptylock v950;
mrb_value_mutex_emptylock v4055;
struct gctab *gctab = prevgctab;
env.prev = proc->env;
L36:;
mutexself = v929;
self = v929;
v936 = v930;
/* START END */
{
v947 = ARY_PTR2(mrb_ary_ptr(v930))[1];
}
mrb->allocf_ud = (void *)gctab;
v4055 = ({
struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v947);
struct mrb_value tmp = mutex->obj;
{
pthread_mutex_t *mut = (&mutex->mp);
pthread_mutex_lock(mut);
}
tmp;
})
;
mrb_ary_push(mrb, v4055, (mrb_fixnum_value(1)));
v950 = v947;
pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v947)))->mp);
pthread_cond_signal(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v947)))->empty_cond);
return mrb_nil_value();
}
static mrb_value p21_Object_0_32(mrb_state *mrb, gproc cgproc, mrb_int v1131, struct gctab *prevgctab) {
struct proc21 *proc = (struct proc21 *)cgproc;
mrb_value v1130 = proc->self;
struct env21 env;
struct REnv *venv = NULL;
mrb_value self;
mrb_value mutexself;
mrb_int v1138;
mrb_value_mutex_emptylock v1148;
mrb_value_mutex_emptylock v1150;
mrb_value v1152;
mrb_value v1155;
mrb_value v4165;
struct gctab *gctab = prevgctab;
env.prev = proc->env;
L42:;
mutexself = v1130;
self = v1130;
v1138 = v1131;
/* START END */
v1148 = proc->env->prev->v1014;
mrb->allocf_ud = (void *)gctab;
v1150 = mrb_ary_pop(mrb, ({
struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v1148);
struct mrb_value tmp = mutex->obj;
{
pthread_mutex_t *mut = (&mutex->mp);
pthread_mutex_lock(mut);
}
while (ARY_LEN2(mrb_ary_ptr(tmp)) == 0) {
pthread_cond_wait(&mutex->empty_cond, &mutex->mp);
}
tmp;
})
);
pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v1148)))->mp);
v1152 = proc->env->v1124;
mrb->allocf_ud = (void *)gctab;
v4165 = v1152;
mrb_ary_push(mrb, v4165, v1150);
v1155 = v1152;
return v1155;
}
static mrb_value p22_Object_1_35(mrb_state *mrb, gproc cgproc, mrb_value_mutex_emptylock v1169, struct gctab *prevgctab) {
struct proc22 *proc = (struct proc22 *)cgproc;
mrb_value v1168 = proc->self;
struct env22 env;
struct REnv *venv = NULL;
mrb_value self;
mrb_value mutexself;
mrb_value_mutex_emptylock v1175;
mrb_value_mutex_emptylock v1186;
mrb_value_mutex_emptylock v4175;
struct gctab *gctab = prevgctab;
env.prev = proc->env;
L43:;
mutexself = v1168;
self = v1168;
v1175 = v1169;
/* START END */
mrb->allocf_ud = (void *)gctab;
v4175 = ({
struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v1169);
struct mrb_value tmp = mutex->obj;
{
pthread_mutex_t *mut = (&mutex->mp);
pthread_mutex_lock(mut);
}
tmp;
})
;
mrb_ary_push(mrb, v4175, (mrb_fixnum_value(1)));
v1186 = v1169;
pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v1169)))->mp);
pthread_cond_signal(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v1169)))->empty_cond);
return mrb_nil_value();
}
/*
Class Object
Instance variables
methodes
main (Literal Object, NilClass e=false l=0 var=0) -> Literal NilClass
-- effects ---
canempty pop [[MutexEmptyLock<Array<[:undef] => Literal String val="HoHo Let's make present\n"|[:undef] => Literal NilClass|[:undef] => String e=true l=0 var=0|1 => Literal String val="HoHo Let's make present\n"|1 => Literal NilClass|1 => String e=true l=0 var=0|1 => String e=false l=0 var=0> e=true l=3 th={Thread Proc<irep=-2129da70 <#<Irep:0x7fffded0c100> pos=../mruby-meta-circular/sample/santa2.rb:112>> e=false=>:canempty, Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 41, :unshift], Thread Proc<irep=-21298cd0 <#<Irep:0x7fffdeeca990> pos=../mruby-meta-circular/sample/santa2.rb:57>> e=false=>[:modify, 78, :push]}>]]
Class #<Class:MMC_EXT>
Instance variables
methodes
Module Integral
Instance variables
methodes
Class Fixnum
Instance variables
methodes
times (Literal Fixnum, Proc<irep=-212a23b0 <#<Irep:0x7fffdee62990> pos=../mruby-meta-circular/sample/santa2.rb:18>>) -> Literal Fixnum
times (Literal Fixnum, Proc<irep=-212a9f30 <#<Irep:0x7fffdee8c0b0> pos=../mruby-meta-circular/sample/santa2.rb:31>>) -> Literal Fixnum
times (Literal Fixnum, Proc<irep=-212aa050 <#<Irep:0x7fffdee8f3e0> pos=../mruby-meta-circular/sample/santa2.rb:30>>) -> Literal Fixnum
times (Literal Fixnum, Proc<irep=-21298bf0 <#<Irep:0x7fffdeee46c0> pos=../mruby-meta-circular/sample/santa2.rb:60>>) -> Literal Fixnum
times (Literal Fixnum, Proc<irep=-21297d10 <#<Irep:0x7fffdef0edc0> pos=../mruby-meta-circular/sample/santa2.rb:73>>) -> Literal Fixnum
times (Literal Fixnum, Proc<irep=-21297de0 <#<Irep:0x7fffdeef0aa0> pos=../mruby-meta-circular/sample/santa2.rb:72>>) -> Literal Fixnum
-- effects ---
Class Array
Instance variables
methodes
each (Array<[:undef] => Array<[:undef] => Literal Fixnum|[:undef] => Array<[:undef] => Literal Fixnum|1 => Literal Fixnum> e=true l=7 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-212a2290 <#<Irep:0x7fffdee7e2a0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true=>:canempty}|[:undef] => Fixnum e=false pos =true|0 => Literal Fixnum|0 => Fixnum e=false pos =true|1 => Array<[:undef] => Literal Fixnum|1 => Literal Fixnum> e=true l=7 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-212a2290 <#<Irep:0x7fffdee7e2a0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true=>:canempty}> e=true l=7 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>:arrayset}|1 => Array<[:undef] => Literal Fixnum|[:undef] => Array<[:undef] => Literal Fixnum|1 => Literal Fixnum> e=true l=7 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-212a2290 <#<Irep:0x7fffdee7e2a0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true=>:canempty}|[:undef] => Fixnum e=false pos =true|0 => Literal Fixnum|0 => Fixnum e=false pos =true|1 => Array<[:undef] => Literal Fixnum|1 => Literal Fixnum> e=true l=7 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-212a2290 <#<Irep:0x7fffdee7e2a0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true=>:canempty}> e=true l=7 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>:arrayset}> e=true l=6 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 33, :push]}, Proc<irep=-212a9be0 <#<Irep:0x7fffdeea4d60> pos=../mruby-meta-circular/sample/santa2.rb:36>>) -> Array<[:undef] => Array<[:undef] => Literal Fixnum|[:undef] => Array<[:undef] => Literal Fixnum|1 => Literal Fixnum> e=true l=7 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-212a2290 <#<Irep:0x7fffdee7e2a0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true=>:canempty}|[:undef] => Fixnum e=false pos =true|0 => Literal Fixnum|0 => Fixnum e=false pos =true|1 => Array<[:undef] => Literal Fixnum|1 => Literal Fixnum> e=true l=7 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-212a2290 <#<Irep:0x7fffdee7e2a0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true=>:canempty}> e=true l=7 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>:arrayset}|1 => Array<[:undef] => Literal Fixnum|[:undef] => Array<[:undef] => Literal Fixnum|1 => Literal Fixnum> e=true l=7 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-212a2290 <#<Irep:0x7fffdee7e2a0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true=>:canempty}|[:undef] => Fixnum e=false pos =true|0 => Literal Fixnum|0 => Fixnum e=false pos =true|1 => Array<[:undef] => Literal Fixnum|1 => Literal Fixnum> e=true l=7 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-212a2290 <#<Irep:0x7fffdee7e2a0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true=>:canempty}> e=true l=7 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>:arrayset}> e=true l=6 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 33, :push]}
each (Array<[:undef] => Array<[:undef] => Literal Fixnum|[:undef] => Array<[:undef] => Literal Fixnum|1 => Literal Fixnum> e=true l=7 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-212a2290 <#<Irep:0x7fffdee7e2a0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true=>:canempty}|[:undef] => Fixnum e=false pos =true|0 => Literal Fixnum|0 => Fixnum e=false pos =true|1 => Array<[:undef] => Literal Fixnum|1 => Literal Fixnum> e=true l=7 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-212a2290 <#<Irep:0x7fffdee7e2a0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true=>:canempty}> e=true l=7 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>:arrayset}|1 => Array<[:undef] => Literal Fixnum|[:undef] => Array<[:undef] => Literal Fixnum|1 => Literal Fixnum> e=true l=7 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-212a2290 <#<Irep:0x7fffdee7e2a0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true=>:canempty}|[:undef] => Fixnum e=false pos =true|0 => Literal Fixnum|0 => Fixnum e=false pos =true|1 => Array<[:undef] => Literal Fixnum|1 => Literal Fixnum> e=true l=7 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-212a2290 <#<Irep:0x7fffdee7e2a0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true=>:canempty}> e=true l=7 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>:arrayset}> e=true l=6 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 33, :push]}, Proc<irep=-21298100 <#<Irep:0x7fffdee9eb20> pos=../mruby-meta-circular/sample/santa2.rb:44>>) -> Array<[:undef] => Array<[:undef] => Literal Fixnum|[:undef] => Array<[:undef] => Literal Fixnum|1 => Literal Fixnum> e=true l=7 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-212a2290 <#<Irep:0x7fffdee7e2a0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true=>:canempty}|[:undef] => Fixnum e=false pos =true|0 => Literal Fixnum|0 => Fixnum e=false pos =true|1 => Array<[:undef] => Literal Fixnum|1 => Literal Fixnum> e=true l=7 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-212a2290 <#<Irep:0x7fffdee7e2a0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true=>:canempty}> e=true l=7 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>:arrayset}|1 => Array<[:undef] => Literal Fixnum|[:undef] => Array<[:undef] => Literal Fixnum|1 => Literal Fixnum> e=true l=7 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-212a2290 <#<Irep:0x7fffdee7e2a0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true=>:canempty}|[:undef] => Fixnum e=false pos =true|0 => Literal Fixnum|0 => Fixnum e=false pos =true|1 => Array<[:undef] => Literal Fixnum|1 => Literal Fixnum> e=true l=7 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-212a2290 <#<Irep:0x7fffdee7e2a0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true=>:canempty}> e=true l=7 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>:arrayset}> e=true l=6 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 33, :push]}
each (Array<[:undef] => Thread Proc<irep=-212a2290 <#<Irep:0x7fffdee7e2a0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true|1 => Thread Proc<irep=-212a2290 <#<Irep:0x7fffdee7e2a0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true> e=true l=4 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 19, :push]}, Proc<irep=-21298e80 <#<Irep:0x7fffdeeb5790> pos=../mruby-meta-circular/sample/santa2.rb:51>>) -> Array<[:undef] => Thread Proc<irep=-212a2290 <#<Irep:0x7fffdee7e2a0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true|1 => Thread Proc<irep=-212a2290 <#<Irep:0x7fffdee7e2a0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true> e=true l=4 th={Thread Proc<irep=-212a24e0 <#<Irep:0x7fffdee683c0> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 19, :push]}
each (Array<[:undef] => Array<[:undef] => Literal Fixnum|1 => Literal Fixnum> e=true l=7 th={Thread Proc<irep=-21298cd0 <#<Irep:0x7fffdeeca990> pos=../mruby-meta-circular/sample/santa2.rb:57>> e=false=>:arrayset, Thread Proc<irep=-21298ad0 <#<Irep:0x7fffdeedf590> pos=../mruby-meta-circular/sample/santa2.rb:61>> e=true=>:canempty}|1 => Array<[:undef] => Literal Fixnum|1 => Literal Fixnum> e=true l=7 th={Thread Proc<irep=-21298cd0 <#<Irep:0x7fffdeeca990> pos=../mruby-meta-circular/sample/santa2.rb:57>> e=false=>:arrayset, Thread Proc<irep=-21298ad0 <#<Irep:0x7fffdeedf590> pos=../mruby-meta-circular/sample/santa2.rb:61>> e=true=>:canempty}> e=true l=6 th={Thread Proc<irep=-21298cd0 <#<Irep:0x7fffdeeca990> pos=../mruby-meta-circular/sample/santa2.rb:57>> e=false=>[:modify, 75, :push]}, Proc<irep=-2129dea0 <#<Irep:0x7fffdef06ae0> pos=../mruby-meta-circular/sample/santa2.rb:80>>) -> Array<[:undef] => Array<[:undef] => Literal Fixnum|1 => Literal Fixnum> e=true l=7 th={Thread Proc<irep=-21298cd0 <#<Irep:0x7fffdeeca990> pos=../mruby-meta-circular/sample/santa2.rb:57>> e=false=>:arrayset, Thread Proc<irep=-21298ad0 <#<Irep:0x7fffdeedf590> pos=../mruby-meta-circular/sample/santa2.rb:61>> e=true=>:canempty}|1 => Array<[:undef] => Literal Fixnum|1 => Literal Fixnum> e=true l=7 th={Thread Proc<irep=-21298cd0 <#<Irep:0x7fffdeeca990> pos=../mruby-meta-circular/sample/santa2.rb:57>> e=false=>:arrayset, Thread Proc<irep=-21298ad0 <#<Irep:0x7fffdeedf590> pos=../mruby-meta-circular/sample/santa2.rb:61>> e=true=>:canempty}> e=true l=6 th={Thread Proc<irep=-21298cd0 <#<Irep:0x7fffdeeca990> pos=../mruby-meta-circular/sample/santa2.rb:57>> e=false=>[:modify, 75, :push]}
each (Array<[:undef] => Thread Proc<irep=-21298ad0 <#<Irep:0x7fffdeedf590> pos=../mruby-meta-circular/sample/santa2.rb:61>> e=true|1 => Thread Proc<irep=-21298ad0 <#<Irep:0x7fffdeedf590> pos=../mruby-meta-circular/sample/santa2.rb:61>> e=true> e=true l=4 th={Thread Proc<irep=-21298cd0 <#<Irep:0x7fffdeeca990> pos=../mruby-meta-circular/sample/santa2.rb:57>> e=false=>[:modify, 61, :push]}, Proc<irep=-2129dd40 <#<Irep:0x7fffdef1e5e0> pos=../mruby-meta-circular/sample/santa2.rb:87>>) -> Array<[:undef] => Thread Proc<irep=-21298ad0 <#<Irep:0x7fffdeedf590> pos=../mruby-meta-circular/sample/santa2.rb:61>> e=true|1 => Thread Proc<irep=-21298ad0 <#<Irep:0x7fffdeedf590> pos=../mruby-meta-circular/sample/santa2.rb:61>> e=true> e=true l=4 th={Thread Proc<irep=-21298cd0 <#<Irep:0x7fffdeeca990> pos=../mruby-meta-circular/sample/santa2.rb:57>> e=false=>[:modify, 61, :push]}
-- effects ---
Class MMC_EXT::Thread
Instance variables
methodes
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment