Hi, I tested your patch and oss and jack outputs work fine. With alsa there is only silence.
24 березня 2009 о 02:00 +0100 Samuel Thibault написав(-ла):
> Hello,
>
> Here is an updated patch. I've checked all the places that upstream
> marked as "ISSUE: 64-bit", but also a few other. I could run all the
> basic examples with success. Could you make some tests?
>
> Samuel
> diff -ur chuck-1.2.0.8.dfsg.orig/debian/rules chuck-1.2.0.8.dfsg/debian/rules
> --- chuck-1.2.0.8.dfsg.orig/debian/rules 2009-03-23 23:33:48.000000000
> +0100
> +++ chuck-1.2.0.8.dfsg/debian/rules 2009-03-23 23:34:11.000000000 +0100
> @@ -6,7 +6,7 @@
> # Uncomment this to turn on verbose mode.
> #export DH_VERBOSE=1
>
> -CFLAGS = -Wall -g
> +CFLAGS = -Wall -g -fno-strict-aliasing
>
> ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
> CFLAGS += -O0
> diff -ur chuck-1.2.0.8.dfsg.orig/src/chuck_emit.cpp
> chuck-1.2.0.8.dfsg/src/chuck_emit.cpp
> --- chuck-1.2.0.8.dfsg.orig/src/chuck_emit.cpp 2007-03-22
> 07:36:02.000000000 +0100
> +++ chuck-1.2.0.8.dfsg/src/chuck_emit.cpp 2009-03-24 00:55:04.000000000
> +0100
> @@ -371,9 +371,9 @@
> // if decl, then expect only one word per var
> if( exp->s_type == ae_exp_decl )
> emit->append( new Chuck_Instr_Reg_Pop_Word3(
> exp->decl.num_var_decls ) );
> - else if( exp->type->size == 4 ) // ISSUE: 64-bit
> + else if( exp->type->size == sz_INT ) // ISSUE: 64-bit
> emit->append( new Chuck_Instr_Reg_Pop_Word );
> - else if( exp->type->size == 8 ) // ISSUE: 64-bit
> + else if( exp->type->size == sz_FLOAT ) // ISSUE: 64-bit
> emit->append( new Chuck_Instr_Reg_Pop_Word2 );
> else
> {
> @@ -606,9 +606,9 @@
> return FALSE;
>
> // HACK!
> - if( stmt->c3->type->size == 8 ) // ISSUE: 64-bit
> + if( stmt->c3->type->size == sz_FLOAT ) // ISSUE: 64-bit
> emit->append( new Chuck_Instr_Reg_Pop_Word2 );
> - else if( stmt->c3->type->size == 4 ) // ISSUE: 64-bit
> + else if( stmt->c3->type->size == sz_INT ) // ISSUE: 64-bit
> emit->append( new Chuck_Instr_Reg_Pop_Word );
> else if( stmt->c3->type->size != 0 )
> {
> @@ -1027,8 +1027,7 @@
> emit->code->stack_break.push_back( NULL );
>
> // push the value of the loop counter
> - // TODO: get rid of hard code 4
> - emit->append( new Chuck_Instr_Reg_Push_Deref( (t_CKUINT)counter, 4 ) );
> // ISSUE: 64-bit
> + emit->append( new Chuck_Instr_Reg_Push_Deref( (t_CKUINT)counter, sz_INT
> ) );
>
> // get the type, taking cast into account
> Chuck_Type * type = stmt->cond->cast_to ? stmt->cond->cast_to :
> stmt->cond->type;
> @@ -2122,9 +2121,9 @@
> else
> {
> // assign primitive
> - if( right->size == 4 ) // ISSUE: 64-bit
> + if( right->size == sz_INT ) // ISSUE: 64-bit
> emit->append( new Chuck_Instr_Assign_Primitive );
> - else if( right->size == 8 ) // ISSUE: 64-bit
> + else if( right->size == sz_FLOAT ) // ISSUE: 64-bit
> emit->append( new Chuck_Instr_Assign_Primitive2 );
> else
> {
> @@ -2644,7 +2643,7 @@
> is_str = TRUE;
>
> // make sure
> - if( type->size != 4 && type->size != 8 ) // ISSUE: 64-bit
> + if( type->size != sz_INT && type->size != sz_FLOAT )
> {
> EM_error2( array->linepos,
> "(emit): internal error: array with datasize of %i...",
> type->size );
> @@ -2705,7 +2704,7 @@
> t_CKUINT size = type->size;
> if( func->def->s_type == ae_func_builtin )
> {
> - if( size == 0 || size == 4 || size == 8 ) // ISSUE: 64-bit
> + if( size == 0 || size == sz_INT || size == sz_FLOAT )
> {
> // is member
> if( is_member )
> @@ -3165,9 +3164,9 @@
> /* if( !is_init && first_exp )
> {
> // push 0
> - if( type->size == 4 ) // ISSUE: 64-bit
> + if( type->size == sz_INT )
> emit->append( new Chuck_Instr_Reg_Push_Imm( 0 ) );
> - else if( type->size == 8 ) // ISSUE: 64-bit
> + else if( type->size == sz_FLOAT )
> emit->append( new Chuck_Instr_Reg_Push_Imm2( 0.0 ) );
> else
> {
> @@ -3184,9 +3183,9 @@
> if( value->is_member )
> {
> // zero out location in object, and leave addr on operand stack
> - if( type->size == 4 ) // ISSUE: 64-bit
> + if( type->size == sz_INT ) // ISSUE: 64-bit
> emit->append( new Chuck_Instr_Alloc_Member_Word(
> value->offset ) );
> - else if( type->size == 8 ) // ISSUE: 64-bit
> + else if( type->size == sz_FLOAT ) // ISSUE: 64-bit
> emit->append( new Chuck_Instr_Alloc_Member_Word2(
> value->offset ) );
> else
> {
> @@ -3218,9 +3217,9 @@
> // TODO: this is wrong for static
> // BAD:
> // FIX:
> - if( type->size == 4 ) // ISSUE: 64-bit
> + if( type->size == sz_INT ) // ISSUE: 64-bit
> emit->append( new Chuck_Instr_Alloc_Word( local->offset
> ) );
> - else if( type->size == 8 ) // ISSUE: 64-bit
> + else if( type->size == sz_FLOAT ) // ISSUE: 64-bit
> emit->append( new Chuck_Instr_Alloc_Word2( local->offset
> ) );
> else
> {
> @@ -3273,11 +3272,11 @@
> // if obj
> if( is_obj )
> emit->append( new Chuck_Instr_Assign_Object );
> - // size 4 primitive
> - else if( type->size == 4 ) // ISSUE: 64-bit
> + // size int primitive
> + else if( type->size == sz_INT ) // ISSUE: 64-bit
> emit->append( new Chuck_Instr_Assign_Primitive );
> - // size 8 primitive
> - else if( type->size == 8 ) // ISSUE: 64-bit
> + // size float primitive
> + else if( type->size == sz_FLOAT ) // ISSUE: 64-bit
> emit->append( new Chuck_Instr_Assign_Primitive2 );
> else
> assert( FALSE );
> @@ -3672,7 +3671,7 @@
> // handle member function
> // TODO: this is a hack - what if exp is not func_call?
> // if( emit->code->need_this )
> - // size += 4;
> + // size += sz_UINT;
>
> // emit instruction that will put the code on the stack
> emit->append( new Chuck_Instr_Reg_Push_Imm( (t_CKUINT)code ) );
> @@ -3746,9 +3745,9 @@
> if( v->func_ref )
> emit->append( new Chuck_Instr_Reg_Push_Imm(
> (t_CKUINT)v->func_ref ) );
> // check size
> - else if( v->type->size == 4 ) // ISSUE: 64-bit
> + else if( v->type->size == sz_INT ) // ISSUE: 64-bit
> emit->append( new Chuck_Instr_Reg_Push_Mem( v->offset,
> v->is_context_global ) );
> - else if( v->type->size == 8 ) // ISSUE: 64-bit
> + else if( v->type->size == sz_FLOAT ) // ISSUE: 64-bit
> emit->append( new Chuck_Instr_Reg_Push_Mem2( v->offset,
> v->is_context_global ) );
> else
> {
> diff -ur chuck-1.2.0.8.dfsg.orig/src/chuck_instr.cpp
> chuck-1.2.0.8.dfsg/src/chuck_instr.cpp
> --- chuck-1.2.0.8.dfsg.orig/src/chuck_instr.cpp 2007-03-22
> 07:36:02.000000000 +0100
> +++ chuck-1.2.0.8.dfsg/src/chuck_instr.cpp 2009-03-24 01:41:20.000000000
> +0100
> @@ -1105,7 +1105,7 @@
>
> //-----------------------------------------------------------------------------
> void Chuck_Instr_Reg_Push_Deref::execute( Chuck_VM * vm, Chuck_VM_Shred *
> shred )
> {
> - if( m_size == 4 ) // ISSUE: 64-bit
> + if( m_size == sz_UINT )
> {
> t_CKUINT *& reg_sp = (t_CKUINT *&)shred->reg->sp;
> push_( reg_sp, *((t_CKUINT *)m_val) );
> @@ -2526,12 +2526,12 @@
> Chuck_VM_Code * func = (Chuck_VM_Code *)*reg_sp;
> // get the local stack depth - caller local variables
> t_CKUINT local_depth = *(reg_sp+1);
> - // convert to number of 4-byte words, extra partial word counts as
> additional word
> - local_depth = ( local_depth >> 2 ) + ( local_depth & 0x3 ? 1 : 0 );
> + // convert to number of int words, extra partial word counts as
> additional word
> + local_depth = ( local_depth / sz_UINT ) + ( local_depth & 0x3 ? 1 : 0 );
> // get the stack depth of the callee function args
> - t_CKUINT stack_depth = ( func->stack_depth >> 2 ) + ( func->stack_depth
> & 0x3 ? 1 : 0 );
> + t_CKUINT stack_depth = ( func->stack_depth / sz_UINT ) + (
> func->stack_depth & 0x3 ? 1 : 0 );
> // get the previous stack depth - caller function args
> - t_CKUINT prev_stack = ( *(mem_sp-1) >> 2 ) + ( *(mem_sp-1) & 0x3 ? 1 : 0
> );
> + t_CKUINT prev_stack = ( *(mem_sp-1) / sz_UINT ) + ( *(mem_sp-1) & 0x3 ?
> 1 : 0 );
>
> // jump the sp
> mem_sp += prev_stack + local_depth;
> @@ -2605,13 +2605,13 @@
> // MOVED TO BELOW: f_mfun f = (f_mfun)func->native_func;
> // get the local stack depth - caller local variables
> t_CKUINT local_depth = *(reg_sp+1);
> - // convert to number of 4-byte words, extra partial word counts as
> additional word
> - local_depth = ( local_depth >> 2 ) + ( local_depth & 0x3 ? 1 : 0 );
> + // convert to number of int words, extra partial word counts as
> additional word
> + local_depth = ( local_depth / sz_UINT ) + ( local_depth & 0x3 ? 1 : 0 );
> // get the stack depth of the callee function args
> - t_CKUINT stack_depth = ( func->stack_depth >> 2 ) + ( func->stack_depth
> & 0x3 ? 1 : 0 );
> + t_CKUINT stack_depth = ( func->stack_depth / sz_UINT ) + (
> func->stack_depth & 0x3 ? 1 : 0 );
> // UNUSED: get the previous stack depth - caller function args
> - // UNUSED: t_CKUINT prev_stack = ( *(mem_sp-1) >> 2 ) + ( *(mem_sp-1) &
> 0x3 ? 1 : 0 );
> - // the amount to push in 4-byte words
> + // UNUSED: t_CKUINT prev_stack = ( *(mem_sp-1) / sz_UINT ) + (
> *(mem_sp-1) & 0x3 ? 1 : 0 );
> + // the amount to push in int words
> t_CKUINT push = local_depth;
> // push the mem stack passed the current function variables and arguments
> mem_sp += push;
> @@ -2661,12 +2661,12 @@
> mem_sp -= push;
>
> // push the return
> - if( m_val == 4 ) // ISSUE: 64-bit
> + if( m_val == sz_UINT )
> {
> // push the return args
> push_( reg_sp, retval.v_uint );
> }
> - else if( m_val == 8 ) // ISSUE: 64-bit
> + else if( m_val == sz_FLOAT )
> {
> // push the return args
> t_CKFLOAT *& sp_double = (t_CKFLOAT *&)reg_sp;
> @@ -2703,13 +2703,13 @@
> f_sfun f = (f_sfun)func->native_func;
> // get the local stack depth - caller local variables
> t_CKUINT local_depth = *(reg_sp+1);
> - // convert to number of 4-byte words, extra partial word counts as
> additional word
> - local_depth = ( local_depth >> 2 ) + ( local_depth & 0x3 ? 1 : 0 );
> + // convert to number of int words, extra partial word counts as
> additional word
> + local_depth = ( local_depth / sz_UINT ) + ( local_depth & 0x3 ? 1 : 0 );
> // get the stack depth of the callee function args
> - t_CKUINT stack_depth = ( func->stack_depth >> 2 ) + ( func->stack_depth
> & 0x3 ? 1 : 0 );
> + t_CKUINT stack_depth = ( func->stack_depth / sz_UINT ) + (
> func->stack_depth & 0x3 ? 1 : 0 );
> // UNUSED: get the previous stack depth - caller function args
> - // UNUSED: t_CKUINT prev_stack = ( *(mem_sp-1) >> 2 ) + ( *(mem_sp-1) &
> 0x3 ? 1 : 0 );
> - // the amount to push in 4-byte words
> + // UNUSED: t_CKUINT prev_stack = ( *(mem_sp-1) / sz_UINT ) + (
> *(mem_sp-1) & 0x3 ? 1 : 0 );
> + // the amount to push in int words
> t_CKUINT push = local_depth;
> // push the mem stack passed the current function variables and arguments
> mem_sp += push;
> @@ -2747,12 +2747,12 @@
> mem_sp -= push;
>
> // push the return
> - if( m_val == 4 ) // ISSUE: 64-bit
> + if( m_val == sz_UINT ) // ISSUE: 64-bit
> {
> // push the return args
> push_( reg_sp, retval.v_uint );
> }
> - else if( m_val == 8 ) // ISSUE: 64-bit
> + else if( m_val == sz_FLOAT ) // ISSUE: 64-bit
> {
> // push the return args
> t_CKFLOAT *& sp_double = (t_CKFLOAT *&)reg_sp;
> @@ -2985,7 +2985,7 @@
> t_CKUINT *& reg_sp = (t_CKUINT *&)shred->reg->sp;
>
> // allocate the array
> - if( m_type_ref->size == 4 ) // ISSUE: 64-bit
> + if( m_type_ref->size == sz_INT ) // ISSUE: 64-bit
> {
> // pop the values
> pop_( reg_sp, m_length );
> @@ -3003,10 +3003,10 @@
> // push the pointer
> push_( reg_sp, (t_CKUINT)array );
> }
> - else if( m_type_ref->size == 8 ) // ISSUE: 64-bit
> + else if( m_type_ref->size == sz_FLOAT ) // ISSUE: 64-bit
> {
> // pop the values
> - pop_( reg_sp, 2 * m_length );
> + pop_( reg_sp, (sz_FLOAT / sz_INT) * m_length );
> // instantiate array
> Chuck_Array8 * array = new Chuck_Array8( m_length );
> // problem
> @@ -3114,7 +3114,7 @@
> if( capacity >= top )
> {
> // check size
> - if( size == 4 ) // ISSUE: 64-bit
> + if( size == sz_INT ) // ISSUE: 64-bit
> {
> Chuck_Array4 * base = new Chuck_Array4( is_obj, *capacity );
> if( !base ) goto out_of_memory;
> @@ -3312,8 +3312,7 @@
> // check pointer
> if( !(*sp) ) goto null_pointer;
>
> - // 4 or 8
> - if( m_size == 4 ) // ISSUE: 64-bit
> + if( m_size == sz_INT ) // ISSUE: 64-bit
> {
> // get array
> Chuck_Array4 * arr = (Chuck_Array4 *)(*sp);
> @@ -3335,7 +3334,7 @@
> push_( sp, val );
> }
> }
> - else if( m_size == 8 ) // ISSUE: 64-bit
> + else if( m_size == sz_FLOAT ) // ISSUE: 64-bit
> {
> // get array
> Chuck_Array8 * arr = (Chuck_Array8 *)(*sp);
> @@ -3404,8 +3403,7 @@
> // check pointer
> if( !(*sp) ) goto null_pointer;
>
> - // 4 or 8
> - if( m_size == 4 ) // ISSUE: 64-bit
> + if( m_size == sz_INT ) // ISSUE: 64-bit
> {
> // get array
> Chuck_Array4 * arr = (Chuck_Array4 *)(*sp);
> @@ -3427,7 +3425,7 @@
> push_( sp, val );
> }
> }
> - else if( m_size == 8 ) // ISSUE: 64-bit
> + else if( m_size == sz_FLOAT ) // ISSUE: 64-bit
> {
> // get array
> Chuck_Array8 * arr = (Chuck_Array8 *)(*sp);
> @@ -3522,8 +3520,7 @@
> }
> }
>
> - // 4 or 8
> - if( m_size == 4 ) // ISSUE: 64-bit
> + if( m_size == sz_INT ) // ISSUE: 64-bit
> {
> // get arry
> Chuck_Array4 * arr = base;
> @@ -3545,7 +3542,7 @@
> push_( sp, val );
> }
> }
> - else if( m_size == 8 ) // ISSUE: 64-bit
> + else if( m_size == sz_FLOAT ) // ISSUE: 64-bit
> {
> // get array
> Chuck_Array8 * arr = (Chuck_Array8 *)(base);
> @@ -3626,9 +3623,8 @@
> }
> else
> {
> - // 4 or 8
> - if( m_size == 4 ) { push_( sp, *((t_CKUINT *)data) ); } // ISSUE:
> 64-bit
> - else if( m_size == 8 ) { push_float( sp, *((t_CKFLOAT *)data) ); }
> // ISSUE: 64-bit
> + if( m_size == sz_UINT ) { push_( sp, *((t_CKUINT *)data) ); } //
> ISSUE: 64-bit
> + else if( m_size == sz_FLOAT ) { push_float( sp, *((t_CKFLOAT *)data)
> ); } // ISSUE: 64-bit
> else assert( FALSE );
> }
>
> @@ -3717,9 +3713,8 @@
> }
> else
> {
> - // 4 or 8
> - if( m_size == 4 ) { push_( sp, *((t_CKUINT *)data) ); } // ISSUE:
> 64-bit
> - else if( m_size == 8 ) { push_float( sp, *((t_CKFLOAT *)data) ); }
> // ISSUE: 64-bit
> + if( m_size == sz_UINT ) { push_( sp, *((t_CKUINT *)data) ); } //
> ISSUE: 64-bit
> + else if( m_size == sz_FLOAT ) { push_float( sp, *((t_CKFLOAT *)data)
> ); } // ISSUE: 64-bit
> else assert( FALSE );
> }
> }
> @@ -3744,9 +3739,8 @@
> }
> else
> {
> - // 4 or 8
> - if( m_size == 4 ) { push_( sp, *((t_CKUINT *)m_addr) ); } // ISSUE:
> 64-bit
> - else if( m_size == 8 ) { push_float( sp, *((t_CKFLOAT *)m_addr) ); }
> // ISSUE: 64-bit
> + if( m_size == sz_UINT ) { push_( sp, *((t_CKUINT *)m_addr) ); } //
> ISSUE: 64-bit
> + else if( m_size == sz_FLOAT ) { push_float( sp, *((t_CKFLOAT
> *)m_addr) ); } // ISSUE: 64-bit
> else assert( FALSE );
> }
> }
> @@ -4110,27 +4104,37 @@
> void Chuck_Instr_Hack::execute( Chuck_VM * vm, Chuck_VM_Shred * shred )
> {
> // look at the type
> - if( m_type_ref->size == 4 ) // ISSUE: 64-bit
> + switch (m_type_ref->xid) {
> + case te_int:
> + case te_uint:
> {
> t_CKINT * sp = (t_CKINT *)shred->reg->sp;
> - if( !isa( m_type_ref, &t_string ) )
> - // print it
> - fprintf( stderr, "%d :(%s)\n", *(sp-1), m_type_ref->c_name() );
> - else
> - fprintf( stderr, "\"%s\" : (%s)\n", ((Chuck_String
> *)*(sp-1))->str.c_str(), m_type_ref->c_name() );
> + // print it
> + fprintf( stderr, "%d :(%s)\n", *(sp-1), m_type_ref->c_name() );
> + break;
> }
> - else if( m_type_ref->size == 8 ) // ISSUE: 64-bit
> + case te_string:
> + {
> + t_CKINT * sp = (t_CKINT *)shred->reg->sp;
> + // print it
> + fprintf( stderr, "\"%s\" : (%s)\n", ((Chuck_String
> *)*(sp-1))->str.c_str(), m_type_ref->c_name() );
> + break;
> + }
> + case te_single:
> + case te_float:
> + case te_double:
> + case te_time:
> + case te_dur:
> {
> t_CKFLOAT * sp = (t_CKFLOAT *)shred->reg->sp;
> // print it
> fprintf( stderr, "%f :(%s)\n", *(sp-1), m_type_ref->c_name() );
> + break;
> }
> - else if( m_type_ref->size == 0 )
> - {
> + default:
> fprintf( stderr, "... :(%s)\n", m_type_ref->c_name() );
> + break;
> }
> - else
> - assert( FALSE );
>
> // flush
> fflush( stderr );
> @@ -4186,37 +4190,48 @@
> Chuck_Type * type = m_type_refs[i];
>
> // look at the type
> - if( type->size == 4 ) // ISSUE: 64-bit
> - {
> + switch (type->xid) {
> + case te_int:
> + case te_uint:
> + {
> t_CKINT * sp = (t_CKINT *)the_sp;
> - if( !isa( type, &t_string ) )
> - {
> - if( isa( type, &t_object ) )
> - // print it
> - fprintf( stderr, "0x%x ", *(sp) );
> - else
> - // print it
> - fprintf( stderr, "%d ", *(sp) );
> - }
> - else
> - fprintf( stderr, "%s ", ((Chuck_String *)*(sp))->str.c_str()
> );
> -
> - the_sp += 4;
> - }
> - else if( type->size == 8 ) // ISSUE: 64-bit
> - {
> + // print it
> + fprintf( stderr, "%d ", *(sp) );
> + the_sp += sz_INT;
> + break;
> + }
> + case te_object:
> + {
> + t_CKINT * sp = (t_CKINT *)the_sp;
> + // print it
> + fprintf( stderr, "0x%x ", *(sp) );
> + the_sp += sz_INT;
> + break;
> + }
> + case te_string:
> + {
> + t_CKINT * sp = (t_CKINT *)the_sp;
> + // print it
> + fprintf( stderr, "%s ", ((Chuck_String *)*(sp))->str.c_str() );
> + the_sp += sz_INT;
> + break;
> + }
> + case te_single:
> + case te_float:
> + case te_double:
> + case te_time:
> + case te_dur:
> + {
> t_CKFLOAT * sp = (t_CKFLOAT *)the_sp;
> // print it
> fprintf( stderr, "%f ", *(sp) );
> -
> - the_sp += 8;
> - }
> - else if( type->size == 0 )
> - {
> + the_sp += sz_FLOAT;
> + break;
> + }
> + default:
> fprintf( stderr, "... " );
> - }
> - else
> - assert( FALSE );
> + break;
> + }
> }
>
> fprintf( stderr, "\n" );
> diff -ur chuck-1.2.0.8.dfsg.orig/src/chuck_oo.h
> chuck-1.2.0.8.dfsg/src/chuck_oo.h
> --- chuck-1.2.0.8.dfsg.orig/src/chuck_oo.h 2007-03-22 07:36:01.000000000
> +0100
> +++ chuck-1.2.0.8.dfsg/src/chuck_oo.h 2009-03-24 00:53:01.000000000 +0100
> @@ -152,8 +152,8 @@
>
>
>
> -#define CHUCK_ARRAY4_DATASIZE 4
> -#define CHUCK_ARRAY8_DATASIZE 8
> +#define CHUCK_ARRAY4_DATASIZE sz_INT
> +#define CHUCK_ARRAY8_DATASIZE sz_FLOAT
>
> //-----------------------------------------------------------------------------
> // name: struct Chuck_Array
> // desc: native ChucK arrays ( virtual base class )
> diff -ur chuck-1.2.0.8.dfsg.orig/src/ulib_std.cpp
> chuck-1.2.0.8.dfsg/src/ulib_std.cpp
> --- chuck-1.2.0.8.dfsg.orig/src/ulib_std.cpp 2007-03-22 07:36:01.000000000
> +0100
> +++ chuck-1.2.0.8.dfsg/src/ulib_std.cpp 2009-03-24 01:02:23.000000000
> +0100
> @@ -549,8 +549,8 @@
> // randi
> CK_DLL_SFUN( rand2_impl ) // inclusive.
> {
> - int min = *(int *)ARGS, max = *((int *)ARGS + 1);
> - int range = max - min;
> + t_CKINT min = *(t_CKINT *)ARGS, max = *((t_CKINT *)ARGS + 1);
> + t_CKINT range = max - min;
> if ( range == 0 )
> {
> RETURN->v_int = min;
> @@ -562,11 +562,11 @@
> {
> if( range > 0 )
> {
> - RETURN->v_int = min + (int) ( (1.0 + range) * (
> ::rand()/(RAND_MAX+1.0) ) );
> + RETURN->v_int = min + (t_CKINT) ( (1.0 + range) * (
> ::rand()/(RAND_MAX+1.0) ) );
> }
> else
> {
> - RETURN->v_int = min - (int) ( (-range + 1.0) * (
> ::rand()/(RAND_MAX+1.0) ) );
> + RETURN->v_int = min - (t_CKINT) ( (-range + 1.0) * (
> ::rand()/(RAND_MAX+1.0) ) );
> }
> }
> }
signature.asc
Description: Digital signature

