summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-10-16 20:54:16 +0900
committerYukihiro Matsumoto <[email protected]>2012-10-16 20:54:16 +0900
commite7ff2bf72e172f7a4a30812d7f77323a48e799d3 (patch)
tree4fb833187300af8a66745cf3ed7887aa10e85970
parent76f28241f1a6eb76070d470779fc17d43ca838e3 (diff)
parent019fd70f1b8ca08aea35e08ff0078cc4a7654f8a (diff)
downloadmruby-e7ff2bf72e172f7a4a30812d7f77323a48e799d3.tar.gz
mruby-e7ff2bf72e172f7a4a30812d7f77323a48e799d3.zip
Merge branch 'master' of github.com:mruby/mruby
-rw-r--r--cmake/modules/IntrospectSystem.cmake2
-rw-r--r--src/class.c2
-rw-r--r--src/load.c18
-rw-r--r--src/range.c2
-rw-r--r--src/time.c2
-rw-r--r--test/t/kernel.rb10
6 files changed, 24 insertions, 12 deletions
diff --git a/cmake/modules/IntrospectSystem.cmake b/cmake/modules/IntrospectSystem.cmake
index e148563fa..722f4c3d7 100644
--- a/cmake/modules/IntrospectSystem.cmake
+++ b/cmake/modules/IntrospectSystem.cmake
@@ -2,7 +2,7 @@
# initial system defaults
if(CMAKE_COMPILER_IS_GNUCC)
- set(MRUBY_DEFAULT_CFLAGS "-Wall -Werror-implicit-function-declaration")
+ set(MRUBY_DEFAULT_CFLAGS "-std=gnu99 -Wall -Werror-implicit-function-declaration -Wall -Wextra -Wno-unused-parameter -Wno-sign-compare -Wno-pointer-sign -Wno-missing-field-initializers -Wformat=2 -Wstrict-aliasing=2 -Wdisabled-optimization -Wpointer-arith -Wdeclaration-after-statement -Wbad-function-cast -Wcast-align -Wredundant-decls")
set(CMAKE_C_FLAGS "${MRUBY_DEFAULT_CFLAGS}")
set(CMAKE_C_FLAGS_DEBUG "-O3 -ggdb")
set(CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG")
diff --git a/src/class.c b/src/class.c
index fad476929..a73f42566 100644
--- a/src/class.c
+++ b/src/class.c
@@ -786,6 +786,8 @@ mrb_singleton_class(mrb_state *mrb, mrb_value v)
return mrb_obj_value(mrb->false_class);
case MRB_TT_TRUE:
return mrb_obj_value(mrb->true_class);
+ case MRB_TT_MAIN:
+ return mrb_obj_value(mrb->object_class);
case MRB_TT_SYMBOL:
case MRB_TT_FIXNUM:
case MRB_TT_FLOAT:
diff --git a/src/load.c b/src/load.c
index 6c7396407..a960e883a 100644
--- a/src/load.c
+++ b/src/load.c
@@ -111,22 +111,22 @@ load_rite_header(FILE* fp, rite_binary_header* bin_header, unsigned char* hcrc)
if (fread(&file_header, 1, sizeof(file_header), fp) < sizeof(file_header)) {
return MRB_DUMP_READ_FAULT;
}
- memcpy(bin_header->rbfi, file_header.rbfi, sizeof(file_header.rbfi));
+ *bin_header->rbfi = *file_header.rbfi;
if (memcmp(bin_header->rbfi, RITE_FILE_IDENFIFIER, sizeof(bin_header->rbfi)) != 0) {
return MRB_DUMP_INVALID_FILE_HEADER; //File identifier error
}
- memcpy(bin_header->rbfv, file_header.rbfv, sizeof(file_header.rbfv));
+ *bin_header->rbfv = *file_header.rbfv;
if (memcmp(bin_header->rbfv, RITE_FILE_FORMAT_VER, sizeof(bin_header->rbfv)) != 0) {
return MRB_DUMP_INVALID_FILE_HEADER; //File format version error
}
- memcpy(bin_header->risv, file_header.risv, sizeof(file_header.risv));
- memcpy(bin_header->rct, file_header.rct, sizeof(file_header.rct));
- memcpy(bin_header->rcv, file_header.rcv, sizeof(file_header.rcv));
+ *bin_header->risv = *file_header.risv;
+ *bin_header->rct = *file_header.rct;
+ *bin_header->rcv = *file_header.rcv;
hex_to_bin32(bin_header->rbds, file_header.rbds);
hex_to_bin16(bin_header->nirep, file_header.nirep);
hex_to_bin16(bin_header->sirep, file_header.sirep);
- memcpy(bin_header->rsv, file_header.rsv, sizeof(file_header.rsv));
- memcpy(hcrc, file_header.hcrc, sizeof(file_header.hcrc));
+ *bin_header->rsv = *file_header.rsv;
+ *hcrc = *file_header.hcrc;
return MRB_DUMP_OK;
}
@@ -267,7 +267,7 @@ mrb_load_irep(mrb_state *mrb, FILE* fp)
dst = rite_dst;
memset(dst, 0x00, len);
- memcpy(dst, &bin_header, sizeof(rite_binary_header));
+ *(rite_binary_header *)dst = bin_header;
dst += sizeof(rite_binary_header);
dst += hex_to_bin16(dst, hcrc);
@@ -302,7 +302,7 @@ read_rite_header(mrb_state *mrb, unsigned char *bin, rite_binary_header* bin_he
{
uint16_t crc;
- memcpy(bin_header, bin, sizeof(rite_binary_header));
+ *bin_header = *(rite_binary_header *)bin;
bin += sizeof(rite_binary_header);
if (memcmp(bin_header->rbfi, RITE_FILE_IDENFIFIER, sizeof(bin_header->rbfi)) != 0) {
return MRB_DUMP_INVALID_FILE_HEADER; //File identifier error
diff --git a/src/range.c b/src/range.c
index 98b9093ef..cdcfcca53 100644
--- a/src/range.c
+++ b/src/range.c
@@ -415,7 +415,7 @@ range_initialize_copy(mrb_state *mrb, mrb_value copy)
if (!mrb_obj_is_instance_of(mrb, src, mrb_obj_class(mrb, copy))) {
mrb_raise(mrb, E_TYPE_ERROR, "wrong argument class");
}
- memcpy(mrb_range_ptr(copy), mrb_range_ptr(src), sizeof(struct RRange));
+ *mrb_range_ptr(copy) = *mrb_range_ptr(src);
return copy;
}
diff --git a/src/time.c b/src/time.c
index ea8205c7b..09ebea78a 100644
--- a/src/time.c
+++ b/src/time.c
@@ -559,7 +559,7 @@ mrb_time_initialize_copy(mrb_state *mrb, mrb_value copy)
DATA_PTR(copy) = mrb_malloc(mrb, sizeof(struct mrb_time));
DATA_TYPE(copy) = &mrb_time_type;
}
- memcpy(DATA_PTR(copy), DATA_PTR(src), sizeof(struct mrb_time));
+ *(struct mrb_time *)DATA_PTR(copy) = *(struct mrb_time *)DATA_PTR(src);
return copy;
}
diff --git a/test/t/kernel.rb b/test/t/kernel.rb
index fb0aee310..5caa3d7ac 100644
--- a/test/t/kernel.rb
+++ b/test/t/kernel.rb
@@ -204,6 +204,16 @@ assert('Kernel#extend', '15.3.1.3.13') do
a.respond_to?(:test_method) == true && b.respond_to?(:test_method) == false
end
+assert('Kernel#extend works on toplevel', '15.3.1.3.13') do
+ module Test4ExtendModule
+ def test_method; end
+ end
+ # This would crash...
+ extend(Test4ExtendModule)
+
+ respond_to?(:test_method) == true
+end
+
assert('Kernel#global_variables', '15.3.1.3.14') do
global_variables.class == Array
end