This patch moves the conversion routines iton and ntoi into set. Index: core.ops =================================================================== RCS file: /cvs/public/parrot/core.ops,v retrieving revision 1.61 diff -c -r1.61 core.ops *** core.ops 30 Dec 2001 12:04:56 -0000 1.61 --- core.ops 30 Dec 2001 17:41:27 -0000 *************** *** 451,456 **** --- 451,460 ----
=item B<set>(i, ic) + =item B<set>(i, n) + + =item B<set>(i, nc) + =item B<set>(p, i) =item B<set>(p, ic) *************** *** 459,464 **** --- 463,472 ---- =item B<set>(n, nc) + =item B<set>(n, i) + + =item B<set>(n, ic) + =item B<set>(p, n) =item B<set>(p, nc) *************** *** 501,511 **** --- 509,531 ---- goto NEXT(); } + op set (i, n|nc) { + FLOATVAL number; + number = $2; + $1 = (INTVAL)number; + goto NEXT(); + } + inline op set(n, n|nc) { $1 = $2; goto NEXT(); } + inline op set(n, i|ic) { + $1 = (FLOATVAL)$2; + goto NEXT(); + } + inline op set(n, p) { $1 = $2->vtable->get_number(interpreter, $2); goto NEXT(); *************** *** 570,622 **** $1 = $2->vtable->get_string_index(interpreter, $2, $3); goto NEXT(); } - - =back - - =cut - - - ############################################################################ ### - - =head2 Conversion operations - - These operations load registers of one type with values from registers of - another type, performing the appropriate type conversion along the way. - - =over 4 - - =cut - - - ######################################## - - =item B<iton>(n, i) - - Load $1 with the FLOATVAL corresponding to the INTVAL from $2. - - =cut - - inline op iton(n, i) { - $1 = (FLOATVAL)$2; - goto NEXT(); - } - - - ######################################## - - =item B<ntoi>(i, n) - - Load $1 with the INTVAL corresponding to the truncated FLOATVAL from $2. - - =cut - - op ntoi(i, n) { - FLOATVAL number; - number = $2; - $1 = (INTVAL)number; - goto NEXT(); - } - =back --- 590,595 ---- Index: t/op/integer.t =================================================================== RCS file: /cvs/public/parrot/t/op/integer.t,v retrieving revision 1.15 diff -c -r1.15 integer.t *** t/op/integer.t 12 Dec 2001 06:00:05 -0000 1.15 --- t/op/integer.t 30 Dec 2001 17:41:28 -0000 *************** *** 918,942 **** 5 OUTPUT ! output_is(<<CODE, <<OUTPUT, "iton_n_i"); set I0, 0 ! iton N0, I0 print N0 print "\\n" set I1, 2147483647 ! iton N1, I1 print N1 print "\\n" set I2, -2147483648 ! iton N2, I2 print N2 print "\\n" end CODE 0.000000 2147483647.000000 -2147483648.000000 OUTPUT --- 918,947 ---- 5 OUTPUT ! output_is(<<CODE, <<OUTPUT, "set_n_i|ic"); set I0, 0 ! set N0, I0 print N0 print "\\n" set I1, 2147483647 ! set N1, I1 print N1 print "\\n" set I2, -2147483648 ! set N2, I2 ! print N2 ! print "\\n" ! ! set N2, -2147483648 print N2 print "\\n" end CODE 0.000000 2147483647.000000 + -2147483648.000000 -2147483648.000000 OUTPUT Index: t/op/number.t =================================================================== RCS file: /cvs/public/parrot/t/op/number.t,v retrieving revision 1.10 diff -c -r1.10 number.t *** t/op/number.t 30 Nov 2001 13:14:51 -0000 1.10 --- t/op/number.t 30 Dec 2001 17:41:29 -0000 *************** *** 762,786 **** 0.500000 OUTPUT ! output_is(<<CODE, <<OUTPUT, "ntoi_i_n"); set N0, 0.0 ! ntoi I0, N0 print I0 print "\\n" set N1, 2147483647.0 ! ntoi I1, N1 print I1 print "\\n" set N2, -2147483648.0 ! ntoi I2, N2 print I2 print "\\n" end CODE 0 2147483647 -2147483648 OUTPUT --- 762,791 ---- 0.500000 OUTPUT ! output_is(<<CODE, <<OUTPUT, "set_i_n|nc"); set N0, 0.0 ! set I0, N0 print I0 print "\\n" set N1, 2147483647.0 ! set I1, N1 print I1 print "\\n" set N2, -2147483648.0 ! set I2, N2 ! print I2 ! print "\\n" ! ! set I2, -2147483648.0 print I2 print "\\n" end CODE 0 2147483647 + -2147483648 -2147483648 OUTPUT