Just committed the set Sx, iy op. Patch at end.
Cheers, -Melvin Tested with following: # Cola (0.0.1) generated # _START: bsr __Main __END: end __Main: set I31, -123456789 LBL1: ge I31, 123456789, LBL2 set S0, I31 print I31 print "\n " print S0 print "\n" add I31, I31, 10000 branch LBL1 LBL2: LBL0: ret Index: core.ops =================================================================== RCS file: /cvs/public/parrot/core.ops,v retrieving revision 1.111 diff -u -r1.111 core.ops --- core.ops 21 Mar 2002 22:01:50 -0000 1.111 +++ core.ops 22 Mar 2002 04:09:33 -0000 @@ -540,6 +540,11 @@ goto NEXT(); } +inline op set(out STR, in INT) { + $1 = string_from_int(interpreter, $2); + goto NEXT(); +} + inline op set(out PMC, in INT) { $1->vtable->set_integer_native(interpreter, $1, $2); goto NEXT(); Index: string.c =================================================================== RCS file: /cvs/public/parrot/string.c,v retrieving revision 1.60 diff -u -r1.60 string.c --- string.c 21 Mar 2002 09:56:41 -0000 1.60 +++ string.c 22 Mar 2002 04:09:34 -0000 @@ -774,6 +774,35 @@ return f; } +STRING * +string_from_int(struct Parrot_Interp * interpreter, INTVAL i) { + const char * digits = "0123456789"; + char buf[128]; + char *ptr = &buf[127]; + int neg = 0; + + if(i < 0) { + neg = 1; + i = abs(i); + } + + /* Dangerous looking but no 32/64/128/.... bit int + * would approach 128 characters in the buffer. + */ + do { + *--ptr = digits[i % 10]; + i /= 10; + } + while(i); + + if(neg) + *--ptr = '-'; + + return string_make(interpreter, ptr, (UINTVAL)(127 - (ptr - buf)), + NULL, 0, NULL); +} + + /* * Local variables: * c-indentation-style: bsd Index: include/parrot/string_funcs.h =================================================================== RCS file: /cvs/public/parrot/include/parrot/string_funcs.h,v retrieving revision 1.5 diff -u -r1.5 string_funcs.h --- include/parrot/string_funcs.h 20 Mar 2002 02:08:16 -0000 1.5 +++ include/parrot/string_funcs.h 22 Mar 2002 04:09:35 -0000 @@ -33,7 +33,8 @@ INTVAL Parrot_string_ord(const STRING *, INTVAL idx); FLOATVAL Parrot_string_to_num(const STRING *); INTVAL Parrot_string_to_int(const STRING *); -STRING * Parrot_string_grow(struct Parrot_Interp * interpreter, STRING * s, INTVAL addlen); +STRING * Parrot_string_from_int(struct Parrot_Interp *, INTVAL i); +STRING * Parrot_string_grow(struct Parrot_Interp *, STRING * s, INTVAL addlen); void Parrot_string_destroy(STRING *); STRING *Parrot_string_make(struct Parrot_Interp *, const void *buffer, UINTVAL buflen, const ENCODING *, UINTVAL flags, @@ -60,6 +61,7 @@ #define string_ord Parrot_string_ord #define string_to_num Parrot_string_to_num #define string_to_int Parrot_string_to_int +#define string_from_int Parrot_string_from_int #define string_grow Parrot_string_grow #define string_destroy Parrot_string_destroy #define string_make Parrot_string_make