/
typemap
185 lines (154 loc) · 3.9 KB
/
typemap
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
TYPEMAP
negative_is_error I_NEG_IS_ERROR
ALPM_Handle T_ALPM_HANDLE
ALPM_DB T_ALPM_DB
ALPM_LocalDB T_ALPM_LOCALDB
ALPM_SyncDB T_ALPM_SYNCDB
ALPM_Package T_ALPM_PACKAGE
ALPM_PackageFree T_ALPM_PACKAGEFREE
ALPM_PackageOrNull T_ALPM_PACKAGEORNULL
ALPM_Group T_ALPM_GROUP
ALPM_SigLevel T_SIGLEVEL
PackageListFree L_PACKAGE_FREE
PackageList L_PACKAGE
DependList L_DEPEND
StringList L_STRING
StringListFree L_STRING_FREE
pmpkgreason_t T_PKGREASON
off_t T_INT
#--------------------
# INPUT # Perl ==> C
#--------------------
INPUT
I_NEG_IS_ERROR
$var = SvIV($arg)
T_ALPM_HANDLE
if(sv_derived_from($arg, \"ALPM\")){
$var = INT2PTR($type, SvIV((SV *)SvRV($arg)));
}else{
Perl_croak(\"error: expected an object of class ALPM\");
}
T_ALPM_DB
if(sv_derived_from($arg, \"ALPM::DB\")){
IV tmp = SvIV((SV*)SvRV($arg));
$var = INT2PTR($type, tmp);
}else{
Perl_croak(aTHX_ \"%s: %s is not of type %s\",
${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
\"$var\", \"ALPM::DB\")
}
T_ALPM_LOCALDB
if(sv_derived_from($arg, \"ALPM::DB::Local\")){
IV tmp = SvIV((SV*)SvRV($arg));
$var = INT2PTR($type, tmp);
}else{
Perl_croak(aTHX_ \"%s: %s is not of type %s\",
${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
\"$var\", \"ALPM::DB::Local\")
}
T_ALPM_SYNCDB
if(sv_derived_from($arg, \"ALPM::DB::Sync\")){
IV tmp = SvIV((SV*)SvRV($arg));
$var = INT2PTR($type, tmp);
}else{
Perl_croak(aTHX_ \"%s: %s is not of type %s\",
${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
\"$var\", \"ALPM::DB::Sync\")
}
T_ALPM_PACKAGE
if(sv_derived_from($arg, \"ALPM::Package\")){
$var = INT2PTR($type, SvIV((SV *)SvRV($arg)));
}else{
Perl_croak(\"error: expected an ALPM::Package object\");
}
T_ALPM_PACKAGEFREE
if(sv_derived_from($arg, \"ALPM::PackageFree\")){
IV tmp = SvIV((SV*)SvRV($arg));
$var = INT2PTR($type,tmp);
}else{
Perl_croak(aTHX_ \"%s: %s is not of type %s\",
${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
\"$var\", \"ALPM::PackageFree\")
}
T_ALPM_GROUP
if(sv_derived_from($arg, \"ALPM::Group\")){
IV tmp = SvIV((SV*)SvRV($arg));
$var = INT2PTR($type,tmp);
}else{
Perl_croak(aTHX_ \"%s: %s is not of type %s\",
${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]},
\"$var\", \"ALPM::Group\")
}
T_SIGLEVEL
$var = p2c_siglevel($arg);
T_PKGREASON
$var = p2c_pkgreason($arg);
#---------------------
# OUTPUT # C ==> Perl
#---------------------
OUTPUT
I_NEG_IS_ERROR
if($var != 0){
croakalpm("ALPM");
}
$arg = newSViv(1);
T_ALPM_HANDLE
if($var == NULL){
# croakalpm expects a "alpm_handle_t *self" var to exist.
croak(\"error: ALPM handle check failed\");
}else{
sv_setref_pv($arg, \"ALPM\", (void *)$var);
}
T_ALPM_DB
if($var == NULL){
croakalpm("ALPM DB");
}
sv_setref_pv($arg, \"ALPM::DB\", (void *)$var);
T_ALPM_LOCALDB
if($var == NULL){
croakalpm("ALPM DB");
}
sv_setref_pv($arg, \"ALPM::DB::Local\", (void *)$var);
T_ALPM_SYNCDB
if($var == NULL){
croakalpm("ALPM DB");
}
sv_setref_pv($arg, \"ALPM::DB::Sync\", (void *)$var);
T_ALPM_PACKAGE
if($var == NULL){
croakalpm("ALPM Package");
}
sv_setref_pv($arg, \"ALPM::Package\", (void *)$var);
T_ALPM_PACKAGEFREE
if($var == NULL){
croakalpm("ALPM Package");
}
sv_setref_pv($arg, \"ALPM::PackageFree\", (void *)$var);
T_ALPM_PACKAGEORNULL
if($var == NULL){
$arg = &PL_sv_undef;
}
sv_setref_pv($arg, \"ALPM::Package\", (void *)$var);
T_ALPM_GROUP
if ( $var == NULL ) {
$arg = &PL_sv_undef;
}
else {
sv_setref_pv( $arg, \"ALPM::Group\", (void *)$var );
}
T_SIGLEVEL
$arg = c2p_siglevel($var);
T_PKGREASON
$arg = c2p_pkgreason($var);
L_PACKAGE
$arg = newRV_noinc((SV*)list2av($var, c2p_pkg));
L_PACKAGE_FREE
$arg = newRV_noinc((SV*)list2av($var, c2p_pkg));
ZAPLIST($var);
L_DEPEND
$arg = newRV_noinc((SV*)list2av($var, c2p_depend));
L_STRING
$arg = newRV_noinc((SV*)list2av($var, c2p_str));
L_STRINGFREE
$arg = newRV_noinc((SV*)list2av($var, c2p_str));
ZAPLIST($var, free);