method
find_body
v1_8_6_287 -
Show latest stable
- Class:
RDoc::C_Parser
find_body(meth_name, meth_obj, body, quiet = false)private
Find the C code corresponding to a Ruby method
# File lib/rdoc/parsers/parse_c.rb, line 626
def find_body(meth_name, meth_obj, body, quiet = false)
case body
when %r{((?>/\*.*?\*/\s*))(?:static\s+)?VALUE\s+#{meth_name}
\s*(\(.*?\)).*?^}xm
comment, params = $1, $2
body_text = $&
remove_private_comments(comment) if comment
# see if we can find the whole body
re = Regexp.escape(body_text) + '[^(]*^\{.*?^\}'
if Regexp.new(re, Regexp::MULTILINE).match(body)
body_text = $&
end
# The comment block may have been overridden with a
# 'Document-method' block. This happens in the interpreter
# when multiple methods are vectored through to the same
# C method but those methods are logically distinct (for
# example Kernel.hash and Kernel.object_id share the same
# implementation
override_comment = find_override_comment(meth_obj.name)
comment = override_comment if override_comment
find_modifiers(comment, meth_obj) if comment
# meth_obj.params = params
meth_obj.start_collecting_tokens
meth_obj.add_token(RubyToken::Token.new(1,1).set_text(body_text))
meth_obj.comment = mangle_comment(comment)
when %r{((?>/\*.*?\*/\s*))^\s*\#\s*define\s+#{meth_name}\s+(\w+)}m
comment = $1
find_body($2, meth_obj, body, true)
find_modifiers(comment, meth_obj)
meth_obj.comment = mangle_comment(comment) + meth_obj.comment
when %r{^\s*\#\s*define\s+#{meth_name}\s+(\w+)}m
unless find_body($1, meth_obj, body, true)
warn "No definition for #{meth_name}" unless quiet
return false
end
else
# No body, but might still have an override comment
comment = find_override_comment(meth_obj.name)
if comment
find_modifiers(comment, meth_obj)
meth_obj.comment = mangle_comment(comment)
else
warn "No definition for #{meth_name}" unless quiet
return false
end
end
true
end Related methods
- Instance methods
- scan
- Class methods
- new
- Private methods
-
do_aliases -
do_classes -
do_constants -
do_includes -
do_methods -
find_attr_comment -
find_body -
find_class -
find_class_comment -
find_const_comment -
find_modifiers -
find_override_comment -
handle_attr -
handle_class_module -
handle_constants -
handle_ifdefs_in -
handle_method -
handle_tab_width -
mangle_comment -
progress -
remove_commented_out_lines -
remove_private_comments -
warn