diff --git a/src/mrb_ext.c b/src/mrb_ext.c index 93aa3d9..0e4c320 100644 --- a/src/mrb_ext.c +++ b/src/mrb_ext.c @@ -126,8 +126,10 @@ void mrb_ext_set_instance_tt(struct RClass* class, enum mrb_vtype type) { MRB_SET_INSTANCE_TT(class, type); } -int mrb_ext_ary_len(struct mrb_state* mrb, mrb_value array) { - return mrb_ary_len(mrb, array); +long long mrb_ext_ary_len(struct mrb_state* mrb, mrb_value array) { + (void)mrb; + mrb_assert(mrb_array_p(array)); + return RARRAY_LEN(array); } unsigned int mrb_ext_get_mid(struct mrb_state* mrb) { diff --git a/src/mruby/get_mruby.sh b/src/mruby/get_mruby.sh index 43b35c1..616bff5 100755 --- a/src/mruby/get_mruby.sh +++ b/src/mruby/get_mruby.sh @@ -14,8 +14,9 @@ # * compile, linker & archiver # * unzip -VERSION=1.2.0 +VERSION=1.4.1 CURRENT=$PWD +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" # Checks is /tmp/mruby needs cleaning or creation. @@ -35,6 +36,9 @@ mkdir -p mruby-out/src/mrbgems cd mruby-$VERSION +# Use only supported gems. +cat $DIR/mrusty.gembox > mrbgems/default.gembox + # minirake compiles the compiler and rb files to C. ./minirake @@ -64,11 +68,30 @@ rm -rf build/host/mrbgems/mruby-bin* rm -rf mrbgems/mruby-test rm -rf build/host/mrbgems/mruby-test +rm -rf mrbgems/mruby-io* +rm -rf build/host/mrbgems/mruby-io* + +rm -rf mrbgems/mruby-socket* +rm -rf build/host/mrbgems/mruby-socket* + # Copies all gems. cp -R mrbgems/* ../mruby-out/src/mrbgems cp -R build/host/mrbgems/* ../mruby-out/src/mrbgems +# String needs additional mruby header. + +sed -i -e $'s/#include "common.h"/#include "mruby.h"\\\n#include "common.h"/g' include/mruby/string.h + +# Copies header files so they will be available in top level includes. + +find include/mruby -type f -name '*.h' -exec cp {} ../mruby-out/include \; + +# Copies ext header files required by gems. + +mkdir -p ../mruby-out/include/mruby/ext +find mrbgems -path '*/ext/*' -name '*.h' -exec cp {} ../mruby-out/include/mruby/ext \; + cd .. tar -cf $CURRENT/mruby-out.tar mruby-out diff --git a/src/mruby/mruby-out.tar b/src/mruby/mruby-out.tar index 032a0c9..467a631 100644 Binary files a/src/mruby/mruby-out.tar and b/src/mruby/mruby-out.tar differ diff --git a/src/mruby/mrusty.gembox b/src/mruby/mrusty.gembox new file mode 100644 index 0000000..1073873 --- /dev/null +++ b/src/mruby/mrusty.gembox @@ -0,0 +1,88 @@ +MRuby::GemBox.new do |conf| + # Use standard IO/File class + # conf.gem :core => "mruby-io" + + # Use standard Array#pack, String#unpack methods + conf.gem :core => "mruby-pack" + + # Use standard Kernel#sprintf method + conf.gem :core => "mruby-sprintf" + + # Use standard print/puts/p + conf.gem :core => "mruby-print" + + # Use standard Math module + conf.gem :core => "mruby-math" + + # Use standard Time class + conf.gem :core => "mruby-time" + + # Use standard Struct class + conf.gem :core => "mruby-struct" + + # Use Comparable module extension + conf.gem :core => "mruby-compar-ext" + + # Use Enumerable module extension + conf.gem :core => "mruby-enum-ext" + + # Use String class extension + conf.gem :core => "mruby-string-ext" + + # Use Numeric class extension + conf.gem :core => "mruby-numeric-ext" + + # Use Array class extension + conf.gem :core => "mruby-array-ext" + + # Use Hash class extension + conf.gem :core => "mruby-hash-ext" + + # Use Range class extension + conf.gem :core => "mruby-range-ext" + + # Use Proc class extension + conf.gem :core => "mruby-proc-ext" + + # Use Symbol class extension + conf.gem :core => "mruby-symbol-ext" + + # Use Random class + conf.gem :core => "mruby-random" + + # Use Object class extension + conf.gem :core => "mruby-object-ext" + + # Use ObjectSpace class + conf.gem :core => "mruby-objectspace" + + # Use Fiber class + conf.gem :core => "mruby-fiber" + + # Use Enumerator class (require mruby-fiber) + conf.gem :core => "mruby-enumerator" + + # Use Enumerator::Lazy class (require mruby-enumerator) + conf.gem :core => "mruby-enum-lazy" + + # Use toplevel object (main) methods extension + conf.gem :core => "mruby-toplevel-ext" + + # Generate mirb command + # conf.gem :core => "mruby-bin-mirb" + + # Generate mruby command + # conf.gem :core => "mruby-bin-mruby" + + # Generate mruby-strip command + # conf.gem :core => "mruby-bin-strip" + + # Use Kernel module extension + conf.gem :core => "mruby-kernel-ext" + + # Use class/module extension + conf.gem :core => "mruby-class-ext" + + # Use mruby-compiler to build other mrbgems + conf.gem :core => "mruby-compiler" +end diff --git a/src/mruby_ffi.rs b/src/mruby_ffi.rs index 31fab80..68a2d71 100644 --- a/src/mruby_ffi.rs +++ b/src/mruby_ffi.rs @@ -366,7 +366,7 @@ extern "C" { #[inline] pub fn mrb_ary_set(mrb: *const MrState, array: MrValue, i: i32, value: MrValue); #[inline] - pub fn mrb_ext_ary_len(mrb: *const MrState, array: MrValue) -> i32; + pub fn mrb_ext_ary_len(mrb: *const MrState, array: MrValue) -> i64; #[inline] pub fn mrb_ext_raise(mrb: *const MrState, eclass: *const c_char, msg: *const c_char);