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/range.c

    r321 r331  
    55*/
    66
    7 #include "mruby.h"
    8 #include "mruby/class.h"
    9 #include "mruby/range.h"
    10 #include "mruby/string.h"
    11 #include "mruby/array.h"
     7#include <mruby.h>
     8#include <mruby/class.h>
     9#include <mruby/range.h>
     10#include <mruby/string.h>
     11#include <mruby/array.h>
    1212
    1313#define RANGE_CLASS (mrb_class_get(mrb, "Range"))
     14
     15MRB_API struct RRange*
     16mrb_range_ptr(mrb_state *mrb, mrb_value v)
     17{
     18  struct RRange *r = (struct RRange*)mrb_ptr(v);
     19
     20  if (r->edges == NULL) {
     21    mrb_raise(mrb, E_ARGUMENT_ERROR, "uninitialized range");
     22  }
     23  return r;
     24}
    1425
    1526static void
     
    5869mrb_range_beg(mrb_state *mrb, mrb_value range)
    5970{
    60   struct RRange *r = mrb_range_ptr(range);
     71  struct RRange *r = mrb_range_ptr(mrb, range);
    6172
    6273  return r->edges->beg;
     
    7788mrb_range_end(mrb_state *mrb, mrb_value range)
    7889{
    79   struct RRange *r = mrb_range_ptr(range);
     90  struct RRange *r = mrb_range_ptr(mrb, range);
    8091
    8192  return r->edges->end;
     
    91102mrb_range_excl(mrb_state *mrb, mrb_value range)
    92103{
    93   struct RRange *r = mrb_range_ptr(range);
     104  struct RRange *r = mrb_range_ptr(mrb, range);
    94105
    95106  return mrb_bool_value(r->excl);
     
    99110range_init(mrb_state *mrb, mrb_value range, mrb_value beg, mrb_value end, mrb_bool exclude_end)
    100111{
    101   struct RRange *r = mrb_range_ptr(range);
     112  struct RRange *r = mrb_range_raw_ptr(range);
    102113
    103114  range_check(mrb, beg, end);
     
    130141  }
    131142  /* Ranges are immutable, so that they should be initialized only once. */
     143  if (mrb_range_raw_ptr(range)->edges) {
     144    mrb_name_error(mrb, mrb_intern_lit(mrb, "initialize"), "`initialize' called twice");
     145  }
    132146  range_init(mrb, range, beg, end, exclusive);
    133147  return range;
     
    153167  struct RRange *rr;
    154168  struct RRange *ro;
    155   mrb_value obj;
     169  mrb_value obj, v1, v2;
    156170
    157171  mrb_get_args(mrb, "o", &obj);
     
    162176  }
    163177
    164   rr = mrb_range_ptr(range);
    165   ro = mrb_range_ptr(obj);
    166   if (!mrb_bool(mrb_funcall(mrb, rr->edges->beg, "==", 1, ro->edges->beg)) ||
    167       !mrb_bool(mrb_funcall(mrb, rr->edges->end, "==", 1, ro->edges->end)) ||
    168       rr->excl != ro->excl) {
     178  rr = mrb_range_ptr(mrb, range);
     179  ro = mrb_range_ptr(mrb, obj);
     180  v1 = mrb_funcall(mrb, rr->edges->beg, "==", 1, ro->edges->beg);
     181  v2 = mrb_funcall(mrb, rr->edges->end, "==", 1, ro->edges->end);
     182  if (!mrb_bool(v1) || !mrb_bool(v2) || rr->excl != ro->excl) {
    169183    return mrb_false_value();
    170184  }
     
    220234{
    221235  mrb_value val;
    222   struct RRange *r = mrb_range_ptr(range);
     236  struct RRange *r = mrb_range_ptr(mrb, range);
    223237  mrb_value beg, end;
    224238  mrb_bool include_p;
     
    228242  beg = r->edges->beg;
    229243  end = r->edges->end;
    230   include_p = r_le(mrb, beg, val) && /* beg <= val */
    231               ((r->excl && r_gt(mrb, end, val)) || /* end >  val */
    232               (r_ge(mrb, end, val))); /* end >= val */
     244  include_p = r_le(mrb, beg, val) &&           /* beg <= val */
     245              (r->excl ? r_gt(mrb, end, val)  /* end >  val */
     246                       : r_ge(mrb, end, val)); /* end >= val */
    233247
    234248  return mrb_bool_value(include_p);
    235249}
    236250
    237 static mrb_bool
    238 range_beg_len(mrb_state *mrb, mrb_value range, mrb_int *begp, mrb_int *lenp, mrb_int len, mrb_bool trunc)
     251MRB_API mrb_int
     252mrb_range_beg_len(mrb_state *mrb, mrb_value range, mrb_int *begp, mrb_int *lenp, mrb_int len, mrb_bool trunc)
    239253{
    240254  mrb_int beg, end;
    241   struct RRange *r = mrb_range_ptr(range);
    242 
    243   if (mrb_type(range) != MRB_TT_RANGE) return FALSE;
     255  struct RRange *r;
     256
     257  if (mrb_type(range) != MRB_TT_RANGE) return 0;
     258  r = mrb_range_ptr(mrb, range);
    244259
    245260  beg = mrb_int(mrb, r->edges->beg);
     
    248263  if (beg < 0) {
    249264    beg += len;
    250     if (beg < 0) return FALSE;
     265    if (beg < 0) return 2;
    251266  }
    252267
    253268  if (trunc) {
    254     if (beg > len) return FALSE;
     269    if (beg > len) return 2;
    255270    if (end > len) end = len;
    256271  }
     
    264279  *begp = beg;
    265280  *lenp = len;
    266   return TRUE;
    267 }
    268 
    269 MRB_API mrb_bool
    270 mrb_range_beg_len(mrb_state *mrb, mrb_value range, mrb_int *begp, mrb_int *lenp, mrb_int len)
    271 {
    272   return range_beg_len(mrb, range, begp, lenp, len, TRUE);
     281  return 1;
    273282}
    274283
     
    285294{
    286295  mrb_value str, str2;
    287   struct RRange *r = mrb_range_ptr(range);
     296  struct RRange *r = mrb_range_ptr(mrb, range);
    288297
    289298  str  = mrb_obj_as_string(mrb, r->edges->beg);
     
    310319{
    311320  mrb_value str, str2;
    312   struct RRange *r = mrb_range_ptr(range);
     321  struct RRange *r = mrb_range_ptr(mrb, range);
    313322
    314323  str  = mrb_inspect(mrb, r->edges->beg);
     
    350359  if (mrb_type(obj) != MRB_TT_RANGE) return mrb_false_value();
    351360
    352   r = mrb_range_ptr(range);
    353   o = mrb_range_ptr(obj);
     361  r = mrb_range_ptr(mrb, range);
     362  o = mrb_range_ptr(mrb, obj);
    354363  if (!mrb_eql(mrb, r->edges->beg, o->edges->beg) ||
    355364      !mrb_eql(mrb, r->edges->end, o->edges->end) ||
     
    374383  }
    375384
    376   r = mrb_range_ptr(src);
     385  r = mrb_range_ptr(mrb, src);
    377386  range_init(mrb, copy, r->edges->beg, r->edges->end, r->excl);
    378387
     
    391400      mrb_ary_push(mrb, result, func(mrb, obj, mrb_fixnum(argv[i])));
    392401    }
    393     else if (range_beg_len(mrb, argv[i], &beg, &len, olen, FALSE)) {
     402    else if (mrb_range_beg_len(mrb, argv[i], &beg, &len, olen, FALSE) == 1) {
    394403      mrb_int const end = olen < beg + len ? olen : beg + len;
    395404      for (j = beg; j < end; ++j) {
Note: See TracChangeset for help on using the changeset viewer.