This is signature-test.pl in view mode; [Download] [Up]
#! /usr/local/bin/perl
# signature-test.pl
#
# Copyright (C) 1995, 1996, 1997 Ovidiu Predescu and Mircea Oancea.
# All rights reserved.
#
# Author: Ovidiu Predescu <ovidiu@bx.logicnet.ro>
#
# This file is part of libFoundation.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose and without fee is hereby granted, provided
# that the above copyright notice appear in all copies and that both that
# copyright notice and this permission notice appear in supporting
# documentation.
#
# We disclaim all warranties with regard to this software, including all
# implied warranties of merchantability and fitness, in no event shall
# we be liable for any special, indirect or consequential damages or any
# damages whatsoever resulting from loss of use, data or profits, whether in
# an action of contract, negligence or other tortious action, arising out of
# or in connection with the use or performance of this software.
#
@types = (
'char',
'short',
'int',
'long',
'float',
'double',
'void*',
'Struct1',
'Struct2',
'Struct3',
'Struct4',
'Struct5',
'Struct6',
'Struct7',
'Struct8'
);
%type_encoding = (
'char' => 'c',
'short' => 's',
'int' => 'i',
'long' => 'l',
'float' => 'f',
'double' => 'd',
'void*' => '^v',
'Struct1' => '{?=c}',
'Struct2' => '{?=s}',
'Struct3' => '{?=sc}',
'Struct4' => '{?=i}',
'Struct5' => '{?=ic}',
'Struct6' => '{?=is}',
'Struct7' => '{?=isc}',
'Struct8' => '{?=ii}'
);
%type_method_name = (
'char' => 'c',
'short' => 's',
'int' => 'i',
'long' => 'l',
'float' => 'f',
'double' => 'd',
'void*' => 'p',
'Struct1' => 's1',
'Struct2' => 's2',
'Struct3' => 's3',
'Struct4' => 's4',
'Struct5' => 's5',
'Struct6' => 's6',
'Struct7' => 's7',
'Struct8' => 's8'
);
# The maximum number of arguments a method should have
$no_of_args = 2;
sub generate_methods_file {
local ($file,
$file_prologue, $file_epilogue,
$method_prefix, $method_code,
$initial_acc_args
) = @_;
$FILE = "> $file";
#$FILE = ">-";
open(FILE) or die "cannot open file: $!\n";
print FILE $file_prologue;
# The number of methods generated
$methods_generated = 0;
gen_method($no_of_args, $method_prefix, $method_code, $initial_acc_args);
print FILE $file_epilogue;
print "$methods_generated methods generated in file $file.\n";
}
sub gen_method {
local ($mth_no_of_args,
$method_prefix, $method_code,
$initial_acc_args
) = @_;
gen_method1(0, $mth_no_of_args, "", $initial_acc_args,
$method_prefix, $method_code);
}
sub gen_method1 {
local (
$curr_type_no, $curr_arg_no,
$acc_mth_name, $acc_args,
$method_prefix, $method_code
) = @_;
if ($curr_arg_no == 0) {
print FILE "$method_prefix";
if ($acc_mth_name ne "") {
print FILE "${acc_mth_name}${acc_args}";
}
print FILE $method_code;
$methods_generated++;
print "$methods_generated\r";
return;
}
# Determine the preceding types. We not generate the methods that have more
# than 2 identical types in consecutive positions.
local $prev_type = "";
if ($acc_mth_name =~ /.*_(.*)$/) {
$prev_type = $acc_mth_name;
$prev_type =~ s/.*_(.*)$/$1/;
}
for (local $curr_type_no = 0; $curr_type_no <= $#types; $curr_type_no++) {
local $label = $type_method_name{$types[$curr_type_no]};
if(!($label eq $prev_type)) {
gen_method1($curr_type_no, $curr_arg_no - 1,
"${acc_mth_name}_$label",
&$show_acc_args($acc_args, $curr_type_no, $curr_arg_no),
$method_prefix, $method_code);
}
}
}
$source_file = __FILE__;
$show_acc_args = sub {
local ($acc_args, $curr_type_no, $curr_arg_no) = @_;
local $number = $no_of_args - $curr_arg_no;
local $label = $type_method_name{$types[$curr_type_no]};
return "$acc_args:($types[$curr_type_no])${label}${number} ";
};
generate_methods_file("SignatureTest.m",
"/* Do not modify! Generated automatically from $source_file. */
#include <Foundation/NSObject.h>
#include \"MyObject.h\"
\@interface SignatureTest : NSObject
\@end
\@implementation SignatureTest
", "
\@end /* SignatureTest */
", "- (void)method",
"{}
",
"");
$show_acc_args = sub {
local ($acc_args, $curr_type_no, $curr_arg_no) = @_;
return ":${acc_args}${type_encoding{$types[$curr_type_no]}}";
};
generate_methods_file("testsuite/NSMethodSignature/aut-mthsign.exp",
"# Do not modify! Generated automatically from $source_file.
set test \"aut-mthsign\"
call loop
defobj object [[SignatureTest new] autorelease]
", "
defobj begin_exception [GoToBeginException new]
send \"throw \$begin_exception\\n\"
expect {
-re \"\$prompt\$\" {}
}
",
"defobj pool [NSAutoreleasePool new]
check_encoding object \"method",
"\"
[pool release]
",
"\" \"v\@:");
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.