# New Ticket Created by "Sean O'Rourke" # Please include the string: [netlabs #791] # in the subject line of all future correspondence about this issue. # <URL: http://bugs6.perl.org/rt2/Ticket/Display.html?id=791 >
This patch adds several ops that exist in the vtables, and seem useful, but aren't in core.ops yet: - le, lt, ge, gt, eq, ne on PMC's - defined(INT, PMC) - neg(PMC, PMC) /s -- attachment 1 ------------------------------------------------------ url: http://bugs6.perl.org/rt2/attach/3731/3471/05e9b6/core.ops.patch
*** core.ops.~1.181.~ Sat Jul 6 13:08:59 2002 --- core.ops Wed Jul 10 19:03:39 2002 *************** *** 1132,1143 **** --- 1132,1147 ---- =item B<eq>(in STR, in STR) + =item B<eq>(in PMC, in PMC) + =item B<eq>(in INT, in INT, inconst INT) =item B<eq>(in NUM, in NUM, inconst INT) =item B<eq>(in STR, in STR, inconst INT) + =item B<eq>(in PMC, in PMC, inconst INT) + Branch if $1 is equal to $2. Return address is popped off the call stack if no address is supplied. *************** *** 1165,1170 **** --- 1169,1181 ---- goto NEXT(); } + op eq (in PMC, in PMC) { + if ($1->vtable->is_equal(interpreter, $1, $2)) { + goto POP(); + } + goto NEXT(); + } + inline op eq(in INT, in INT, inconst INT) { if ($1 == $2) { goto OFFSET($3); *************** *** 1186,1191 **** --- 1197,1208 ---- goto NEXT(); } + op eq (in PMC, in PMC, inconst INT) { + if ($1->vtable->is_equal(interpreter, $1, $2)) { + goto OFFSET($3); + } + goto NEXT(); + } ######################################## *************** *** 1195,1206 **** --- 1212,1227 ---- =item B<ne>(in STR, in STR) + =item B<ne>(in PMC, in PMC) + =item B<ne>(in INT, in INT, inconst INT) =item B<ne>(in NUM, in NUM, inconst INT) =item B<ne>(in STR, in STR, inconst INT) + =item B<ne>(in PMC, in PMC, inconst INT) + Branch if $1 is not equal to $2. Return address is popped off the call stack if no address is supplied. *************** *** 1228,1233 **** --- 1249,1261 ---- goto NEXT(); } + op ne (in PMC, in PMC) { + if (! $1->vtable->is_equal(interpreter, $1, $2)) { + goto POP(); + } + goto NEXT(); + } + inline op ne(in INT, in INT, inconst INT) { if ($1 != $2) { goto OFFSET($3); *************** *** 1249,1254 **** --- 1277,1288 ---- goto NEXT(); } + op ne(in PMC, in PMC, inconst INT) { + if (! $1->vtable->is_equal(interpreter, $1, $2)) { + goto OFFSET($3); + } + goto NEXT(); + } ######################################## *************** *** 1256,1265 **** =item B<lt>(in NUM, in NUM, inconst INT) - =item B<lt>(in PMC, in PMC, inconst INT) - =item B<lt>(in STR, in STR, inconst INT) Branch if $1 is less than $2. =cut --- 1290,1299 ---- =item B<lt>(in NUM, in NUM, inconst INT) =item B<lt>(in STR, in STR, inconst INT) + =item B<lt>(in PMC, in PMC, inconst INT) + Branch if $1 is less than $2. =cut *************** *** 1285,1290 **** --- 1319,1330 ---- goto NEXT(); } + op lt (in PMC, in PMC, inconst INT) { + if ($1->vtable->cmp(interpreter, $1, $2) < 0) { + goto OFFSET($3); + } + goto NEXT(); + } ######################################## *************** *** 1294,1299 **** --- 1334,1341 ---- =item B<le>(in STR, in STR, inconst INT) + =item B<le>(in PMC, in PMC, inconst INT) + Branch if $1 is less than or equal to $2. =cut *************** *** 1319,1324 **** --- 1361,1372 ---- goto NEXT(); } + op le(in PMC, in PMC, inconst INT) { + if ($1->vtable->cmp(interpreter, $1, $2) <= 0) { + goto OFFSET($3); + } + goto NEXT(); + } ######################################## *************** *** 1328,1333 **** --- 1376,1383 ---- =item B<gt>(in STR, in STR, inconst INT) + =item B<gt>(in PMC, in PMC, inconst INT) + Branch if $1 is greater than $2. =cut *************** *** 1353,1358 **** --- 1403,1414 ---- goto NEXT(); } + op gt(in PMC, in PMC, inconst INT) { + if ($1->vtable->cmp(interpreter, $1, $2) > 0) { + goto OFFSET($3); + } + goto NEXT(); + } ######################################## *************** *** 1362,1367 **** --- 1418,1425 ---- =item B<ge>(in STR, in STR, inconst INT) + =item B<ge>(in PMC, in PMC, inconst INT) + Branch if $1 is greater than or equal to $2. =cut *************** *** 1387,1392 **** --- 1445,1457 ---- goto NEXT(); } + op ge(in PMC, in PMC, inconst INT) { + if ($1->vtable->cmp(interpreter, $1, $2) >= 0) { + goto OFFSET($3); + } + goto NEXT(); + } + ######################################## =item B<if>(in INT, inconst INT) *************** *** 1926,1931 **** --- 1991,1998 ---- =item B<neg>(out NUM, in NUM) + =item B<neg>(out PMC, in PMC) + Set $1 to the negative of $2. =cut *************** *** 1950,1955 **** --- 2017,2026 ---- goto NEXT(); } + inline op neg(out PMC, in PMC) { + $2->vtable->neg(interpreter, $2, $1); + goto NEXT(); + } ######################################## *************** *** 3064,3069 **** --- 3135,3153 ---- inline op xor(out PMC, in PMC, in PMC) { $2->vtable->logical_xor(interpreter, $2, $3, $1); + goto NEXT(); + } + + =cut + + =item B<defined>(out INT, in PMC) + + Test for PMC definedness. + + =cut + + inline op defined(out INT, in PMC) { + $1 = $2->vtable->defined(interpreter, $2); goto NEXT(); }