Last active
January 17, 2026 20:32
-
-
Save miura1729/45d16cc4bc22ae18eedd49d62feaeada to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #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_mutex_t empty_lock; | |
| 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 thprocarg1004 { | |
| mrb_state *mrb; | |
| gproc cgproc; | |
| mrb_value_mutex_emptylock v735; | |
| gproc v736; | |
| struct gctab *prevgctab; | |
| }; | |
| struct thprocarg1244 { | |
| mrb_state *mrb; | |
| gproc cgproc; | |
| mrb_value_mutex_emptylock v1008; | |
| gproc v1009; | |
| struct gctab *prevgctab; | |
| }; | |
| struct env3 { | |
| mrb_value v765; | |
| mrb_value_mutex_emptylock v761; | |
| mrb_value_mutex_emptylock v754; | |
| struct env2 *prev; | |
| }; | |
| struct env17 { | |
| mrb_value v1035; | |
| mrb_value_mutex_emptylock v1034; | |
| mrb_value_mutex_emptylock v1027; | |
| 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 thprocarg859 { | |
| mrb_state *mrb; | |
| gproc cgproc; | |
| mrb_value_mutex_emptylock v793; | |
| mrb_int v794; | |
| gproc v795; | |
| struct gctab *prevgctab; | |
| }; | |
| struct env9 { | |
| mrb_value v879; | |
| struct env3 *prev; | |
| }; | |
| struct env16 { | |
| struct env3 *prev; | |
| }; | |
| struct env18 { | |
| struct env17 *prev; | |
| }; | |
| struct thprocarg1124 { | |
| mrb_state *mrb; | |
| gproc cgproc; | |
| mrb_value_mutex_emptylock v1063; | |
| mrb_int v1064; | |
| gproc v1065; | |
| struct gctab *prevgctab; | |
| }; | |
| struct env20 { | |
| mrb_value v1144; | |
| 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 v701,struct gctab *); | |
| static mrb_value p3_Object_0_2(mrb_state *, gproc cgproc, mrb_value_mutex_emptylock v741, gproc v742, 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 v1014, gproc v1015, 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 v2245, gproc v2246,struct gctab *); | |
| static mrb_int times__Fixnum__9(mrb_state *, mrb_int v2245, gproc v2246,struct gctab *); | |
| static mrb_value each__Array__19(mrb_state *, mrb_value v3988, gproc v3989,struct gctab *); | |
| static mrb_int times__Fixnum__22(mrb_state *, mrb_int v2245, gproc v2246,struct gctab *); | |
| static mrb_int times__Fixnum__28(mrb_state *, mrb_int v2245, gproc v2246,struct gctab *); | |
| static mrb_value each__Array__37(mrb_state *, mrb_value v3988, gproc v3989,struct gctab *); | |
| static mrb_value p4_Object_0_7(mrb_state *, gproc cgproc, mrb_int v772, 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 v870, 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 v986, struct gctab *); | |
| static mrb_value p18_Object_0_26(mrb_state *, gproc cgproc, mrb_int v1042, 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 v1135, 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 v1226, struct gctab *); | |
| static mrb_value p8_Object_0_8(mrb_state *, gproc cgproc, mrb_value_mutex_emptylock v800, mrb_int v801, gproc v802, struct gctab *); | |
| static mrb_value p19_Object_0_27(mrb_state *, gproc cgproc, mrb_value_mutex_emptylock v1070, mrb_int v1071, gproc v1072, struct gctab *); | |
| static mrb_int times__Fixnum__11(mrb_state *, mrb_int v2245, gproc v2246,struct gctab *); | |
| static mrb_value each__Array__14(mrb_state *, mrb_value v3988, gproc v3989,struct gctab *); | |
| static mrb_value each__Array__16(mrb_state *, mrb_value v3988, gproc v3989,struct gctab *); | |
| static mrb_int times__Fixnum__30(mrb_state *, mrb_int v2245, gproc v2246,struct gctab *); | |
| static mrb_value each__Array__33(mrb_state *, mrb_value v3988, gproc v3989,struct gctab *); | |
| static mrb_value p10_Object_0_13(mrb_state *, gproc cgproc, mrb_int v886, struct gctab *); | |
| static mrb_value p11_Object_1_15(mrb_state *, gproc cgproc, mrb_value v920, struct gctab *); | |
| static mrb_value p15_Object_2_17(mrb_state *, gproc cgproc, mrb_value v946, struct gctab *); | |
| static mrb_value p21_Object_0_32(mrb_state *, gproc cgproc, mrb_int v1151, struct gctab *); | |
| static mrb_value p22_Object_1_35(mrb_state *, gproc cgproc, mrb_value_mutex_emptylock v1189, struct gctab *); | |
| void *apply_thproc_1004(void *arg) { | |
| struct thprocarg1004 *tpargv = (struct thprocarg1004 *)arg; | |
| p3_Object_0_2(tpargv->mrb, tpargv->cgproc, tpargv->v735, tpargv->v736, tpargv->prevgctab); | |
| return NULL; | |
| } | |
| void *apply_thproc_1244(void *arg) { | |
| struct thprocarg1244 *tpargv = (struct thprocarg1244 *)arg; | |
| p17_Object_1_21(tpargv->mrb, tpargv->cgproc, tpargv->v1008, tpargv->v1009, tpargv->prevgctab); | |
| return NULL; | |
| } | |
| void *apply_thproc_859(void *arg) { | |
| struct thprocarg859 *tpargv = (struct thprocarg859 *)arg; | |
| p8_Object_0_8(tpargv->mrb, tpargv->cgproc, tpargv->v793, tpargv->v794, tpargv->v795, tpargv->prevgctab); | |
| return NULL; | |
| } | |
| void *apply_thproc_1124(void *arg) { | |
| struct thprocarg1124 *tpargv = (struct thprocarg1124 *)arg; | |
| p19_Object_0_27(tpargv->mrb, tpargv->cgproc, tpargv->v1063, tpargv->v1064, tpargv->v1065, 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 v701, struct gctab *prevgctab) { | |
| struct env2 env; | |
| struct REnv *venv = NULL; | |
| mrb_value self; | |
| mrb_value mutexself; | |
| char *v729 = "START"; | |
| char *v731; | |
| mrb_value_mutex_emptylock v732; | |
| struct proc3 v736; | |
| struct cls5_39 * v1004; | |
| struct cls5_39 * ubv1004; | |
| ; | |
| struct thread_list *thlist1004 = malloc(sizeof(struct thread_list)); | |
| struct thread_list *orgthlist1004 = ((struct mmc_system *)mrb->ud)->thread_list; | |
| struct proc17 v1009; | |
| struct cls5_39 * v1244; | |
| struct cls5_39 * ubv1244; | |
| ; | |
| struct thread_list *thlist1244 = malloc(sizeof(struct thread_list)); | |
| struct thread_list *orgthlist1244 = ((struct mmc_system *)mrb->ud)->thread_list; | |
| mrb_value v1250; | |
| mrb_value_mutex_emptylock v1310; | |
| struct cls5_39 * v1311; | |
| struct cls5_39 * v1312; | |
| mrb_int v1313; | |
| mrb_bool v1321;/*snd1*/ | |
| mrb_value v1264; | |
| char *v1267 = "foo"; | |
| char *v1269; | |
| mrb_value v1273; | |
| char *v1300 = "------"; | |
| char *v1302; | |
| mrb_value_mutex_emptylock v1306; | |
| struct cls5_39 * v1333; | |
| struct cls5_39 * v1335; | |
| struct cls5_39 * v1336; | |
| struct cls5_39 * v1338; | |
| char *v1340 = "OK"; | |
| char *v1342; | |
| 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 = v701; | |
| self = v701; | |
| /* 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); | |
| v731 = "START"; | |
| { | |
| mrb_value tmpele[] = { | |
| }; | |
| gctab->size = 0; | |
| mrb->allocf_ud = (void *)gctab; | |
| v732 = mrb_nil_value(); | |
| gctab->single[gctab->size] = &v732; /* 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; | |
| v732 = mrb_nil_value(); | |
| gctab->single[gctab->size] = &v732; /* conversion */ | |
| gctab->size++; | |
| v732 = ({ | |
| { | |
| 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_mutex_init(&mutex->empty_lock, NULL); | |
| { | |
| pthread_mutex_t *mut = (&mutex->empty_lock); | |
| pthread_mutex_lock(mut); | |
| } | |
| 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); | |
| } | |
| v736.id = 3; | |
| v736.self = self; | |
| v736.env = &env; | |
| { | |
| struct thprocarg1004 *tpargv = malloc(sizeof(struct thprocarg1004)); | |
| mrb_state *nmrb = malloc(sizeof(mrb_state)); | |
| *nmrb = *mrb; | |
| tpargv->mrb = nmrb; | |
| tpargv->cgproc = ((gproc)&v736); | |
| tpargv->v735 = v732; | |
| tpargv->v736 = ((gproc)&v736); | |
| tpargv->prevgctab = gctab; | |
| ubv1004 = malloc(sizeof(*ubv1004)); | |
| ubv1004->argv = tpargv; | |
| pthread_create(&ubv1004->thread, NULL, apply_thproc_1004, tpargv); | |
| thlist1004->thread = ubv1004->thread; | |
| thlist1004->mrb = nmrb; | |
| thlist1004->next = orgthlist1004; | |
| ((struct mmc_system *)mrb->ud)->thread_list = thlist1004; | |
| v1004 = ubv1004; | |
| } | |
| v1009.id = 17; | |
| v1009.self = self; | |
| v1009.env = &env; | |
| { | |
| struct thprocarg1244 *tpargv = malloc(sizeof(struct thprocarg1244)); | |
| mrb_state *nmrb = malloc(sizeof(mrb_state)); | |
| *nmrb = *mrb; | |
| tpargv->mrb = nmrb; | |
| tpargv->cgproc = ((gproc)&v1009); | |
| tpargv->v1008 = v732; | |
| tpargv->v1009 = ((gproc)&v1009); | |
| tpargv->prevgctab = gctab; | |
| ubv1244 = malloc(sizeof(*ubv1244)); | |
| ubv1244->argv = tpargv; | |
| pthread_create(&ubv1244->thread, NULL, apply_thproc_1244, tpargv); | |
| thlist1244->thread = ubv1244->thread; | |
| thlist1244->mrb = nmrb; | |
| thlist1244->next = orgthlist1244; | |
| ((struct mmc_system *)mrb->ud)->thread_list = thlist1244; | |
| v1244 = ubv1244; | |
| } | |
| sleep(1); | |
| v1250 = (mrb_fixnum_value(1)); | |
| v1310 = v732; /* 1*/ | |
| v1311 = v1004; /* 1*/ | |
| v1312 = v1244; /* 1*/ | |
| v1313 = 2; /* 1*/ | |
| L28:; | |
| v1321 = (v1313 > 0); | |
| if (v1321) goto L25; else goto L29; | |
| L25:; | |
| mrb->allocf_ud = (void *)gctab; | |
| v1264 = ({ | |
| struct mutex_wrapper *mutex = (struct mutex_wrapper *)DATA_PTR(mrb_ary_pop(mrb, ({ | |
| struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v1310); | |
| { | |
| pthread_mutex_t *mut = (&mutex->empty_lock); | |
| pthread_mutex_lock(mut); | |
| } | |
| { | |
| pthread_mutex_t *mut = (&mutex->mp); | |
| pthread_mutex_lock(mut); | |
| } | |
| mrb_value tmp = mutex->obj; | |
| 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(v1310)))->mp); | |
| mrb->allocf_ud = (void *)gctab; | |
| gctab->single[0] = &v1310;/* normal */ | |
| gctab->single[1] = &v1264;/* 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); | |
| v1269 = "foo"; | |
| { | |
| pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex); | |
| pthread_mutex_lock(mut); | |
| } | |
| mrb->allocf_ud = (void *)gctab; | |
| mrb_p(mrb, v1264); | |
| pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex); | |
| v1273 = v1264; | |
| if ((mrb_test(v1264))) goto L26; else goto L27; | |
| L26:; | |
| v1310 = v1310; /* 2*/ | |
| v1311 = v1311; /* 2*/ | |
| v1312 = v1312; /* 2*/ | |
| v1313 = v1313; /* 2*/ | |
| goto L28; | |
| L27:; | |
| mrb->allocf_ud = (void *)gctab; | |
| gctab->size = 1; | |
| { | |
| 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, "------"))); | |
| pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex); | |
| v1302 = "------"; | |
| { | |
| pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex); | |
| pthread_mutex_lock(mut); | |
| } | |
| mrb->allocf_ud = (void *)gctab; | |
| mrb_p(mrb, ({ | |
| struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v1310); | |
| { | |
| pthread_mutex_t *mut = (&mutex->mp); | |
| pthread_mutex_lock(mut); | |
| } | |
| mrb_value tmp = mutex->obj; | |
| tmp; | |
| }) | |
| ); | |
| pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex); | |
| v1306 = v1310; | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v1310)))->empty_lock); | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v1310)))->mp); | |
| v1310 = v1310; /* 3*/ | |
| v1311 = v1311; /* 3*/ | |
| v1312 = v1312; /* 3*/ | |
| v1313 = (v1313 - 1); /* 3*/ | |
| goto L28; | |
| L29:; | |
| { | |
| void *ret; | |
| pthread_join(v1311->thread, &ret); | |
| } | |
| { | |
| void *ret; | |
| pthread_join(v1312->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); | |
| v1342 = "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 v741, gproc v742, struct gctab *prevgctab) { | |
| struct proc3 *proc = (struct proc3 *)cgproc; | |
| mrb_value v740 = proc->self; | |
| struct env3 env; | |
| struct REnv *venv = NULL; | |
| mrb_value self; | |
| mrb_value mutexself; | |
| mrb_value_mutex_emptylock v749; | |
| gproc v750; | |
| mrb_value_mutex_emptylock v754; | |
| mrb_value_mutex_emptylock v761; | |
| mrb_value v764; | |
| struct proc4 v767; | |
| mrb_int v863; | |
| struct proc9 v865; | |
| mrb_int v971; | |
| char *v973 = "hobbit end"; | |
| char *v975; | |
| mrb_value_mutex_emptylock v979; | |
| mrb_value_mutex_emptylock v4124; | |
| struct proc16 v981; | |
| mrb_value v1002; | |
| 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 = v740; | |
| self = v740; | |
| v749 = v741; | |
| v750 = v742; | |
| /* START END */ | |
| env.v754 = v741;/*enter */ | |
| { | |
| mrb_value tmpele[] = { | |
| }; | |
| gctab->size = 0; | |
| mrb->allocf_ud = (void *)gctab; | |
| v761 = mrb_nil_value(); | |
| gctab->single[gctab->size] = &v761; /* 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; | |
| v761 = mrb_nil_value(); | |
| gctab->single[gctab->size] = &v761; /* conversion */ | |
| gctab->size++; | |
| v761 = ({ | |
| { | |
| 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_mutex_init(&mutex->empty_lock, NULL); | |
| { | |
| pthread_mutex_t *mut = (&mutex->empty_lock); | |
| pthread_mutex_lock(mut); | |
| } | |
| 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.v761 = v761;/*foo*/ | |
| gctab->single[0] = &v741;/* 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); | |
| v764 = ary; | |
| } | |
| env.v765 = v764;/*foo*/ | |
| v767.id = 4; | |
| v767.self = self; | |
| v767.env = &env; | |
| gctab->single[2] = &v764;/* normal */ | |
| gctab->size = 3; | |
| v863 = times__Fixnum__3(mrb, 9, ((gproc)&v767), gctab); | |
| v865.id = 9; | |
| v865.self = self; | |
| v865.env = &env; | |
| v971 = times__Fixnum__9(mrb, 3, ((gproc)&v865), gctab); | |
| 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, "hobbit end"))); | |
| pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex); | |
| v975 = "hobbit end"; | |
| mrb->allocf_ud = (void *)gctab; | |
| v4124 = ({ | |
| struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v741); | |
| { | |
| pthread_mutex_t *mut = (&mutex->mp); | |
| pthread_mutex_lock(mut); | |
| } | |
| mrb_value tmp = mutex->obj; | |
| tmp; | |
| }) | |
| ; | |
| mrb_ary_unshift(mrb, v4124, ({ | |
| { | |
| 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; | |
| }) | |
| ); | |
| v979 = v741; | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v741)))->empty_lock); | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v741)))->mp); | |
| v981.id = 16; | |
| v981.self = self; | |
| v981.env = &env; | |
| v1002 = each__Array__19(mrb, v764, ((gproc)&v981), gctab); | |
| mrb_gc_arena_restore(mrb, ai); | |
| return v1002; | |
| mrb_gc_arena_restore(mrb, ai); | |
| } | |
| static mrb_value p17_Object_1_21(mrb_state *mrb, gproc cgproc, mrb_value_mutex_emptylock v1014, gproc v1015, struct gctab *prevgctab) { | |
| struct proc17 *proc = (struct proc17 *)cgproc; | |
| mrb_value v1013 = proc->self; | |
| struct env17 env; | |
| struct REnv *venv = NULL; | |
| mrb_value self; | |
| mrb_value mutexself; | |
| mrb_value_mutex_emptylock v1022; | |
| gproc v1023; | |
| mrb_value_mutex_emptylock v1027; | |
| mrb_value_mutex_emptylock v1034; | |
| mrb_value v1035; | |
| struct proc18 v1037; | |
| mrb_int v1128; | |
| struct proc20 v1130; | |
| mrb_int v1211; | |
| char *v1213 = "tonakai end"; | |
| char *v1215; | |
| mrb_value_mutex_emptylock v1219; | |
| mrb_value_mutex_emptylock v4239; | |
| struct proc23 v1221; | |
| mrb_value v1242; | |
| 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 = v1013; | |
| self = v1013; | |
| v1022 = v1014; | |
| v1023 = v1015; | |
| /* START END */ | |
| env.v1027 = v1014;/*enter */ | |
| { | |
| mrb_value tmpele[] = { | |
| }; | |
| gctab->size = 0; | |
| mrb->allocf_ud = (void *)gctab; | |
| v1034 = mrb_nil_value(); | |
| gctab->single[gctab->size] = &v1034; /* 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; | |
| v1034 = mrb_nil_value(); | |
| gctab->single[gctab->size] = &v1034; /* conversion */ | |
| gctab->size++; | |
| v1034 = ({ | |
| { | |
| 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_mutex_init(&mutex->empty_lock, NULL); | |
| { | |
| pthread_mutex_t *mut = (&mutex->empty_lock); | |
| pthread_mutex_lock(mut); | |
| } | |
| 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.v1034 = v1034;/*foo*/ | |
| { | |
| mrb_value tmpele[] = { | |
| }; | |
| mrb->allocf_ud = (void *)gctab; | |
| v1035 = mrb_nil_value(); | |
| gctab->single[gctab->size] = &v1035; /* 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); | |
| v1035 = array; | |
| ARY_SET_LEN(mrb_ary_ptr(array), 0); | |
| } | |
| env.v1035 = v1035;/*foo*/ | |
| v1037.id = 18; | |
| v1037.self = self; | |
| v1037.env = &env; | |
| gctab->single[0] = &v1014;/* normal */ | |
| v1128 = times__Fixnum__22(mrb, 27, ((gproc)&v1037), gctab); | |
| v1130.id = 20; | |
| v1130.self = self; | |
| v1130.env = &env; | |
| v1211 = times__Fixnum__28(mrb, 3, ((gproc)&v1130), gctab); | |
| 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, "tonakai end"))); | |
| pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex); | |
| v1215 = "tonakai end"; | |
| mrb->allocf_ud = (void *)gctab; | |
| v4239 = ({ | |
| struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v1014); | |
| { | |
| pthread_mutex_t *mut = (&mutex->mp); | |
| pthread_mutex_lock(mut); | |
| } | |
| mrb_value tmp = mutex->obj; | |
| tmp; | |
| }) | |
| ; | |
| mrb_ary_unshift(mrb, v4239, ({ | |
| { | |
| 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; | |
| }) | |
| ); | |
| v1219 = v1014; | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v1014)))->empty_lock); | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v1014)))->mp); | |
| v1221.id = 23; | |
| v1221.self = self; | |
| v1221.env = &env; | |
| v1242 = each__Array__37(mrb, v1035, ((gproc)&v1221), gctab); | |
| mrb_gc_arena_restore(mrb, ai); | |
| return v1242; | |
| mrb_gc_arena_restore(mrb, ai); | |
| } | |
| static mrb_int times__Fixnum__3(mrb_state *mrb, mrb_int v2245, gproc v2246, struct gctab *prevgctab) { | |
| struct env7 env; | |
| struct REnv *venv = NULL; | |
| mrb_int self; | |
| mrb_int mutexself; | |
| gproc v2252; | |
| gproc v2302; | |
| mrb_int v2303; | |
| mrb_bool v2310;/*snd1*/ | |
| mrb_value v2296; | |
| mrb_int v2298;/*snd1*/ | |
| struct gctab *gctab = prevgctab; | |
| L100:; | |
| mutexself = v2245; | |
| self = 9; | |
| v2252 = v2246; | |
| /* START END */ | |
| L101:; | |
| L103:; | |
| v2302 = v2246; /* 1*/ | |
| v2303 = 0; /* 1*/ | |
| L105:; | |
| v2310 = (v2303 < self); | |
| if (v2310) goto L104; else goto L106; | |
| L104:; | |
| v2296 = (p4_Object_0_7(mrb, v2302, v2303, gctab)); | |
| v2298 = (v2303 + 1); | |
| v2302 = v2302; /* 2*/ | |
| v2303 = v2298; /* 2*/ | |
| goto L105; | |
| L106:; | |
| return self; | |
| } | |
| static mrb_int times__Fixnum__9(mrb_state *mrb, mrb_int v2245, gproc v2246, struct gctab *prevgctab) { | |
| struct env7 env; | |
| struct REnv *venv = NULL; | |
| mrb_int self; | |
| mrb_int mutexself; | |
| gproc v2252; | |
| gproc v2302; | |
| mrb_int v2303; | |
| mrb_bool v2310;/*snd1*/ | |
| mrb_value v2296; | |
| mrb_int v2298;/*snd1*/ | |
| struct gctab *gctab = prevgctab; | |
| L100:; | |
| mutexself = v2245; | |
| self = 3; | |
| v2252 = v2246; | |
| /* START END */ | |
| L101:; | |
| L103:; | |
| v2302 = v2246; /* 1*/ | |
| v2303 = 0; /* 1*/ | |
| L105:; | |
| v2310 = (v2303 < self); | |
| if (v2310) goto L104; else goto L106; | |
| L104:; | |
| v2296 = (p9_Object_1_18(mrb, v2302, v2303, gctab)); | |
| v2298 = (v2303 + 1); | |
| v2302 = v2302; /* 2*/ | |
| v2303 = v2298; /* 2*/ | |
| goto L105; | |
| L106:; | |
| return self; | |
| } | |
| static mrb_value each__Array__19(mrb_state *mrb, mrb_value v3988, gproc v3989, struct gctab *prevgctab) { | |
| struct env14 env; | |
| struct REnv *venv = NULL; | |
| mrb_value self; | |
| mrb_value mutexself; | |
| gproc v3996; | |
| gproc v4054; | |
| mrb_int v4055; | |
| mrb_int v4063; | |
| mrb_bool v4065;/*snd1*/ | |
| mrb_value v4046; | |
| struct cls5_39 * v4048; | |
| mrb_int v4050;/*snd1*/ | |
| struct gctab *gctab = prevgctab; | |
| L210:; | |
| mutexself = v3988; | |
| self = v3988; | |
| v3996 = v3989; | |
| /* START END */ | |
| L211:; | |
| L213:; | |
| v4054 = v3989; /* 1*/ | |
| v4055 = 0; /* 1*/ | |
| L215:; | |
| v4063 = ARY_LEN2(mrb_ary_ptr(self)); | |
| v4065 = (v4055 < v4063); | |
| if (v4065) goto L214; else goto L216; | |
| L214:; | |
| { | |
| v4046 = ARY_PTR2(mrb_ary_ptr(self))[v4055]; | |
| } | |
| v4048 = (p16_Object_2_20(mrb, v4054, v4046, gctab)); | |
| v4050 = (v4055 + 1); | |
| v4054 = v4054; /* 2*/ | |
| v4055 = v4050; /* 2*/ | |
| goto L215; | |
| L216:; | |
| return self; | |
| } | |
| static mrb_int times__Fixnum__22(mrb_state *mrb, mrb_int v2245, gproc v2246, struct gctab *prevgctab) { | |
| struct env7 env; | |
| struct REnv *venv = NULL; | |
| mrb_int self; | |
| mrb_int mutexself; | |
| gproc v2252; | |
| gproc v2302; | |
| mrb_int v2303; | |
| mrb_bool v2310;/*snd1*/ | |
| mrb_value v2296; | |
| mrb_int v2298;/*snd1*/ | |
| struct gctab *gctab = prevgctab; | |
| L100:; | |
| mutexself = v2245; | |
| self = 27; | |
| v2252 = v2246; | |
| /* START END */ | |
| L101:; | |
| L103:; | |
| v2302 = v2246; /* 1*/ | |
| v2303 = 0; /* 1*/ | |
| L105:; | |
| v2310 = (v2303 < self); | |
| if (v2310) goto L104; else goto L106; | |
| L104:; | |
| v2296 = (p18_Object_0_26(mrb, v2302, v2303, gctab)); | |
| v2298 = (v2303 + 1); | |
| v2302 = v2302; /* 2*/ | |
| v2303 = v2298; /* 2*/ | |
| goto L105; | |
| L106:; | |
| return self; | |
| } | |
| static mrb_int times__Fixnum__28(mrb_state *mrb, mrb_int v2245, gproc v2246, struct gctab *prevgctab) { | |
| struct env7 env; | |
| struct REnv *venv = NULL; | |
| mrb_int self; | |
| mrb_int mutexself; | |
| gproc v2252; | |
| gproc v2302; | |
| mrb_int v2303; | |
| mrb_bool v2310;/*snd1*/ | |
| mrb_value v2296; | |
| mrb_int v2298;/*snd1*/ | |
| struct gctab *gctab = prevgctab; | |
| L100:; | |
| mutexself = v2245; | |
| self = 3; | |
| v2252 = v2246; | |
| /* START END */ | |
| L101:; | |
| L103:; | |
| v2302 = v2246; /* 1*/ | |
| v2303 = 0; /* 1*/ | |
| L105:; | |
| v2310 = (v2303 < self); | |
| if (v2310) goto L104; else goto L106; | |
| L104:; | |
| v2296 = (p20_Object_1_36(mrb, v2302, v2303, gctab)); | |
| v2298 = (v2303 + 1); | |
| v2302 = v2302; /* 2*/ | |
| v2303 = v2298; /* 2*/ | |
| goto L105; | |
| L106:; | |
| return self; | |
| } | |
| static mrb_value each__Array__37(mrb_state *mrb, mrb_value v3988, gproc v3989, struct gctab *prevgctab) { | |
| struct env14 env; | |
| struct REnv *venv = NULL; | |
| mrb_value self; | |
| mrb_value mutexself; | |
| gproc v3996; | |
| gproc v4054; | |
| mrb_int v4055; | |
| mrb_int v4063; | |
| mrb_bool v4065;/*snd1*/ | |
| mrb_value v4046; | |
| struct cls5_39 * v4048; | |
| mrb_int v4050;/*snd1*/ | |
| struct gctab *gctab = prevgctab; | |
| L210:; | |
| mutexself = v3988; | |
| self = v3988; | |
| v3996 = v3989; | |
| /* START END */ | |
| L211:; | |
| L213:; | |
| v4054 = v3989; /* 1*/ | |
| v4055 = 0; /* 1*/ | |
| L215:; | |
| v4063 = ARY_LEN2(mrb_ary_ptr(self)); | |
| v4065 = (v4055 < v4063); | |
| if (v4065) goto L214; else goto L216; | |
| L214:; | |
| { | |
| v4046 = ARY_PTR2(mrb_ary_ptr(self))[v4055]; | |
| } | |
| v4048 = (p23_Object_2_38(mrb, v4054, v4046, gctab)); | |
| v4050 = (v4055 + 1); | |
| v4054 = v4054; /* 2*/ | |
| v4055 = v4050; /* 2*/ | |
| goto L215; | |
| L216:; | |
| return self; | |
| } | |
| static mrb_value p4_Object_0_7(mrb_state *mrb, gproc cgproc, mrb_int v772, struct gctab *prevgctab) { | |
| struct proc4 *proc = (struct proc4 *)cgproc; | |
| mrb_value v771 = proc->self; | |
| struct env4 env; | |
| struct REnv *venv = NULL; | |
| mrb_value self; | |
| mrb_value mutexself; | |
| mrb_int v780; | |
| mrb_value v790; | |
| mrb_value_mutex_emptylock v793; | |
| mrb_int v794;/*snd*/ | |
| struct proc8 v795; | |
| mrb_value v859; | |
| struct cls5_39 * ubv859; | |
| ; | |
| struct thread_list *thlist859 = malloc(sizeof(struct thread_list)); | |
| struct thread_list *orgthlist859 = ((struct mmc_system *)mrb->ud)->thread_list; | |
| mrb_value v861; | |
| mrb_value v2345; | |
| struct gctab *gctab = prevgctab; | |
| env.prev = proc->env; | |
| L31:; | |
| mutexself = v771; | |
| self = v771; | |
| v780 = v772; | |
| /* START END */ | |
| v790 = proc->env->v765; | |
| v793 = proc->env->v761; | |
| v794 = v772; | |
| v795.id = 8; | |
| v795.self = self; | |
| v795.env = &env; | |
| { | |
| struct thprocarg859 *tpargv = malloc(sizeof(struct thprocarg859)); | |
| mrb_state *nmrb = malloc(sizeof(mrb_state)); | |
| *nmrb = *mrb; | |
| tpargv->mrb = nmrb; | |
| tpargv->cgproc = ((gproc)&v795); | |
| tpargv->v793 = v793; | |
| tpargv->v794 = v794; | |
| tpargv->v795 = ((gproc)&v795); | |
| tpargv->prevgctab = gctab; | |
| ubv859 = malloc(sizeof(*ubv859)); | |
| ubv859->argv = tpargv; | |
| pthread_create(&ubv859->thread, NULL, apply_thproc_859, tpargv); | |
| thlist859->thread = ubv859->thread; | |
| thlist859->mrb = nmrb; | |
| thlist859->next = orgthlist859; | |
| ((struct mmc_system *)mrb->ud)->thread_list = thlist859; | |
| v859 = (mrb_obj_value(mrb_data_object_alloc(mrb, ((struct mmc_system *)mrb->ud)->pthread_class, ubv859, &thread_data_header))); | |
| } | |
| mrb->allocf_ud = (void *)gctab; | |
| v2345 = v790; | |
| mrb_ary_push(mrb, v2345, v859); | |
| v861 = v790; | |
| return v861; | |
| } | |
| static mrb_value p9_Object_1_18(mrb_state *mrb, gproc cgproc, mrb_int v870, struct gctab *prevgctab) { | |
| struct proc9 *proc = (struct proc9 *)cgproc; | |
| mrb_value v869 = proc->self; | |
| struct env9 env; | |
| struct REnv *venv = NULL; | |
| mrb_value self; | |
| mrb_value mutexself; | |
| mrb_int v876; | |
| mrb_value v879; | |
| struct proc10 v881; | |
| mrb_int v912; | |
| mrb_value v913; | |
| struct proc11 v915; | |
| mrb_value v935; | |
| mrb_value_mutex_emptylock v936; | |
| mrb_value_mutex_emptylock v939; | |
| mrb_value_mutex_emptylock v4083; | |
| struct proc15 v941; | |
| mrb_value v969; | |
| 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 = v869; | |
| self = v869; | |
| v876 = v870; | |
| /* START END */ | |
| { | |
| mrb_value tmpele[] = { | |
| }; | |
| gctab->size = 0; | |
| mrb->allocf_ud = (void *)gctab; | |
| v879 = mrb_nil_value(); | |
| gctab->single[gctab->size] = &v879; /* 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); | |
| v879 = array; | |
| ARY_SET_LEN(mrb_ary_ptr(array), 0); | |
| } | |
| env.v879 = v879;/*foo*/ | |
| v881.id = 10; | |
| v881.self = self; | |
| v881.env = &env; | |
| v912 = times__Fixnum__11(mrb, 3, ((gproc)&v881), 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); | |
| v913 = mrb_str_new(mrb, "HoHo Let's make present\n", 24); | |
| v915.id = 11; | |
| v915.self = self; | |
| v915.env = &env; | |
| gctab->single[1] = &v913;/* normal */ | |
| gctab->size = 2; | |
| v935 = each__Array__14(mrb, v879, ((gproc)&v915), gctab); | |
| v936 = proc->env->v754; | |
| mrb->allocf_ud = (void *)gctab; | |
| v4083 = ({ | |
| struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v936); | |
| { | |
| pthread_mutex_t *mut = (&mutex->mp); | |
| pthread_mutex_lock(mut); | |
| } | |
| mrb_value tmp = mutex->obj; | |
| tmp; | |
| }) | |
| ; | |
| mrb_ary_unshift(mrb, v4083, ({ | |
| { | |
| 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 = v913; | |
| mrb_iv_set(mrb, mutexobj, mrb_intern_cstr(mrb, "@object"), mutex->obj); | |
| pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex); | |
| mutexobj; | |
| }) | |
| ); | |
| v939 = v936; | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v936)))->empty_lock); | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v936)))->mp); | |
| v941.id = 15; | |
| v941.self = self; | |
| v941.env = &env; | |
| v969 = each__Array__16(mrb, v879, ((gproc)&v941), gctab); | |
| mrb_gc_arena_restore(mrb, ai); | |
| return v969; | |
| mrb_gc_arena_restore(mrb, ai); | |
| } | |
| static struct cls5_39 * p16_Object_2_20(mrb_state *mrb, gproc cgproc, mrb_value v986, struct gctab *prevgctab) { | |
| struct proc16 *proc = (struct proc16 *)cgproc; | |
| mrb_value v985 = proc->self; | |
| struct env16 env; | |
| struct REnv *venv = NULL; | |
| mrb_value self; | |
| mrb_value mutexself; | |
| mrb_value v991; | |
| mrb_value v998; | |
| struct cls5_39 * v1000; | |
| struct gctab *gctab = prevgctab; | |
| env.prev = proc->env; | |
| L37:; | |
| mutexself = v985; | |
| self = v985; | |
| v991 = v986; | |
| /* START END */ | |
| { | |
| void *ret; | |
| pthread_join(((struct cls5_39 * )DATA_PTR(v986))->thread, &ret); | |
| } | |
| return v1000; | |
| } | |
| static mrb_value p18_Object_0_26(mrb_state *mrb, gproc cgproc, mrb_int v1042, struct gctab *prevgctab) { | |
| struct proc18 *proc = (struct proc18 *)cgproc; | |
| mrb_value v1041 = proc->self; | |
| struct env18 env; | |
| struct REnv *venv = NULL; | |
| mrb_value self; | |
| mrb_value mutexself; | |
| mrb_int v1050; | |
| mrb_value v1060; | |
| mrb_value_mutex_emptylock v1063; | |
| mrb_int v1064;/*snd*/ | |
| struct proc19 v1065; | |
| mrb_value v1124; | |
| struct cls5_39 * ubv1124; | |
| ; | |
| struct thread_list *thlist1124 = malloc(sizeof(struct thread_list)); | |
| struct thread_list *orgthlist1124 = ((struct mmc_system *)mrb->ud)->thread_list; | |
| mrb_value v1126; | |
| mrb_value v4163; | |
| struct gctab *gctab = prevgctab; | |
| env.prev = proc->env; | |
| L39:; | |
| mutexself = v1041; | |
| self = v1041; | |
| v1050 = v1042; | |
| /* START END */ | |
| v1060 = proc->env->v1035; | |
| v1063 = proc->env->v1034; | |
| v1064 = v1042; | |
| v1065.id = 19; | |
| v1065.self = self; | |
| v1065.env = &env; | |
| { | |
| struct thprocarg1124 *tpargv = malloc(sizeof(struct thprocarg1124)); | |
| mrb_state *nmrb = malloc(sizeof(mrb_state)); | |
| *nmrb = *mrb; | |
| tpargv->mrb = nmrb; | |
| tpargv->cgproc = ((gproc)&v1065); | |
| tpargv->v1063 = v1063; | |
| tpargv->v1064 = v1064; | |
| tpargv->v1065 = ((gproc)&v1065); | |
| tpargv->prevgctab = gctab; | |
| ubv1124 = malloc(sizeof(*ubv1124)); | |
| ubv1124->argv = tpargv; | |
| pthread_create(&ubv1124->thread, NULL, apply_thproc_1124, tpargv); | |
| thlist1124->thread = ubv1124->thread; | |
| thlist1124->mrb = nmrb; | |
| thlist1124->next = orgthlist1124; | |
| ((struct mmc_system *)mrb->ud)->thread_list = thlist1124; | |
| v1124 = (mrb_obj_value(mrb_data_object_alloc(mrb, ((struct mmc_system *)mrb->ud)->pthread_class, ubv1124, &thread_data_header))); | |
| } | |
| mrb->allocf_ud = (void *)gctab; | |
| v4163 = v1060; | |
| mrb_ary_push(mrb, v4163, v1124); | |
| v1126 = v1060; | |
| return v1126; | |
| } | |
| static mrb_value p20_Object_1_36(mrb_state *mrb, gproc cgproc, mrb_int v1135, struct gctab *prevgctab) { | |
| struct proc20 *proc = (struct proc20 *)cgproc; | |
| mrb_value v1134 = proc->self; | |
| struct env20 env; | |
| struct REnv *venv = NULL; | |
| mrb_value self; | |
| mrb_value mutexself; | |
| mrb_int v1141; | |
| mrb_value v1144; | |
| struct proc21 v1146; | |
| mrb_int v1177; | |
| mrb_value v1178; | |
| mrb_value_mutex_emptylock v1179; | |
| mrb_value_mutex_emptylock v1182; | |
| mrb_value_mutex_emptylock v4206; | |
| struct proc22 v1184; | |
| mrb_value v1209; | |
| 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 = v1134; | |
| self = v1134; | |
| v1141 = v1135; | |
| /* START END */ | |
| { | |
| mrb_value tmpele[] = { | |
| }; | |
| gctab->size = 0; | |
| mrb->allocf_ud = (void *)gctab; | |
| v1144 = mrb_nil_value(); | |
| gctab->single[gctab->size] = &v1144; /* 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); | |
| v1144 = array; | |
| ARY_SET_LEN(mrb_ary_ptr(array), 0); | |
| } | |
| env.v1144 = v1144;/*foo*/ | |
| v1146.id = 21; | |
| v1146.self = self; | |
| v1146.env = &env; | |
| v1177 = times__Fixnum__30(mrb, 9, ((gproc)&v1146), 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); | |
| v1178 = mrb_str_new(mrb, "HoHo Let's send present\n", 24); | |
| v1179 = proc->env->v1027; | |
| mrb->allocf_ud = (void *)gctab; | |
| v4206 = ({ | |
| struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v1179); | |
| { | |
| pthread_mutex_t *mut = (&mutex->mp); | |
| pthread_mutex_lock(mut); | |
| } | |
| mrb_value tmp = mutex->obj; | |
| tmp; | |
| }) | |
| ; | |
| mrb_ary_unshift(mrb, v4206, ({ | |
| { | |
| 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 = v1178; | |
| mrb_iv_set(mrb, mutexobj, mrb_intern_cstr(mrb, "@object"), mutex->obj); | |
| pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex); | |
| mutexobj; | |
| }) | |
| ); | |
| v1182 = v1179; | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v1179)))->empty_lock); | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v1179)))->mp); | |
| v1184.id = 22; | |
| v1184.self = self; | |
| v1184.env = &env; | |
| gctab->single[1] = &v1178;/* normal */ | |
| gctab->size = 2; | |
| v1209 = each__Array__33(mrb, v1144, ((gproc)&v1184), gctab); | |
| mrb_gc_arena_restore(mrb, ai); | |
| return v1209; | |
| mrb_gc_arena_restore(mrb, ai); | |
| } | |
| static struct cls5_39 * p23_Object_2_38(mrb_state *mrb, gproc cgproc, mrb_value v1226, struct gctab *prevgctab) { | |
| struct proc23 *proc = (struct proc23 *)cgproc; | |
| mrb_value v1225 = proc->self; | |
| struct env23 env; | |
| struct REnv *venv = NULL; | |
| mrb_value self; | |
| mrb_value mutexself; | |
| mrb_value v1231; | |
| mrb_value v1238; | |
| struct cls5_39 * v1240; | |
| struct gctab *gctab = prevgctab; | |
| env.prev = proc->env; | |
| L44:; | |
| mutexself = v1225; | |
| self = v1225; | |
| v1231 = v1226; | |
| /* START END */ | |
| { | |
| void *ret; | |
| pthread_join(((struct cls5_39 * )DATA_PTR(v1226))->thread, &ret); | |
| } | |
| return v1240; | |
| } | |
| static mrb_value p8_Object_0_8(mrb_state *mrb, gproc cgproc, mrb_value_mutex_emptylock v800, mrb_int v801, gproc v802, struct gctab *prevgctab) { | |
| struct proc8 *proc = (struct proc8 *)cgproc; | |
| mrb_value v799 = proc->self; | |
| struct env8 env; | |
| struct REnv *venv = NULL; | |
| mrb_value self; | |
| mrb_value mutexself; | |
| mrb_value_mutex_emptylock v809; | |
| mrb_int v810; | |
| gproc v811; | |
| mrb_float2 v825; | |
| mrb_int v830; | |
| mrb_value v832; | |
| char *v834 = "hobbit wake up "; | |
| mrb_value v836; /* cat */ | |
| mrb_value v838; | |
| mrb_value_mutex_emptylock v840; | |
| mrb_value v841; | |
| mrb_value_mutex_emptylock v845; | |
| mrb_value_mutex_emptylock v2338; | |
| mrb_value_mutex_emptylock v849; | |
| mrb_value v851; | |
| char *v853 = "Hobbit Work done "; | |
| mrb_int v854;/*snd*/ | |
| mrb_value v855; /* cat */ | |
| mrb_value v857; | |
| 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 = v799; | |
| self = v799; | |
| v809 = v800; | |
| v810 = v801; | |
| v811 = v802; | |
| /* START END */ | |
| v825 = (((mrb_float)(rand() % 0x7fffffff)) / (double)0x7fffffff); | |
| v830 = ((mrb_int)(v825 * ((mrb_float)10))); | |
| sleep(v830); | |
| v832 = (mrb_fixnum_value(v830)); | |
| { | |
| pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex); | |
| pthread_mutex_lock(mut); | |
| } | |
| gctab->size = 0; | |
| mrb->allocf_ud = (void *)gctab; | |
| v836 = mrb_nil_value(); | |
| gctab->single[gctab->size] = &v836; /* conversion */ | |
| gctab->size++; | |
| v836 = (mrb_str_new_cstr(mrb, "hobbit wake up ")); | |
| mrb->allocf_ud = (void *)gctab; | |
| v836 = mrb_str_cat_cstr(mrb, v836, ({char *_buf = alloca(255);sprintf(_buf, "%d", v801);_buf;})); | |
| pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex); | |
| gctab->single[0] = &v800;/* normal */ | |
| { | |
| pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex); | |
| pthread_mutex_lock(mut); | |
| } | |
| mrb->allocf_ud = (void *)gctab; | |
| mrb_p(mrb, v836); | |
| pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex); | |
| v838 = v836; | |
| { | |
| 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; | |
| v840 = ({ | |
| { | |
| 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_mutex_init(&mutex->empty_lock, NULL); | |
| { | |
| pthread_mutex_t *mut = (&mutex->empty_lock); | |
| pthread_mutex_lock(mut); | |
| } | |
| 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(v801)), v840 | |
| }; | |
| mrb->allocf_ud = (void *)gctab; | |
| v841 = mrb_nil_value(); | |
| gctab->single[gctab->size] = &v841; /* 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); | |
| v841 = array; | |
| ARY_SET_LEN(mrb_ary_ptr(array), 2); | |
| } | |
| mrb->allocf_ud = (void *)gctab; | |
| mrb->allocf_ud = (void *)gctab; | |
| v2338 = ({ | |
| struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v800); | |
| { | |
| pthread_mutex_t *mut = (&mutex->mp); | |
| pthread_mutex_lock(mut); | |
| } | |
| mrb_value tmp = mutex->obj; | |
| tmp; | |
| }) | |
| ; | |
| mrb_ary_push(mrb, v2338, ({ | |
| { | |
| 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 = v841; | |
| mrb_iv_set(mrb, mutexobj, mrb_intern_cstr(mrb, "@object"), mutex->obj); | |
| pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex); | |
| mutexobj; | |
| }) | |
| ); | |
| v845 = v800; | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v800)))->empty_lock); | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v800)))->mp); | |
| { | |
| v849 = ARY_PTR2(mrb_ary_ptr(v841))[1]; | |
| } | |
| mrb->allocf_ud = (void *)gctab; | |
| v851 = mrb_ary_pop(mrb, ({ | |
| struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v849); | |
| { | |
| pthread_mutex_t *mut = (&mutex->empty_lock); | |
| pthread_mutex_lock(mut); | |
| } | |
| { | |
| pthread_mutex_t *mut = (&mutex->mp); | |
| pthread_mutex_lock(mut); | |
| } | |
| mrb_value tmp = mutex->obj; | |
| tmp; | |
| }) | |
| ); | |
| if (ARY_LEN(mrb_ary_ptr(((struct mutex_wrapper_emptylock *)(DATA_PTR(v849)))->obj)) > 0) { | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v849)))->empty_lock); | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v849)))->mp); | |
| } | |
| else { | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v849)))->mp); | |
| } | |
| v854 = v801; | |
| { | |
| pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex); | |
| pthread_mutex_lock(mut); | |
| } | |
| mrb->allocf_ud = (void *)gctab; | |
| v855 = mrb_nil_value(); | |
| gctab->single[gctab->size] = &v855; /* conversion */ | |
| gctab->size++; | |
| v855 = (mrb_str_new_cstr(mrb, "Hobbit Work done ")); | |
| mrb->allocf_ud = (void *)gctab; | |
| v855 = mrb_str_cat_cstr(mrb, v855, ({char *_buf = alloca(255);sprintf(_buf, "%d", v854);_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, v855); | |
| pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex); | |
| v857 = v855; | |
| mrb_gc_arena_restore(mrb, ai); | |
| return v857; | |
| mrb_gc_arena_restore(mrb, ai); | |
| } | |
| static mrb_value p19_Object_0_27(mrb_state *mrb, gproc cgproc, mrb_value_mutex_emptylock v1070, mrb_int v1071, gproc v1072, struct gctab *prevgctab) { | |
| struct proc19 *proc = (struct proc19 *)cgproc; | |
| mrb_value v1069 = proc->self; | |
| struct env19 env; | |
| struct REnv *venv = NULL; | |
| mrb_value self; | |
| mrb_value mutexself; | |
| mrb_value_mutex_emptylock v1079; | |
| mrb_int v1080; | |
| gproc v1081; | |
| mrb_float2 v1095; | |
| mrb_int v1100; | |
| mrb_value v1102; | |
| char *v1104 = "tonakai wake up "; | |
| mrb_value v1106; /* cat */ | |
| mrb_value v1108; | |
| mrb_value_mutex_emptylock v1109; | |
| mrb_value_mutex_emptylock v1113; | |
| mrb_value_mutex_emptylock v4157; | |
| mrb_value v1116; | |
| char *v1118 = "Tonakai Work done "; | |
| mrb_int v1119;/*snd*/ | |
| mrb_value v1120; /* cat */ | |
| mrb_value v1122; | |
| 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 = v1069; | |
| self = v1069; | |
| v1079 = v1070; | |
| v1080 = v1071; | |
| v1081 = v1072; | |
| /* START END */ | |
| v1095 = (((mrb_float)(rand() % 0x7fffffff)) / (double)0x7fffffff); | |
| v1100 = ((mrb_int)(v1095 * ((mrb_float)10))); | |
| sleep(v1100); | |
| v1102 = (mrb_fixnum_value(v1100)); | |
| { | |
| pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex); | |
| pthread_mutex_lock(mut); | |
| } | |
| gctab->size = 0; | |
| mrb->allocf_ud = (void *)gctab; | |
| v1106 = mrb_nil_value(); | |
| gctab->single[gctab->size] = &v1106; /* conversion */ | |
| gctab->size++; | |
| v1106 = (mrb_str_new_cstr(mrb, "tonakai wake up ")); | |
| mrb->allocf_ud = (void *)gctab; | |
| v1106 = mrb_str_cat_cstr(mrb, v1106, ({char *_buf = alloca(255);sprintf(_buf, "%d", v1071);_buf;})); | |
| pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex); | |
| gctab->single[0] = &v1070;/* normal */ | |
| { | |
| pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex); | |
| pthread_mutex_lock(mut); | |
| } | |
| mrb->allocf_ud = (void *)gctab; | |
| mrb_p(mrb, v1106); | |
| pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex); | |
| v1108 = v1106; | |
| { | |
| mrb_value tmpele[] = { | |
| }; | |
| mrb->allocf_ud = (void *)gctab; | |
| v1109 = mrb_nil_value(); | |
| gctab->single[gctab->size] = &v1109; /* 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; | |
| v1109 = mrb_nil_value(); | |
| gctab->single[gctab->size] = &v1109; /* conversion */ | |
| gctab->size++; | |
| v1109 = ({ | |
| { | |
| 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_mutex_init(&mutex->empty_lock, NULL); | |
| { | |
| pthread_mutex_t *mut = (&mutex->empty_lock); | |
| pthread_mutex_lock(mut); | |
| } | |
| 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; | |
| v4157 = ({ | |
| struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v1070); | |
| { | |
| pthread_mutex_t *mut = (&mutex->mp); | |
| pthread_mutex_lock(mut); | |
| } | |
| mrb_value tmp = mutex->obj; | |
| tmp; | |
| }) | |
| ; | |
| mrb_ary_push(mrb, v4157, v1109); | |
| v1113 = v1070; | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v1070)))->empty_lock); | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v1070)))->mp); | |
| mrb->allocf_ud = (void *)gctab; | |
| v1116 = mrb_ary_pop(mrb, ({ | |
| struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v1109); | |
| { | |
| pthread_mutex_t *mut = (&mutex->empty_lock); | |
| pthread_mutex_lock(mut); | |
| } | |
| { | |
| pthread_mutex_t *mut = (&mutex->mp); | |
| pthread_mutex_lock(mut); | |
| } | |
| mrb_value tmp = mutex->obj; | |
| tmp; | |
| }) | |
| ); | |
| if (ARY_LEN(mrb_ary_ptr(((struct mutex_wrapper_emptylock *)(DATA_PTR(v1109)))->obj)) > 0) { | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v1109)))->empty_lock); | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v1109)))->mp); | |
| } | |
| else { | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v1109)))->mp); | |
| } | |
| v1119 = v1071; | |
| { | |
| pthread_mutex_t *mut = (((struct mmc_system *)mrb->ud)->io_mutex); | |
| pthread_mutex_lock(mut); | |
| } | |
| mrb->allocf_ud = (void *)gctab; | |
| v1120 = mrb_nil_value(); | |
| gctab->single[gctab->size] = &v1120; /* conversion */ | |
| gctab->size++; | |
| v1120 = (mrb_str_new_cstr(mrb, "Tonakai Work done ")); | |
| mrb->allocf_ud = (void *)gctab; | |
| v1120 = mrb_str_cat_cstr(mrb, v1120, ({char *_buf = alloca(255);sprintf(_buf, "%d", v1119);_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, v1120); | |
| pthread_mutex_unlock(((struct mmc_system *)mrb->ud)->io_mutex); | |
| v1122 = v1120; | |
| mrb_gc_arena_restore(mrb, ai); | |
| return v1122; | |
| mrb_gc_arena_restore(mrb, ai); | |
| } | |
| static mrb_int times__Fixnum__11(mrb_state *mrb, mrb_int v2245, gproc v2246, struct gctab *prevgctab) { | |
| struct env7 env; | |
| struct REnv *venv = NULL; | |
| mrb_int self; | |
| mrb_int mutexself; | |
| gproc v2252; | |
| gproc v2302; | |
| mrb_int v2303; | |
| mrb_bool v2310;/*snd1*/ | |
| mrb_value v2296; | |
| mrb_int v2298;/*snd1*/ | |
| struct gctab *gctab = prevgctab; | |
| L100:; | |
| mutexself = v2245; | |
| self = 3; | |
| v2252 = v2246; | |
| /* START END */ | |
| L101:; | |
| L103:; | |
| v2302 = v2246; /* 1*/ | |
| v2303 = 0; /* 1*/ | |
| L105:; | |
| v2310 = (v2303 < self); | |
| if (v2310) goto L104; else goto L106; | |
| L104:; | |
| v2296 = (p10_Object_0_13(mrb, v2302, v2303, gctab)); | |
| v2298 = (v2303 + 1); | |
| v2302 = v2302; /* 2*/ | |
| v2303 = v2298; /* 2*/ | |
| goto L105; | |
| L106:; | |
| return self; | |
| } | |
| static mrb_value each__Array__14(mrb_state *mrb, mrb_value v3988, gproc v3989, struct gctab *prevgctab) { | |
| struct env14 env; | |
| struct REnv *venv = NULL; | |
| mrb_value self; | |
| mrb_value mutexself; | |
| gproc v3996; | |
| gproc v4054; | |
| mrb_int v4055; | |
| mrb_int v4063; | |
| mrb_bool v4065;/*snd1*/ | |
| mrb_value v4046; | |
| mrb_value v4048; | |
| mrb_int v4050;/*snd1*/ | |
| struct gctab *gctab = prevgctab; | |
| L210:; | |
| mutexself = v3988; | |
| self = v3988; | |
| v3996 = v3989; | |
| /* START END */ | |
| L211:; | |
| L213:; | |
| v4054 = v3989; /* 1*/ | |
| v4055 = 0; /* 1*/ | |
| L215:; | |
| v4063 = ARY_LEN2(mrb_ary_ptr(self)); | |
| v4065 = (v4055 < v4063); | |
| if (v4065) goto L214; else goto L216; | |
| L214:; | |
| { | |
| v4046 = ARY_PTR2(mrb_ary_ptr(self))[v4055]; | |
| } | |
| v4048 = (p11_Object_1_15(mrb, v4054, v4046, gctab)); | |
| v4050 = (v4055 + 1); | |
| v4054 = v4054; /* 2*/ | |
| v4055 = v4050; /* 2*/ | |
| goto L215; | |
| L216:; | |
| return self; | |
| } | |
| static mrb_value each__Array__16(mrb_state *mrb, mrb_value v3988, gproc v3989, struct gctab *prevgctab) { | |
| struct env14 env; | |
| struct REnv *venv = NULL; | |
| mrb_value self; | |
| mrb_value mutexself; | |
| gproc v3996; | |
| gproc v4054; | |
| mrb_int v4055; | |
| mrb_int v4063; | |
| mrb_bool v4065;/*snd1*/ | |
| mrb_value v4046; | |
| mrb_value v4048; | |
| mrb_int v4050;/*snd1*/ | |
| struct gctab *gctab = prevgctab; | |
| L210:; | |
| mutexself = v3988; | |
| self = v3988; | |
| v3996 = v3989; | |
| /* START END */ | |
| L211:; | |
| L213:; | |
| v4054 = v3989; /* 1*/ | |
| v4055 = 0; /* 1*/ | |
| L215:; | |
| v4063 = ARY_LEN2(mrb_ary_ptr(self)); | |
| v4065 = (v4055 < v4063); | |
| if (v4065) goto L214; else goto L216; | |
| L214:; | |
| { | |
| v4046 = ARY_PTR2(mrb_ary_ptr(self))[v4055]; | |
| } | |
| v4048 = (p15_Object_2_17(mrb, v4054, v4046, gctab)); | |
| v4050 = (v4055 + 1); | |
| v4054 = v4054; /* 2*/ | |
| v4055 = v4050; /* 2*/ | |
| goto L215; | |
| L216:; | |
| return self; | |
| } | |
| static mrb_int times__Fixnum__30(mrb_state *mrb, mrb_int v2245, gproc v2246, struct gctab *prevgctab) { | |
| struct env7 env; | |
| struct REnv *venv = NULL; | |
| mrb_int self; | |
| mrb_int mutexself; | |
| gproc v2252; | |
| gproc v2302; | |
| mrb_int v2303; | |
| mrb_bool v2310;/*snd1*/ | |
| mrb_value v2296; | |
| mrb_int v2298;/*snd1*/ | |
| struct gctab *gctab = prevgctab; | |
| L100:; | |
| mutexself = v2245; | |
| self = 9; | |
| v2252 = v2246; | |
| /* START END */ | |
| L101:; | |
| L103:; | |
| v2302 = v2246; /* 1*/ | |
| v2303 = 0; /* 1*/ | |
| L105:; | |
| v2310 = (v2303 < self); | |
| if (v2310) goto L104; else goto L106; | |
| L104:; | |
| v2296 = (p21_Object_0_32(mrb, v2302, v2303, gctab)); | |
| v2298 = (v2303 + 1); | |
| v2302 = v2302; /* 2*/ | |
| v2303 = v2298; /* 2*/ | |
| goto L105; | |
| L106:; | |
| return self; | |
| } | |
| static mrb_value each__Array__33(mrb_state *mrb, mrb_value v3988, gproc v3989, struct gctab *prevgctab) { | |
| struct env14 env; | |
| struct REnv *venv = NULL; | |
| mrb_value self; | |
| mrb_value mutexself; | |
| gproc v3996; | |
| gproc v4054; | |
| mrb_int v4055; | |
| mrb_int v4063; | |
| mrb_bool v4065;/*snd1*/ | |
| mrb_value_mutex_emptylock v4046; | |
| mrb_value v4048; | |
| mrb_int v4050;/*snd1*/ | |
| struct gctab *gctab = prevgctab; | |
| L210:; | |
| mutexself = v3988; | |
| self = v3988; | |
| v3996 = v3989; | |
| /* START END */ | |
| L211:; | |
| L213:; | |
| v4054 = v3989; /* 1*/ | |
| v4055 = 0; /* 1*/ | |
| L215:; | |
| v4063 = ARY_LEN2(mrb_ary_ptr(self)); | |
| v4065 = (v4055 < v4063); | |
| if (v4065) goto L214; else goto L216; | |
| L214:; | |
| { | |
| v4046 = ARY_PTR2(mrb_ary_ptr(self))[v4055]; | |
| } | |
| v4048 = (p22_Object_1_35(mrb, v4054, v4046, gctab)); | |
| v4050 = (v4055 + 1); | |
| v4054 = v4054; /* 2*/ | |
| v4055 = v4050; /* 2*/ | |
| goto L215; | |
| L216:; | |
| return self; | |
| } | |
| static mrb_value p10_Object_0_13(mrb_state *mrb, gproc cgproc, mrb_int v886, struct gctab *prevgctab) { | |
| struct proc10 *proc = (struct proc10 *)cgproc; | |
| mrb_value v885 = proc->self; | |
| struct env10 env; | |
| struct REnv *venv = NULL; | |
| mrb_value self; | |
| mrb_value mutexself; | |
| mrb_int v893; | |
| mrb_value_mutex_emptylock v903; | |
| mrb_value v905; | |
| mrb_value v907; | |
| mrb_value v910; | |
| mrb_value v2380; | |
| struct gctab *gctab = prevgctab; | |
| env.prev = proc->env; | |
| L34:; | |
| mutexself = v885; | |
| self = v885; | |
| v893 = v886; | |
| /* START END */ | |
| v903 = proc->env->prev->v761; | |
| mrb->allocf_ud = (void *)gctab; | |
| v905 = ({ | |
| struct mutex_wrapper *mutex = (struct mutex_wrapper *)DATA_PTR(mrb_ary_pop(mrb, ({ | |
| struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v903); | |
| { | |
| pthread_mutex_t *mut = (&mutex->empty_lock); | |
| pthread_mutex_lock(mut); | |
| } | |
| { | |
| pthread_mutex_t *mut = (&mutex->mp); | |
| pthread_mutex_lock(mut); | |
| } | |
| mrb_value tmp = mutex->obj; | |
| 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(v903)))->mp); | |
| v907 = proc->env->v879; | |
| mrb->allocf_ud = (void *)gctab; | |
| v2380 = v907; | |
| mrb_ary_push(mrb, v2380, v905); | |
| v910 = v907; | |
| return v910; | |
| } | |
| static mrb_value p11_Object_1_15(mrb_state *mrb, gproc cgproc, mrb_value v920, struct gctab *prevgctab) { | |
| struct proc11 *proc = (struct proc11 *)cgproc; | |
| mrb_value v919 = proc->self; | |
| struct env11 env; | |
| struct REnv *venv = NULL; | |
| mrb_value self; | |
| mrb_value mutexself; | |
| mrb_value v925; | |
| mrb_int v929; | |
| mrb_value_mutex_emptylock v930; | |
| struct gctab *gctab = prevgctab; | |
| env.prev = proc->env; | |
| L35:; | |
| mutexself = v919; | |
| self = v919; | |
| v925 = v920; | |
| /* START END */ | |
| { | |
| mrb_value *array = ARY_PTR2(mrb_ary_ptr(v925)); | |
| v929 = (mrb_fixnum(array[0])); | |
| v930 = array[1]; | |
| } | |
| return mrb_nil_value(); | |
| } | |
| static mrb_value p15_Object_2_17(mrb_state *mrb, gproc cgproc, mrb_value v946, struct gctab *prevgctab) { | |
| struct proc15 *proc = (struct proc15 *)cgproc; | |
| mrb_value v945 = proc->self; | |
| struct env15 env; | |
| struct REnv *venv = NULL; | |
| mrb_value self; | |
| mrb_value mutexself; | |
| mrb_value v952; | |
| mrb_value_mutex_emptylock v963; | |
| mrb_value_mutex_emptylock v966; | |
| mrb_value_mutex_emptylock v4087; | |
| struct gctab *gctab = prevgctab; | |
| env.prev = proc->env; | |
| L36:; | |
| mutexself = v945; | |
| self = v945; | |
| v952 = v946; | |
| /* START END */ | |
| { | |
| v963 = ARY_PTR2(mrb_ary_ptr(v946))[1]; | |
| } | |
| mrb->allocf_ud = (void *)gctab; | |
| v4087 = ({ | |
| struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v963); | |
| { | |
| pthread_mutex_t *mut = (&mutex->mp); | |
| pthread_mutex_lock(mut); | |
| } | |
| mrb_value tmp = mutex->obj; | |
| tmp; | |
| }) | |
| ; | |
| mrb_ary_push(mrb, v4087, (mrb_fixnum_value(1))); | |
| v966 = v963; | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v963)))->empty_lock); | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v963)))->mp); | |
| return mrb_nil_value(); | |
| } | |
| static mrb_value p21_Object_0_32(mrb_state *mrb, gproc cgproc, mrb_int v1151, struct gctab *prevgctab) { | |
| struct proc21 *proc = (struct proc21 *)cgproc; | |
| mrb_value v1150 = proc->self; | |
| struct env21 env; | |
| struct REnv *venv = NULL; | |
| mrb_value self; | |
| mrb_value mutexself; | |
| mrb_int v1158; | |
| mrb_value_mutex_emptylock v1168; | |
| mrb_value_mutex_emptylock v1170; | |
| mrb_value v1172; | |
| mrb_value v1175; | |
| mrb_value v4198; | |
| struct gctab *gctab = prevgctab; | |
| env.prev = proc->env; | |
| L42:; | |
| mutexself = v1150; | |
| self = v1150; | |
| v1158 = v1151; | |
| /* START END */ | |
| v1168 = proc->env->prev->v1034; | |
| mrb->allocf_ud = (void *)gctab; | |
| v1170 = mrb_ary_pop(mrb, ({ | |
| struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v1168); | |
| { | |
| pthread_mutex_t *mut = (&mutex->empty_lock); | |
| pthread_mutex_lock(mut); | |
| } | |
| { | |
| pthread_mutex_t *mut = (&mutex->mp); | |
| pthread_mutex_lock(mut); | |
| } | |
| mrb_value tmp = mutex->obj; | |
| tmp; | |
| }) | |
| ); | |
| if (ARY_LEN(mrb_ary_ptr(((struct mutex_wrapper_emptylock *)(DATA_PTR(v1168)))->obj)) > 0) { | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v1168)))->empty_lock); | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v1168)))->mp); | |
| } | |
| else { | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v1168)))->mp); | |
| } | |
| v1172 = proc->env->v1144; | |
| mrb->allocf_ud = (void *)gctab; | |
| v4198 = v1172; | |
| mrb_ary_push(mrb, v4198, v1170); | |
| v1175 = v1172; | |
| return v1175; | |
| } | |
| static mrb_value p22_Object_1_35(mrb_state *mrb, gproc cgproc, mrb_value_mutex_emptylock v1189, struct gctab *prevgctab) { | |
| struct proc22 *proc = (struct proc22 *)cgproc; | |
| mrb_value v1188 = proc->self; | |
| struct env22 env; | |
| struct REnv *venv = NULL; | |
| mrb_value self; | |
| mrb_value mutexself; | |
| mrb_value_mutex_emptylock v1195; | |
| mrb_value_mutex_emptylock v1206; | |
| mrb_value_mutex_emptylock v4208; | |
| struct gctab *gctab = prevgctab; | |
| env.prev = proc->env; | |
| L43:; | |
| mutexself = v1188; | |
| self = v1188; | |
| v1195 = v1189; | |
| /* START END */ | |
| mrb->allocf_ud = (void *)gctab; | |
| v4208 = ({ | |
| struct mutex_wrapper_emptylock *mutex = (struct mutex_wrapper_emptylock *)DATA_PTR(v1189); | |
| { | |
| pthread_mutex_t *mut = (&mutex->mp); | |
| pthread_mutex_lock(mut); | |
| } | |
| mrb_value tmp = mutex->obj; | |
| tmp; | |
| }) | |
| ; | |
| mrb_ary_push(mrb, v4208, (mrb_fixnum_value(1))); | |
| v1206 = v1189; | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v1189)))->empty_lock); | |
| pthread_mutex_unlock(&((struct mutex_wrapper_emptylock *)(DATA_PTR(v1189)))->mp); | |
| 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=-ce89660 <#<Irep:0x7ffff312dbb0> pos=../mruby-meta-circular/sample/santa2.rb:116>> e=false=>:canempty, Thread Proc<irep=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 41, :unshift], Thread Proc<irep=-ce76a30 <#<Irep:0x7ffff3308100> pos=../mruby-meta-circular/sample/santa2.rb:58>> e=false=>[:modify, 79, :unshift]}>]] | |
| Class #<Class:MMC_EXT> | |
| Instance variables | |
| methodes | |
| Module Integral | |
| Instance variables | |
| methodes | |
| Class Fixnum | |
| Instance variables | |
| methodes | |
| times (Literal Fixnum, Proc<irep=-ce80160 <#<Irep:0x7ffff32a2810> pos=../mruby-meta-circular/sample/santa2.rb:18>>) -> Literal Fixnum | |
| times (Literal Fixnum, Proc<irep=-ce87ce0 <#<Irep:0x7ffff32cb7c0> pos=../mruby-meta-circular/sample/santa2.rb:31>>) -> Literal Fixnum | |
| times (Literal Fixnum, Proc<irep=-ce87e00 <#<Irep:0x7ffff32ad670> pos=../mruby-meta-circular/sample/santa2.rb:30>>) -> Literal Fixnum | |
| times (Literal Fixnum, Proc<irep=-ce76950 <#<Irep:0x7ffff3303060> pos=../mruby-meta-circular/sample/santa2.rb:61>>) -> Literal Fixnum | |
| times (Literal Fixnum, Proc<irep=-ce75960 <#<Irep:0x7ffff332d330> pos=../mruby-meta-circular/sample/santa2.rb:74>>) -> Literal Fixnum | |
| times (Literal Fixnum, Proc<irep=-ce75a30 <#<Irep:0x7ffff33305d0> pos=../mruby-meta-circular/sample/santa2.rb:73>>) -> 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=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-ce80040 <#<Irep:0x7ffff329d6e0> 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=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-ce80040 <#<Irep:0x7ffff329d6e0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true=>:canempty}> e=true l=7 th={Thread Proc<irep=-ce80290 <#<Irep:0x7ffff3287970> 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=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-ce80040 <#<Irep:0x7ffff329d6e0> 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=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-ce80040 <#<Irep:0x7ffff329d6e0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true=>:canempty}> e=true l=7 th={Thread Proc<irep=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>:arrayset}> e=true l=6 th={Thread Proc<irep=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 33, :push]}, Proc<irep=-ce87990 <#<Irep:0x7ffff32c3ea0> 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=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-ce80040 <#<Irep:0x7ffff329d6e0> 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=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-ce80040 <#<Irep:0x7ffff329d6e0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true=>:canempty}> e=true l=7 th={Thread Proc<irep=-ce80290 <#<Irep:0x7ffff3287970> 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=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-ce80040 <#<Irep:0x7ffff329d6e0> 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=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-ce80040 <#<Irep:0x7ffff329d6e0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true=>:canempty}> e=true l=7 th={Thread Proc<irep=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>:arrayset}> e=true l=6 th={Thread Proc<irep=-ce80290 <#<Irep:0x7ffff3287970> 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=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-ce80040 <#<Irep:0x7ffff329d6e0> 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=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-ce80040 <#<Irep:0x7ffff329d6e0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true=>:canempty}> e=true l=7 th={Thread Proc<irep=-ce80290 <#<Irep:0x7ffff3287970> 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=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-ce80040 <#<Irep:0x7ffff329d6e0> 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=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-ce80040 <#<Irep:0x7ffff329d6e0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true=>:canempty}> e=true l=7 th={Thread Proc<irep=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>:arrayset}> e=true l=6 th={Thread Proc<irep=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 33, :push]}, Proc<irep=-ce75eb0 <#<Irep:0x7ffff32de520> 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=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-ce80040 <#<Irep:0x7ffff329d6e0> 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=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-ce80040 <#<Irep:0x7ffff329d6e0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true=>:canempty}> e=true l=7 th={Thread Proc<irep=-ce80290 <#<Irep:0x7ffff3287970> 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=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-ce80040 <#<Irep:0x7ffff329d6e0> 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=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 45, :push], Thread Proc<irep=-ce80040 <#<Irep:0x7ffff329d6e0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true=>:canempty}> e=true l=7 th={Thread Proc<irep=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>:arrayset}> e=true l=6 th={Thread Proc<irep=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 33, :push]} | |
| each (Array<[:undef] => Thread Proc<irep=-ce80040 <#<Irep:0x7ffff329d6e0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true|1 => Thread Proc<irep=-ce80040 <#<Irep:0x7ffff329d6e0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true> e=true l=4 th={Thread Proc<irep=-ce80290 <#<Irep:0x7ffff3287970> pos=../mruby-meta-circular/sample/santa2.rb:15>> e=false=>[:modify, 19, :push]}, Proc<irep=-ce76bf0 <#<Irep:0x7ffff32f3cf0> pos=../mruby-meta-circular/sample/santa2.rb:52>>) -> Array<[:undef] => Thread Proc<irep=-ce80040 <#<Irep:0x7ffff329d6e0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true|1 => Thread Proc<irep=-ce80040 <#<Irep:0x7ffff329d6e0> pos=../mruby-meta-circular/sample/santa2.rb:19>> e=true> e=true l=4 th={Thread Proc<irep=-ce80290 <#<Irep:0x7ffff3287970> 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=-ce76a30 <#<Irep:0x7ffff3308100> pos=../mruby-meta-circular/sample/santa2.rb:58>> e=false=>:arrayset, Thread Proc<irep=-ce75e20 <#<Irep:0x7ffff32fdf30> pos=../mruby-meta-circular/sample/santa2.rb:62>> e=true=>:canempty}|1 => Array<[:undef] => Literal Fixnum|1 => Literal Fixnum> e=true l=7 th={Thread Proc<irep=-ce76a30 <#<Irep:0x7ffff3308100> pos=../mruby-meta-circular/sample/santa2.rb:58>> e=false=>:arrayset, Thread Proc<irep=-ce75e20 <#<Irep:0x7ffff32fdf30> pos=../mruby-meta-circular/sample/santa2.rb:62>> e=true=>:canempty}> e=true l=6 th={Thread Proc<irep=-ce76a30 <#<Irep:0x7ffff3308100> pos=../mruby-meta-circular/sample/santa2.rb:58>> e=false=>[:modify, 76, :push]}, Proc<irep=-ce7bb30 <#<Irep:0x7ffff33459a0> pos=../mruby-meta-circular/sample/santa2.rb:81>>) -> Array<[:undef] => Array<[:undef] => Literal Fixnum|1 => Literal Fixnum> e=true l=7 th={Thread Proc<irep=-ce76a30 <#<Irep:0x7ffff3308100> pos=../mruby-meta-circular/sample/santa2.rb:58>> e=false=>:arrayset, Thread Proc<irep=-ce75e20 <#<Irep:0x7ffff32fdf30> pos=../mruby-meta-circular/sample/santa2.rb:62>> e=true=>:canempty}|1 => Array<[:undef] => Literal Fixnum|1 => Literal Fixnum> e=true l=7 th={Thread Proc<irep=-ce76a30 <#<Irep:0x7ffff3308100> pos=../mruby-meta-circular/sample/santa2.rb:58>> e=false=>:arrayset, Thread Proc<irep=-ce75e20 <#<Irep:0x7ffff32fdf30> pos=../mruby-meta-circular/sample/santa2.rb:62>> e=true=>:canempty}> e=true l=6 th={Thread Proc<irep=-ce76a30 <#<Irep:0x7ffff3308100> pos=../mruby-meta-circular/sample/santa2.rb:58>> e=false=>[:modify, 76, :push]} | |
| each (Array<[:undef] => Thread Proc<irep=-ce75e20 <#<Irep:0x7ffff32fdf30> pos=../mruby-meta-circular/sample/santa2.rb:62>> e=true|1 => Thread Proc<irep=-ce75e20 <#<Irep:0x7ffff32fdf30> pos=../mruby-meta-circular/sample/santa2.rb:62>> e=true> e=true l=4 th={Thread Proc<irep=-ce76a30 <#<Irep:0x7ffff3308100> pos=../mruby-meta-circular/sample/santa2.rb:58>> e=false=>[:modify, 62, :push]}, Proc<irep=-ce7b950 <#<Irep:0x7ffff333bb30> pos=../mruby-meta-circular/sample/santa2.rb:89>>) -> Array<[:undef] => Thread Proc<irep=-ce75e20 <#<Irep:0x7ffff32fdf30> pos=../mruby-meta-circular/sample/santa2.rb:62>> e=true|1 => Thread Proc<irep=-ce75e20 <#<Irep:0x7ffff32fdf30> pos=../mruby-meta-circular/sample/santa2.rb:62>> e=true> e=true l=4 th={Thread Proc<irep=-ce76a30 <#<Irep:0x7ffff3308100> pos=../mruby-meta-circular/sample/santa2.rb:58>> e=false=>[:modify, 62, :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