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/mrbgems/mruby-kernel-ext/src/kernel.c

    r321 r331  
    1 #include "mruby.h"
    2 #include "mruby/error.h"
    3 #include "mruby/array.h"
    4 #include "mruby/hash.h"
     1#include <mruby.h>
     2#include <mruby/error.h>
     3#include <mruby/array.h>
     4#include <mruby/hash.h>
     5#include <mruby/range.h>
     6
     7static mrb_value
     8mrb_f_caller(mrb_state *mrb, mrb_value self)
     9{
     10  mrb_value bt, v, length;
     11  mrb_int bt_len, argc, lev, n;
     12
     13  bt = mrb_get_backtrace(mrb);
     14  bt_len = RARRAY_LEN(bt);
     15  argc = mrb_get_args(mrb, "|oo", &v, &length);
     16
     17  switch (argc) {
     18    case 0:
     19      lev = 1;
     20      n = bt_len - lev;
     21      break;
     22    case 1:
     23      if (mrb_type(v) == MRB_TT_RANGE) {
     24        mrb_int beg, len;
     25        if (mrb_range_beg_len(mrb, v, &beg, &len, bt_len, TRUE) == 1) {
     26          lev = beg;
     27          n = len;
     28        }
     29        else {
     30          return mrb_nil_value();
     31        }
     32      }
     33      else {
     34        v = mrb_to_int(mrb, v);
     35        lev = mrb_fixnum(v);
     36        if (lev < 0) {
     37          mrb_raisef(mrb, E_ARGUMENT_ERROR, "negative level (%S)", v);
     38        }
     39        n = bt_len - lev;
     40      }
     41      break;
     42    case 2:
     43      lev = mrb_fixnum(mrb_to_int(mrb, v));
     44      n = mrb_fixnum(mrb_to_int(mrb, length));
     45      if (lev < 0) {
     46        mrb_raisef(mrb, E_ARGUMENT_ERROR, "negative level (%S)", v);
     47      }
     48      if (n < 0) {
     49        mrb_raisef(mrb, E_ARGUMENT_ERROR, "negative size (%S)", length);
     50      }
     51      break;
     52    default:
     53      lev = n = 0;
     54      break;
     55  }
     56
     57  if (n == 0) {
     58    return mrb_ary_new(mrb);
     59  }
     60
     61  return mrb_funcall(mrb, bt, "[]", 2, mrb_fixnum_value(lev), mrb_fixnum_value(n));
     62}
    563
    664/*
     
    62120 *
    63121 *  Returns <i>arg</i> converted to a float. Numeric types are converted
    64  *  directly, the rest are converted using <i>arg</i>.to_f. 
     122 *  directly, the rest are converted using <i>arg</i>.to_f.
    65123 *
    66124 *     Float(1)           #=> 1.0
     
    171229
    172230  mrb_define_module_function(mrb, krn, "fail", mrb_f_raise, MRB_ARGS_OPT(2));
     231  mrb_define_module_function(mrb, krn, "caller", mrb_f_caller, MRB_ARGS_OPT(2));
    173232  mrb_define_method(mrb, krn, "__method__", mrb_f_method, MRB_ARGS_NONE());
    174233  mrb_define_module_function(mrb, krn, "Integer", mrb_f_integer, MRB_ARGS_ANY());
Note: See TracChangeset for help on using the changeset viewer.