summaryrefslogtreecommitdiff
path: root/ext/B/typemap
blob: d891f9d7d50b0f5f4f4394e749aeff8add0b5433 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
TYPEMAP

B::OP		T_OP_OBJ
B::UNOP		T_OP_OBJ
B::BINOP	T_OP_OBJ
B::LOGOP	T_OP_OBJ
B::LISTOP	T_OP_OBJ
B::PMOP		T_OP_OBJ
B::SVOP		T_OP_OBJ
B::PADOP	T_OP_OBJ
B::PVOP		T_OP_OBJ
B::LOOP		T_OP_OBJ
B::COP		T_OP_OBJ

B::SV		T_SV_OBJ
B::PV		T_SV_OBJ
B::IV		T_SV_OBJ
B::NV		T_SV_OBJ
B::PVMG		T_SV_OBJ
B::REGEXP	T_SV_OBJ
B::PVLV		T_SV_OBJ
B::BM		T_SV_OBJ
B::RV		T_SV_OBJ
B::GV		T_SV_OBJ
B::CV		T_SV_OBJ
B::HV		T_SV_OBJ
B::AV		T_SV_OBJ
B::IO		T_SV_OBJ
B::FM		T_SV_OBJ
B::INVLIST	T_SV_OBJ

B::MAGIC	T_MG_OBJ
SSize_t		T_IV
STRLEN		T_UV
PADOFFSET	T_UV

B::HE		T_HE_OBJ
B::RHE		T_RHE_OBJ

B::PADLIST	T_PL_OBJ
B::PADNAMELIST	T_PNL_OBJ
B::PADNAME	T_PN_OBJ

INPUT
T_OP_OBJ
	if (SvROK($arg)) {
	    IV tmp = SvIV((SV*)SvRV($arg));
	    $var = INT2PTR($type,tmp);
	}
	else
	    croak(\"$var is not a reference\")

T_SV_OBJ
	if (SvROK($arg)) {
	    IV tmp = SvIV((SV*)SvRV($arg));
	    $var = INT2PTR($type,tmp);
	}
	else
	    croak(\"$var is not a reference\")

T_MG_OBJ
	if (SvROK($arg)) {
	    IV tmp = SvIV((SV*)SvRV($arg));
	    $var = INT2PTR($type,tmp);
	}
	else
	    croak(\"$var is not a reference\")

T_HE_OBJ
	if (SvROK($arg)) {
	    IV tmp = SvIV((SV*)SvRV($arg));
	    $var = INT2PTR($type,tmp);
	}
	else
	    croak(\"$var is not a reference\")

T_RHE_OBJ
	if (SvROK($arg)) {
	    IV tmp = SvIV((SV*)SvRV($arg));
	    $var = INT2PTR($type,tmp);
	}
	else
	    croak(\"$var is not a reference\")

T_PL_OBJ
	if (SvROK($arg)) {
	    IV tmp = SvIV((SV*)SvRV($arg));
	    $var = INT2PTR($type,tmp);
	}
	else
	    croak(\"$var is not a reference\")

T_PNL_OBJ
	if (SvROK($arg)) {
	    IV tmp = SvIV((SV*)SvRV($arg));
	    $var = INT2PTR($type,tmp);
	}
	else
	    croak(\"$var is not a reference\")

T_PN_OBJ
	if (SvROK($arg)) {
	    IV tmp = SvIV((SV*)SvRV($arg));
	    $var = INT2PTR($type,tmp);
	}
	else
	    croak(\"$var is not a reference\")

OUTPUT
T_MG_OBJ
	sv_setiv(newSVrv($arg, "B::MAGIC"), PTR2IV($var));

T_HE_OBJ
	sv_setiv(newSVrv($arg, "B::HE"), PTR2IV($var));

T_RHE_OBJ
	sv_setiv(newSVrv($arg, "B::RHE"), PTR2IV($var));

T_PL_OBJ
	sv_setiv(newSVrv($arg, $var ? "B::PADLIST" : "B::NULL"),
		 PTR2IV($var));

T_PNL_OBJ
	sv_setiv(newSVrv($arg, $var ? "B::PADNAMELIST" : "B::NULL"),
		 PTR2IV($var));

T_PN_OBJ
	sv_setiv(newSVrv($arg, $var ? "B::PADNAME" : "B::SPECIAL"),
		 PTR2IV($var));