summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/mruby.h1
-rw-r--r--mrbgems/mruby-pack/src/pack.c12
-rw-r--r--mrbgems/mruby-socket/src/socket.c16
-rw-r--r--mrbgems/mruby-string-ext/mrblib/string.rb6
-rw-r--r--mrbgems/mruby-struct/src/struct.c2
-rw-r--r--mrblib/10error.rb3
-rw-r--r--mrblib/string.rb4
-rw-r--r--src/array.c2
-rw-r--r--src/class.c4
-rw-r--r--src/hash.c2
-rw-r--r--src/string.c2
-rw-r--r--src/variable.c2
12 files changed, 35 insertions, 21 deletions
diff --git a/include/mruby.h b/include/mruby.h
index fc9656fbe..114b58cf4 100644
--- a/include/mruby.h
+++ b/include/mruby.h
@@ -1164,6 +1164,7 @@ MRB_API void mrb_print_error(mrb_state *mrb);
#define E_SYNTAX_ERROR (mrb_exc_get(mrb, "SyntaxError"))
#define E_LOCALJUMP_ERROR (mrb_exc_get(mrb, "LocalJumpError"))
#define E_REGEXP_ERROR (mrb_exc_get(mrb, "RegexpError"))
+#define E_FROZEN_ERROR (mrb_exc_get(mrb, "FrozenError"))
#define E_NOTIMP_ERROR (mrb_exc_get(mrb, "NotImplementedError"))
#ifndef MRB_WITHOUT_FLOAT
diff --git a/mrbgems/mruby-pack/src/pack.c b/mrbgems/mruby-pack/src/pack.c
index 4c43a2cf6..489ad3718 100644
--- a/mrbgems/mruby-pack/src/pack.c
+++ b/mrbgems/mruby-pack/src/pack.c
@@ -193,7 +193,9 @@ pack_l(mrb_state *mrb, mrb_value o, mrb_value str, mrb_int sidx, unsigned int fl
static int
unpack_l(mrb_state *mrb, const unsigned char *src, int srclen, mrb_value ary, unsigned int flags)
{
+#ifndef MRB_INT64
char msg[60];
+#endif
uint32_t ul;
mrb_int n;
@@ -210,16 +212,20 @@ unpack_l(mrb_state *mrb, const unsigned char *src, int srclen, mrb_value ary, un
}
if (flags & PACK_FLAG_SIGNED) {
int32_t sl = ul;
+#ifndef MRB_INT64
if (!FIXABLE(sl)) {
snprintf(msg, sizeof(msg), "cannot unpack to Fixnum: %ld", (long)sl);
mrb_raise(mrb, E_RANGE_ERROR, msg);
}
+#endif
n = sl;
} else {
+#ifndef MRB_INT64
if (!POSFIXABLE(ul)) {
snprintf(msg, sizeof(msg), "cannot unpack to Fixnum: %lu", (unsigned long)ul);
mrb_raise(mrb, E_RANGE_ERROR, msg);
}
+#endif
n = ul;
}
mrb_ary_push(mrb, ary, mrb_fixnum_value(n));
@@ -591,7 +597,7 @@ unpack_a(mrb_state *mrb, const void *src, int slen, mrb_value ary, long count, u
if (flags & PACK_FLAG_Z) { /* "Z" */
if ((cp = (const char *)memchr(sptr, '\0', slen)) != NULL) {
- copylen = cp - sptr;
+ copylen = (int)(cp - sptr);
if (count == -1) {
slen = copylen + 1;
}
@@ -859,8 +865,8 @@ has_tmpl(const struct tmpl *tmpl)
static void
read_tmpl(mrb_state *mrb, struct tmpl *tmpl, int *dirp, int *typep, int *sizep, int *countp, unsigned int *flagsp)
{
- mrb_int ch, t, tlen;
- int dir, type, size = 0;
+ mrb_int t, tlen;
+ int ch, dir, type, size = 0;
int count = 1;
unsigned int flags = 0;
const char *tptr;
diff --git a/mrbgems/mruby-socket/src/socket.c b/mrbgems/mruby-socket/src/socket.c
index 7d9bfe99f..0b0835f56 100644
--- a/mrbgems/mruby-socket/src/socket.c
+++ b/mrbgems/mruby-socket/src/socket.c
@@ -12,7 +12,10 @@
#include <windows.h>
#define SHUT_RDWR SD_BOTH
+ #ifndef _SSIZE_T_DEFINED
typedef int ssize_t;
+ #endif
+ typedef int fsize_t;
#else
#include <sys/types.h>
#include <sys/socket.h>
@@ -23,6 +26,7 @@
#include <fcntl.h>
#include <netdb.h>
#include <unistd.h>
+ typedef size_t fsize_t;
#endif
#include <stddef.h>
@@ -337,7 +341,7 @@ mrb_basicsocket_recv(mrb_state *mrb, mrb_value self)
mrb_get_args(mrb, "i|i", &maxlen, &flags);
buf = mrb_str_buf_new(mrb, maxlen);
- n = recv(socket_fd(mrb, self), RSTRING_PTR(buf), (size_t)maxlen, (int)flags);
+ n = recv(socket_fd(mrb, self), RSTRING_PTR(buf), (fsize_t)maxlen, (int)flags);
if (n == -1)
mrb_sys_fail(mrb, "recv");
mrb_str_resize(mrb, buf, (mrb_int)n);
@@ -356,7 +360,7 @@ mrb_basicsocket_recvfrom(mrb_state *mrb, mrb_value self)
buf = mrb_str_buf_new(mrb, maxlen);
socklen = sizeof(struct sockaddr_storage);
sa = mrb_str_buf_new(mrb, socklen);
- n = recvfrom(socket_fd(mrb, self), RSTRING_PTR(buf), (size_t)maxlen, (int)flags, (struct sockaddr *)RSTRING_PTR(sa), &socklen);
+ n = recvfrom(socket_fd(mrb, self), RSTRING_PTR(buf), (fsize_t)maxlen, (int)flags, (struct sockaddr *)RSTRING_PTR(sa), &socklen);
if (n == -1)
mrb_sys_fail(mrb, "recvfrom");
mrb_str_resize(mrb, buf, (mrb_int)n);
@@ -377,9 +381,9 @@ mrb_basicsocket_send(mrb_state *mrb, mrb_value self)
dest = mrb_nil_value();
mrb_get_args(mrb, "Si|S", &mesg, &flags, &dest);
if (mrb_nil_p(dest)) {
- n = send(socket_fd(mrb, self), RSTRING_PTR(mesg), (size_t)RSTRING_LEN(mesg), (int)flags);
+ n = send(socket_fd(mrb, self), RSTRING_PTR(mesg), (fsize_t)RSTRING_LEN(mesg), (int)flags);
} else {
- n = sendto(socket_fd(mrb, self), RSTRING_PTR(mesg), (size_t)RSTRING_LEN(mesg), (int)flags, (const struct sockaddr*)RSTRING_PTR(dest), RSTRING_LEN(dest));
+ n = sendto(socket_fd(mrb, self), RSTRING_PTR(mesg), (fsize_t)RSTRING_LEN(mesg), (int)flags, (const struct sockaddr*)RSTRING_PTR(dest), (fsize_t)RSTRING_LEN(dest));
}
if (n == -1)
mrb_sys_fail(mrb, "send");
@@ -530,7 +534,7 @@ mrb_ipsocket_recvfrom(mrb_state *mrb, mrb_value self)
mrb_get_args(mrb, "i|i", &maxlen, &flags);
buf = mrb_str_buf_new(mrb, maxlen);
socklen = sizeof(ss);
- n = recvfrom(fd, RSTRING_PTR(buf), (size_t)maxlen, (int)flags,
+ n = recvfrom(fd, RSTRING_PTR(buf), (fsize_t)maxlen, (int)flags,
(struct sockaddr *)&ss, &socklen);
if (n == -1) {
mrb_sys_fail(mrb, "recvfrom");
@@ -555,7 +559,7 @@ mrb_socket_gethostname(mrb_state *mrb, mrb_value cls)
bufsize = 256;
#endif
buf = mrb_str_buf_new(mrb, (mrb_int)bufsize);
- if (gethostname(RSTRING_PTR(buf), bufsize) != 0)
+ if (gethostname(RSTRING_PTR(buf), (fsize_t)bufsize) != 0)
mrb_sys_fail(mrb, "gethostname");
mrb_str_resize(mrb, buf, (mrb_int)strlen(RSTRING_PTR(buf)));
return buf;
diff --git a/mrbgems/mruby-string-ext/mrblib/string.rb b/mrbgems/mruby-string-ext/mrblib/string.rb
index cb36d9a48..0da84daed 100644
--- a/mrbgems/mruby-string-ext/mrblib/string.rb
+++ b/mrbgems/mruby-string-ext/mrblib/string.rb
@@ -95,7 +95,7 @@ class String
# "hello".lstrip! #=> nil
#
def lstrip!
- raise RuntimeError, "can't modify frozen String" if frozen?
+ raise FrozenError, "can't modify frozen String" if frozen?
s = self.lstrip
(s == self) ? nil : self.replace(s)
end
@@ -125,7 +125,7 @@ class String
# <code>nil</code> if <i>str</i> was not altered.
#
def strip!
- raise RuntimeError, "can't modify frozen String" if frozen?
+ raise FrozenError, "can't modify frozen String" if frozen?
s = self.strip
(s == self) ? nil : self.replace(s)
end
@@ -199,7 +199,7 @@ class String
# string #=> "thsa sting"
#
def slice!(arg1, arg2=nil)
- raise RuntimeError, "can't modify frozen String" if frozen?
+ raise FrozenError, "can't modify frozen String" if frozen?
raise "wrong number of arguments (for 1..2)" if arg1.nil? && arg2.nil?
if !arg1.nil? && !arg2.nil?
diff --git a/mrbgems/mruby-struct/src/struct.c b/mrbgems/mruby-struct/src/struct.c
index 8de4b6c52..adeb09bc1 100644
--- a/mrbgems/mruby-struct/src/struct.c
+++ b/mrbgems/mruby-struct/src/struct.c
@@ -89,7 +89,7 @@ static void
mrb_struct_modify(mrb_state *mrb, mrb_value strct)
{
if (MRB_FROZEN_P(mrb_basic_ptr(strct))) {
- mrb_raise(mrb, E_RUNTIME_ERROR, "can't modify frozen struct");
+ mrb_raise(mrb, E_FROZEN_ERROR, "can't modify frozen struct");
}
mrb_write_barrier(mrb, mrb_basic_ptr(strct));
diff --git a/mrblib/10error.rb b/mrblib/10error.rb
index 22a8d1ad7..0d9f38d58 100644
--- a/mrblib/10error.rb
+++ b/mrblib/10error.rb
@@ -51,6 +51,9 @@ end
class NotImplementedError < ScriptError
end
+class FrozenError < RuntimeError
+end
+
class StopIteration < IndexError
attr_accessor :result
end
diff --git a/mrblib/string.rb b/mrblib/string.rb
index 4c6114ecb..ee98cfa0c 100644
--- a/mrblib/string.rb
+++ b/mrblib/string.rb
@@ -96,7 +96,7 @@ class String
#
# ISO 15.2.10.5.19
def gsub!(*args, &block)
- raise RuntimeError, "can't modify frozen String" if frozen?
+ raise FrozenError, "can't modify frozen String" if frozen?
return to_enum(:gsub!, *args) if args.length == 1 && !block
str = self.gsub(*args, &block)
return nil if str == self
@@ -159,7 +159,7 @@ class String
#
# ISO 15.2.10.5.37
def sub!(*args, &block)
- raise RuntimeError, "can't modify frozen String" if frozen?
+ raise FrozenError, "can't modify frozen String" if frozen?
str = self.sub(*args, &block)
return nil if str == self
self.replace(str)
diff --git a/src/array.c b/src/array.c
index 47a582ffc..285e48a0f 100644
--- a/src/array.c
+++ b/src/array.c
@@ -114,7 +114,7 @@ static void
ary_modify_check(mrb_state *mrb, struct RArray *a)
{
if (MRB_FROZEN_P(a)) {
- mrb_raise(mrb, E_RUNTIME_ERROR, "can't modify frozen array");
+ mrb_raise(mrb, E_FROZEN_ERROR, "can't modify frozen array");
}
}
diff --git a/src/class.c b/src/class.c
index 986af5531..9cb2a9a3a 100644
--- a/src/class.c
+++ b/src/class.c
@@ -430,9 +430,9 @@ mrb_define_method_raw(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_method_
if (MRB_FROZEN_P(c)) {
if (c->tt == MRB_TT_MODULE)
- mrb_raise(mrb, E_RUNTIME_ERROR, "can't modify frozen module");
+ mrb_raise(mrb, E_FROZEN_ERROR, "can't modify frozen module");
else
- mrb_raise(mrb, E_RUNTIME_ERROR, "can't modify frozen class");
+ mrb_raise(mrb, E_FROZEN_ERROR, "can't modify frozen class");
}
if (!h) h = c->mt = kh_init(mt, mrb);
k = kh_put(mt, mrb, h, mid);
diff --git a/src/hash.c b/src/hash.c
index feb06d843..d58706954 100644
--- a/src/hash.c
+++ b/src/hash.c
@@ -286,7 +286,7 @@ static void
mrb_hash_modify(mrb_state *mrb, mrb_value hash)
{
if (MRB_FROZEN_P(mrb_hash_ptr(hash))) {
- mrb_raise(mrb, E_RUNTIME_ERROR, "can't modify frozen hash");
+ mrb_raise(mrb, E_FROZEN_ERROR, "can't modify frozen hash");
}
mrb_hash_tbl(mrb, hash);
}
diff --git a/src/string.c b/src/string.c
index da475839c..d4dc517cf 100644
--- a/src/string.c
+++ b/src/string.c
@@ -494,7 +494,7 @@ static void
check_frozen(mrb_state *mrb, struct RString *s)
{
if (MRB_FROZEN_P(s)) {
- mrb_raise(mrb, E_RUNTIME_ERROR, "can't modify frozen string");
+ mrb_raise(mrb, E_FROZEN_ERROR, "can't modify frozen string");
}
}
diff --git a/src/variable.c b/src/variable.c
index f0bfa19cc..968fc2fc1 100644
--- a/src/variable.c
+++ b/src/variable.c
@@ -261,7 +261,7 @@ mrb_obj_iv_set(mrb_state *mrb, struct RObject *obj, mrb_sym sym, mrb_value v)
iv_tbl *t = obj->iv;
if (MRB_FROZEN_P(obj)) {
- mrb_raisef(mrb, E_RUNTIME_ERROR, "can't modify frozen %S", mrb_obj_value(obj));
+ mrb_raisef(mrb, E_FROZEN_ERROR, "can't modify frozen %S", mrb_obj_value(obj));
}
if (!t) {
t = obj->iv = iv_new(mrb);