MCPcopy Create free account
hub / github.com/dgrunwald/rust-cpython / generate_instance_method

Function generate_instance_method

src/py_class/py_class_impl.py:524–567  ·  view source on GitHub ↗
(special_name=None, decoration='',
        slot=None, add_member=False, value_macro=None, value_args=None)

Source from the content-addressed store, hash-verified

522 ''')
523
524def generate_instance_method(special_name=None, decoration='',
525 slot=None, add_member=False, value_macro=None, value_args=None):
526 name_pattern = special_name or '$name:ident'
527 name_use = special_name or '$name'
528 def impl(with_params, with_docs, with_visibility):
529 if with_docs:
530 doc_prefix = '$(#[doc=$doc:expr])*'
531 value_suffix = ', { concat!($($doc, "\\n"),*) }'
532 else:
533 doc_prefix = value_suffix = ''
534 if with_visibility:
535 visibility_capture = '$visibility:vis'
536 visibility_expansion = '$visibility'
537 else:
538 visibility_capture = ''
539 visibility_expansion = 'pub'
540 if with_params:
541 param_pattern = ', $($p:tt)+'
542 impl = '''$crate::py_argparse_parse_plist_impl!{
543 py_class_impl_item { $class, $py, %s, %s(&$slf,) $res_type; { $($body)* } }
544 [] ($($p)+,)
545 }''' % (visibility_expansion, name_use)
546 value = '$crate::py_argparse_parse_plist_impl!{%s {%s} [] ($($p)+,)}' \
547 % (value_macro, value_args + value_suffix)
548 else:
549 param_pattern = ''
550 impl = '$crate::py_class_impl_item! { $class, $py, %s, %s(&$slf,) $res_type; { $($body)* } [] }' \
551 % (visibility_expansion, name_use)
552 value = '$crate::%s!{%s []}' % (value_macro, value_args + value_suffix)
553 pattern = '%s %s def %s (&$slf:ident%s) -> $res_type:ty { $( $body:tt )* }' \
554 % (doc_prefix + decoration, visibility_capture, name_pattern, param_pattern)
555 slots = []
556 if slot is not None:
557 slots.append((slot, value))
558 members = []
559 if add_member:
560 members.append((name_use, value))
561 generate_case(pattern, new_impl=impl, new_slots=slots, new_members=members)
562
563 # Special methods can't handle docs.
564 with_docs = (value_macro == 'py_class_instance_method')
565 for with_params in (False, True):
566 for with_visibility in (False, True):
567 impl(with_params, with_docs, with_visibility)
568
569def static_method():
570 def impl(with_visibility):

Callers 2

call_operatorFunction · 0.85
mainFunction · 0.85

Calls 1

implFunction · 0.85

Tested by

no test coverage detected