#! /usr/local/bin/perl 
#
# This generates outputs the required number of special methods
# (for empty and full surrogates  and unswizzled objects).
# Change the value of "num" below to the desired number of methods.

$num = 32;  

sub usage {
    die("Usage: gen_special_methods \n");
}

shift && usage;

print "/* Generated automatically from gen_special_methods. */\n\n";

print "#ifdef ASM_METHODS_FILE\n\n";

gen_methods(ASM_FULL_SURR_METHOD);

print "#else\n\n";

gen_methods(SURR_METHOD);
gen_methods(FULL_SURR_METHOD);
gen_methods(UNSWIZZLED_METHOD);

gen_methods_array(surr_method, surr_methods);
gen_methods_array(full_surr_method, full_surr_methods);
gen_methods_array(unswizzled_method, unswizzled_methods);

print "#endif /* ASM_METHODS_FILE */\n";

sub gen_methods {
    my $macro_name = shift;

    my $i;
    for ($i = 0; $i < $num; $i++) {
	print "$macro_name($i) \n";
    }
    print "\n";
}

sub gen_methods_array {
    my $func_name = shift;
    my $array_name = shift;

    my $sep = "";
    print "ofunc $array_name" . " [] = { \n";
    my $i;
    for ($i = 0; $i < $num; $i++) {
	print "$sep    (ofunc) $func_name" ."_$i";
	$sep = ", \n";
    }
    print " \n};\n\n";

}
