Ignore:
Timestamp:
Jan 21, 2018, 12:10:09 AM (6 years ago)
Author:
coas-nagasima
Message:

prototoolに関連するプロジェクトをnewlibからmuslを使うよう変更・更新
ntshellをnewlibの下位の実装から、muslのsyscallの実装に変更・更新
以下のOSSをアップデート
・mruby-1.3.0
・musl-1.1.18
・onigmo-6.1.3
・tcc-0.9.27
以下のOSSを追加
・openssl-1.1.0e
・curl-7.57.0
・zlib-1.2.11
以下のmrbgemsを追加
・iij/mruby-digest
・iij/mruby-env
・iij/mruby-errno
・iij/mruby-iijson
・iij/mruby-ipaddr
・iij/mruby-mock
・iij/mruby-require
・iij/mruby-tls-openssl

Location:
EcnlProtoTool/trunk/mruby-1.3.0
Files:
1 edited
1 moved

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/mruby-1.3.0/src/proc.c

    r321 r331  
    55*/
    66
    7 #include "mruby.h"
    8 #include "mruby/class.h"
    9 #include "mruby/proc.h"
    10 #include "mruby/opcode.h"
     7#include <mruby.h>
     8#include <mruby/class.h>
     9#include <mruby/proc.h>
     10#include <mruby/opcode.h>
    1111
    1212static mrb_code call_iseq[] = {
     
    4242  e = (struct REnv*)mrb_obj_alloc(mrb, MRB_TT_ENV, (struct RClass*)mrb->c->ci->proc->env);
    4343  MRB_SET_ENV_STACK_LEN(e, nlocals);
    44   e->mid = mrb->c->ci->mid;
     44  e->cxt.c = mrb->c;
    4545  e->cioff = mrb->c->ci - mrb->c->cibase;
    4646  e->stack = mrb->c->stack;
     
    6262  }
    6363  p->env = e;
     64  mrb_field_write_barrier(mrb, (struct RBasic *)p, (struct RBasic *)p->env);
    6465}
    6566
     
    136137}
    137138
    138 MRB_API void
     139void
    139140mrb_proc_copy(struct RProc *a, struct RProc *b)
    140141{
    141142  a->flags = b->flags;
    142143  a->body = b->body;
    143   if (!MRB_PROC_CFUNC_P(a)) {
     144  if (!MRB_PROC_CFUNC_P(a) && a->body.irep) {
    144145    a->body.irep->refcnt++;
    145146  }
     
    149150
    150151static mrb_value
    151 mrb_proc_initialize(mrb_state *mrb, mrb_value self)
     152mrb_proc_s_new(mrb_state *mrb, mrb_value proc_class)
    152153{
    153154  mrb_value blk;
     155  mrb_value proc;
     156  struct RProc *p;
    154157
    155158  mrb_get_args(mrb, "&", &blk);
     
    158161    mrb_raise(mrb, E_ARGUMENT_ERROR, "tried to create Proc object without a block");
    159162  }
    160   else {
    161     mrb_proc_copy(mrb_proc_ptr(self), mrb_proc_ptr(blk));
    162   }
    163   return self;
     163  p = (struct RProc *)mrb_obj_alloc(mrb, MRB_TT_PROC, mrb_class_ptr(proc_class));
     164  mrb_proc_copy(p, mrb_proc_ptr(blk));
     165  proc = mrb_obj_value(p);
     166  mrb_funcall_with_block(mrb, proc, mrb_intern_lit(mrb, "initialize"), 0, NULL, blk);
     167  return proc;
    164168}
    165169
     
    189193}
    190194
    191 mrb_code*
    192 mrb_proc_iseq(mrb_state *mrb, struct RProc *p)
    193 {
    194   return p->body.irep->iseq;
    195 }
    196 
    197195/* 15.2.17.4.2 */
    198196static mrb_value
     
    200198{
    201199  struct RProc *p = mrb_proc_ptr(self);
    202   mrb_code *iseq = mrb_proc_iseq(mrb, p);
     200  struct mrb_irep *irep;
     201  mrb_code *iseq;
    203202  mrb_aspec aspec;
    204203  int ma, op, ra, pa, arity;
     
    209208  }
    210209
     210  irep = p->body.irep;
     211  if (!irep) {
     212    return mrb_fixnum_value(0);
     213  }
     214
     215  iseq = irep->iseq;
    211216  /* arity is depend on OP_ENTER */
    212217  if (GET_OPCODE(*iseq) != OP_ENTER) {
     
    267272  call_irep->iseq = call_iseq;
    268273  call_irep->ilen = 1;
    269 
    270   mrb_define_method(mrb, mrb->proc_class, "initialize", mrb_proc_initialize, MRB_ARGS_NONE());
     274  call_irep->nregs = 2;         /* receiver and block */
     275
     276  mrb_define_class_method(mrb, mrb->proc_class, "new", mrb_proc_s_new, MRB_ARGS_ANY());
    271277  mrb_define_method(mrb, mrb->proc_class, "initialize_copy", mrb_proc_init_copy, MRB_ARGS_REQ(1));
    272278  mrb_define_method(mrb, mrb->proc_class, "arity", mrb_proc_arity, MRB_ARGS_NONE());
Note: See TracChangeset for help on using the changeset viewer.