Ruby
1.9.3p392(2013-02-22revision39386)
Main Page
Modules
Data Structures
Files
File List
Globals
method.h
Go to the documentation of this file.
1
/**********************************************************************
2
3
method.h -
4
5
$Author: yugui $
6
created at: Wed Jul 15 20:02:33 2009
7
8
Copyright (C) 2009 Koichi Sasada
9
10
**********************************************************************/
11
#ifndef METHOD_H
12
#define METHOD_H
13
14
typedef
enum
{
15
NOEX_PUBLIC
= 0x00,
16
NOEX_NOSUPER
= 0x01,
17
NOEX_PRIVATE
= 0x02,
18
NOEX_PROTECTED
= 0x04,
19
NOEX_MASK
= 0x06,
20
NOEX_BASIC
= 0x08,
21
NOEX_UNDEF
=
NOEX_NOSUPER
,
22
NOEX_MODFUNC
= 0x12,
23
NOEX_SUPER
= 0x20,
24
NOEX_VCALL
= 0x40,
25
NOEX_RESPONDS
= 0x80
26
}
rb_method_flag_t
;
27
28
#define NOEX_SAFE(n) ((int)((n) >> 8) & 0x0F)
29
#define NOEX_WITH(n, s) (((s) << 8) | (n) | (ruby_running ? 0 : NOEX_BASIC))
30
#define NOEX_WITH_SAFE(n) NOEX_WITH((n), rb_safe_level())
31
32
/* method data type */
33
34
typedef
enum
{
35
VM_METHOD_TYPE_ISEQ
,
36
VM_METHOD_TYPE_CFUNC
,
37
VM_METHOD_TYPE_ATTRSET
,
38
VM_METHOD_TYPE_IVAR
,
39
VM_METHOD_TYPE_BMETHOD
,
40
VM_METHOD_TYPE_ZSUPER
,
41
VM_METHOD_TYPE_UNDEF
,
42
VM_METHOD_TYPE_NOTIMPLEMENTED
,
43
VM_METHOD_TYPE_OPTIMIZED
,
/* Kernel#send, Proc#call, etc */
44
VM_METHOD_TYPE_MISSING
/* wrapper for method_missing(id) */
45
}
rb_method_type_t
;
46
47
typedef
struct
rb_method_cfunc_struct
{
48
VALUE
(*
func
)(
ANYARGS
);
49
int
argc
;
50
}
rb_method_cfunc_t
;
51
52
typedef
struct
rb_method_attr_struct
{
53
ID
id
;
54
VALUE
location
;
55
}
rb_method_attr_t
;
56
57
typedef
struct
rb_iseq_struct
rb_iseq_t
;
58
59
typedef
struct
rb_method_definition_struct
{
60
rb_method_type_t
type
;
/* method type */
61
ID
original_id
;
62
union
{
63
rb_iseq_t
*
iseq
;
/* should be mark */
64
rb_method_cfunc_t
cfunc
;
65
rb_method_attr_t
attr
;
66
VALUE
proc
;
/* should be mark */
67
enum
method_optimized_type {
68
OPTIMIZED_METHOD_TYPE_SEND
,
69
OPTIMIZED_METHOD_TYPE_CALL
70
}
optimize_type
;
71
}
body
;
72
int
alias_count
;
73
}
rb_method_definition_t
;
74
75
typedef
struct
rb_method_entry_struct
{
76
rb_method_flag_t
flag
;
77
char
mark
;
78
rb_method_definition_t
*
def
;
79
ID
called_id
;
80
VALUE
klass
;
/* should be mark */
81
}
rb_method_entry_t
;
82
83
struct
unlinked_method_entry_list_entry
{
84
struct
unlinked_method_entry_list_entry
*
next
;
85
rb_method_entry_t
*
me
;
86
};
87
88
#define UNDEFINED_METHOD_ENTRY_P(me) (!(me) || !(me)->def || (me)->def->type == VM_METHOD_TYPE_UNDEF)
89
90
void
rb_add_method_cfunc
(
VALUE
klass,
ID
mid,
VALUE
(*
func
)(
ANYARGS
),
int
argc
,
rb_method_flag_t
noex);
91
rb_method_entry_t
*
rb_add_method
(
VALUE
klass,
ID
mid,
rb_method_type_t
type
,
void
*option,
rb_method_flag_t
noex);
92
rb_method_entry_t
*
rb_method_entry
(
VALUE
klass,
ID
id
);
93
94
rb_method_entry_t
*
rb_method_entry_get_without_cache
(
VALUE
klass,
ID
id
);
95
rb_method_entry_t
*
rb_method_entry_set
(
VALUE
klass,
ID
mid,
const
rb_method_entry_t
*,
rb_method_flag_t
noex);
96
97
int
rb_method_entry_arity
(
const
rb_method_entry_t
*
me
);
98
int
rb_method_entry_eq
(
const
rb_method_entry_t
*m1,
const
rb_method_entry_t
*m2);
99
100
void
rb_mark_method_entry
(
const
rb_method_entry_t
*
me
);
101
void
rb_free_method_entry
(
rb_method_entry_t
*
me
);
102
void
rb_sweep_method_entry
(
void
*vm);
103
void
rb_free_m_table
(
st_table
*tbl);
104
105
#endif
/* METHOD_H */
106
Generated on Tue Feb 26 2013 08:43:03 for Ruby by
1.8.3