Home
Gnymph
Download
int method_Point_2F_Foo( int arity, struct datum * self, ... ) {
int in_arity, out_arity, n, i, id;
struct datum * t1, * t2, * t3, * t4, * t5, * t6, * t7, * t8, * t9, * t10, * t11, * t12, * t13, ** q;
va_list l;
in_arity = ( arity >> 8 ) & 0xff;
out_arity = arity & 0xff;
if( in_arity < 3 || out_arity < 2 )
error_arity();
else {
l = va_start( self );
t1 = va_arg( l, datum * );
t2 = list_create( in_arity - 3 );
for( i = 0; i < in_arity - 3; i++ ) {
datum * p;
p = va_arg( l, datum * );
list_set_nth( t2, i, p );
}
t3 = va_arg( l, datum * );
t4 = va_arg( l, datum * );
n = min4( list_size( t4 ), list_size( t3 ), list_size( t1 ), list_size( t2 ) );
t5 = list_create( n );
t6 = list_create( n );
for( i = 0; i < n; i++ ) {
t8 = list_get_nth( t4, i );
t9 = list_get_nth( t3, i );
t10 = list_get_nth( t1, i );
t11 = list_get_nth( t2, i );
id = convert_datum_to_atom_id( t8 ) - atom_first_method_id;
if( 0 <= id && id < atom_id_count )
( *dispatch_table_method[ t9->type * 36 + id ] )( 0x0303, t9, t10, t2, t11, &t12, &t13, &t7 );
else
error_invalid_method();
list_set_nth( t5, i, t12 );
list_set_nth( t6, i, t13 );
}
q = va_arg( l, datum ** );
*q = t5;
q = va_arg( l, datum ** );
*q = t7;
for( i = 0; i < out_arity - 2; i++ ) {
datum * p;
p = list_get_nth( t6, i );
q = va_arg( l, datum ** );
*q = p;
}
list_free_base( t6 );
va_end( l );
list_free_base( t2 );
}
return 0;
}