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:
2 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());
  • EcnlProtoTool/trunk/mruby-1.3.0/mrbgems/mruby-kernel-ext/test/kernel.rb

    r321 r331  
    22  assert_raise(RuntimeError) { fail }
    33  assert_raise(RuntimeError) { Kernel.fail }
     4end
     5
     6assert('Kernel.caller, Kernel#caller') do
     7  skip "backtrace isn't available" if caller(0).empty?
     8
     9  caller_lineno = __LINE__ + 3
     10  c = Class.new do
     11    def foo(*args)
     12      caller(*args)
     13    end
     14
     15    def bar(*args)
     16      foo(*args)
     17    end
     18
     19    def baz(*args)
     20      bar(*args)
     21    end
     22  end
     23  assert_equal "kernel.rb:#{caller_lineno}:in foo", c.new.baz(0)[0][-19..-1]
     24  assert_equal "bar", c.new.baz[0][-3..-1]
     25  assert_equal "foo", c.new.baz(0)[0][-3..-1]
     26  assert_equal "bar", c.new.baz(1)[0][-3..-1]
     27  assert_equal "baz", c.new.baz(2)[0][-3..-1]
     28  assert_equal ["foo", "bar"], c.new.baz(0, 2).map { |i| i[-3..-1] }
     29  assert_equal ["bar", "baz"], c.new.baz(1..2).map { |i| i[-3..-1] }
     30  assert_nil c.new.baz(10..20)
     31  assert_raise(ArgumentError) { c.new.baz(-1) }
     32  assert_raise(ArgumentError) { c.new.baz(-1, 1) }
     33  assert_raise(ArgumentError) { c.new.baz(1, -1) }
     34  assert_raise(TypeError) { c.new.baz(nil) }
    435end
    536
     
    2354  assert_equal(930, Integer("0930", 10))
    2455  assert_equal(7, Integer("111", 2))
     56  assert_equal(0, Integer("0"))
     57  assert_equal(0, Integer("00000"))
    2558  assert_raise(TypeError) { Integer(nil) }
    2659end
Note: See TracChangeset for help on using the changeset viewer.