[前][次][番号順一覧][スレッド一覧]

ruby-changes:22088

From: mame <ko1@a...>
Date: Mon, 26 Dec 2011 23:20:35 +0900 (JST)
Subject: [ruby-changes:22088] mame:r34138 (trunk): * vm_insnhelper.c (unknown_keyword_error): make it kind a error message when unknown keyword is given. It require more work. See and in detail.

mame	2011-12-26 23:20:20 +0900 (Mon, 26 Dec 2011)

  New Revision: 34138

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=34138

  Log:
    * vm_insnhelper.c (unknown_keyword_error): make it kind a error message when unknown keyword is given. It require more work. See [ruby-core:40518] and [ruby-core:40541] in detail.

  Modified files:
    trunk/ChangeLog
    trunk/vm_insnhelper.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 34137)
+++ ChangeLog	(revision 34138)
@@ -1,3 +1,9 @@
+Mon Dec 26 22:38:35 2011  Yusuke Endoh  <mame@t...>
+
+	* vm_insnhelper.c (unknown_keyword_error): make it kind a error
+	  message when unknown keyword is given.  It require more work.
+	  See [ruby-core:40518] and [ruby-core:40541] in detail.
+
 Mon Dec 26 22:31:07 2011  Yusuke Endoh  <mame@t...>
 
 	* vm_core.h (struct rb_iseq_struct), compile.c (iseq_set_arguments),
@@ -4,7 +10,7 @@
 	  iseq.c (rb_iseq_parameters), vm_insnhelper.c
 	  (vm_callee_setup_arg_complex): support Method#parameters for keyword
 	  arguments.  The provisional spec is what Benoit Daloze proposed.
-	  [ruby-core:40518]
+	  [ruby-core:40541]
 
 	* test/ruby/test_keyword.rb: add a test for above.
 
Index: vm_insnhelper.c
===================================================================
--- vm_insnhelper.c	(revision 34137)
+++ vm_insnhelper.c	(revision 34138)
@@ -136,9 +136,17 @@
 static void
 unknown_keyword_error(const rb_iseq_t *iseq, VALUE hash)
 {
-    (void) iseq;
-    (void) hash;
-    rb_raise(rb_eArgError, "unknown keyword");
+    VALUE sep = rb_usascii_str_new2(", "), keys;
+    const char *msg;
+    int i;
+    for (i = 0; i < iseq->arg_keywords; i++) {
+	rb_hash_delete(hash, ID2SYM(iseq->arg_keyword_table[i]));
+    }
+    keys = rb_funcall(hash, rb_intern("keys"), 0, 0);
+    if (TYPE(keys) != T_ARRAY) rb_raise(rb_eArgError, "unknown keyword");
+    msg = RARRAY_LEN(keys) == 1 ? "unknown keyword: %s" : "unknown keywords: %s";
+    keys = rb_funcall(keys, rb_intern("join"), 1, sep);
+    rb_raise(rb_eArgError, msg, RSTRING_PTR(keys));
 }
 
 #define VM_CALLEE_SETUP_ARG(ret, th, iseq, orig_argc, orig_argv, block) \

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]