Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mruby
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
mruby
Commits
acec9d1f
Commit
acec9d1f
authored
Jun 02, 2014
by
take_cheeze
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implement `NoMethodError#args`.
parent
f370a0f0
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
35 additions
and
2 deletions
+35
-2
include/mruby/error.h
include/mruby/error.h
+1
-0
mrblib/error.rb
mrblib/error.rb
+6
-0
src/class.c
src/class.c
+1
-2
src/error.c
src/error.c
+14
-0
test/t/nomethoderror.rb
test/t/nomethoderror.rb
+13
-0
No files found.
include/mruby/error.h
View file @
acec9d1f
...
...
@@ -19,6 +19,7 @@ void mrb_exc_print(mrb_state *mrb, struct RObject *exc);
void
mrb_print_backtrace
(
mrb_state
*
mrb
);
mrb_value
mrb_exc_backtrace
(
mrb_state
*
mrb
,
mrb_value
exc
);
mrb_value
mrb_get_backtrace
(
mrb_state
*
mrb
);
mrb_noreturn
void
mrb_no_method_error
(
mrb_state
*
mrb
,
mrb_sym
id
,
mrb_int
argc
,
const
mrb_value
*
argv
,
const
char
*
fmt
,
...);
/* declaration for fail method */
mrb_value
mrb_f_raise
(
mrb_state
*
,
mrb_value
);
...
...
mrblib/error.rb
View file @
acec9d1f
...
...
@@ -48,6 +48,12 @@ end
# ISO 15.2.32
class
NoMethodError
<
NameError
attr_reader
:args
def
initialize
(
message
=
nil
,
name
=
nil
,
args
=
nil
)
@args
=
args
super
message
,
name
end
end
# ISO 15.2.33
...
...
src/class.c
View file @
acec9d1f
...
...
@@ -1216,8 +1216,7 @@ mrb_bob_missing(mrb_state *mrb, mrb_value mod)
repr
=
mrb_any_to_s
(
mrb
,
mod
);
}
mrb_raisef
(
mrb
,
E_NOMETHOD_ERROR
,
"undefined method '%S' for %S"
,
mrb_sym2str
(
mrb
,
name
),
repr
);
mrb_no_method_error
(
mrb
,
name
,
alen
,
a
,
"undefined method '%S' for %S"
,
mrb_sym2str
(
mrb
,
name
),
repr
);
/* not reached */
return
mrb_nil_value
();
}
...
...
src/error.c
View file @
acec9d1f
...
...
@@ -442,6 +442,20 @@ mrb_sys_fail(mrb_state *mrb, const char *mesg)
}
}
mrb_noreturn
void
mrb_no_method_error
(
mrb_state
*
mrb
,
mrb_sym
id
,
mrb_int
argc
,
const
mrb_value
*
argv
,
char
const
*
fmt
,
...)
{
mrb_value
exc
;
va_list
ap
;
va_start
(
ap
,
fmt
);
exc
=
mrb_funcall
(
mrb
,
mrb_obj_value
(
E_NOMETHOD_ERROR
),
"new"
,
3
,
mrb_vformat
(
mrb
,
fmt
,
ap
),
mrb_symbol_value
(
id
),
mrb_ary_new_from_values
(
mrb
,
argc
,
argv
));
va_end
(
ap
);
mrb_exc_raise
(
mrb
,
exc
);
}
void
mrb_init_exception
(
mrb_state
*
mrb
)
{
...
...
test/t/nomethoderror.rb
View file @
acec9d1f
...
...
@@ -11,3 +11,16 @@ end
assert
(
'NoMethodError superclass'
,
'15.2.32.2'
)
do
assert_equal
NameError
,
NoMethodError
.
superclass
end
assert
(
'NoMethodError#args'
,
'15.2.32.2.1'
)
do
a
=
NoMethodError
.
new
'test'
,
:test
,
[
1
,
2
]
assert_equal
[
1
,
2
],
a
.
args
assert_nothing_raised
do
begin
doesNotExistAsAMethodNameForVerySure
3
,
1
,
4
rescue
NoMethodError
=>
e
assert_equal
[
3
,
1
,
4
],
e
.
args
end
end
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment