Author: jkeenan
Date: Sat Feb 10 11:10:33 2007
New Revision: 16937
Modified:
branches/buildtools/tools/build/ops2c.pl
Log:
Extensive refactoring of code from blocks into subroutines, moving from the
end of the file back towards the beginning. Passes 'make'. More to come.
Modified: branches/buildtools/tools/build/ops2c.pl
==============================================================================
--- branches/buildtools/tools/build/ops2c.pl (original)
+++ branches/buildtools/tools/build/ops2c.pl Sat Feb 10 11:10:33 2007
@@ -6,7 +6,6 @@
use lib 'lib';
use Getopt::Long qw(:config permute);
-use Data::Dumper;
use Parrot::OpsFile;
use Parrot::OpLib::core;
@@ -40,7 +39,7 @@
my $suffix = $trans->suffix(); # Invoked (sometimes) as ${suffix}
my $file = $flagref->{core} ? 'core.ops' : shift @ARGV;
-my $base = $file;
+my $base = $file; # Invoked (sometimes) as ${base}
$base =~ s/\.ops$//;
my $incdir = "include/parrot/oplib";
@@ -92,9 +91,11 @@
}
}
-my $major_version = $ops->major_version;
-my $minor_version = $ops->minor_version;
-my $patch_version = $ops->patch_version;
+my %versions = (
+ major => $ops->major_version,
+ minor => $ops->minor_version,
+ patch => $ops->patch_version,
+);
my $num_ops = scalar $ops->ops;
my $num_entries = $num_ops + 1; # For trailing NULL
@@ -112,9 +113,7 @@
q{Parrot},
q{DynOp},
$base . $suffix,
- $major_version,
- $minor_version,
- $patch_version
+ @versions{ qw(major minor patch) },
);
# Open the C-header (.h) file
@@ -139,7 +138,6 @@
my $run_core_func = $trans->run_core_func_decl($base);
print $HEADER "$run_core_func;\n";
}
-my $bs = "${base}${suffix}_"; # Also invoked as ${bs}
_print_coda($HEADER);
@@ -147,14 +145,15 @@
##### END printing to $HEADER #####
my $defines = $trans->defines(); # Invoked as: ${defines}
+my $bs = "${base}${suffix}_"; # Also invoked as ${bs}
my $opsarraytype = $trans->opsarraytype();
-my $core_type = $trans->core_type();
my %arg_dir_mapping = (
'' => 'PARROT_ARGDIR_IGNORED',
'i' => 'PARROT_ARGDIR_IN',
'o' => 'PARROT_ARGDIR_OUT',
'io' => 'PARROT_ARGDIR_INOUT'
);
+#my $core_type = $trans->core_type();
##### BEGIN printing to $SOURCE #####
open my $SOURCE, '>', $source
@@ -183,76 +182,237 @@
print $SOURCE $trans->run_core_func_start;
}
-#
# Iterate over the ops, appending HEADER and SOURCE fragments:
-#
+my $op_funcs_ref;
+my $op_func_table_ref;
+my $cg_jump_table_ref;
+my $index;
+
+($index, $op_funcs_ref, $op_func_table_ref, $cg_jump_table_ref) =
+ _iterate_over_ops( {
+ ops => $ops,
+ trans => $trans,
+ opsarraytype => $opsarraytype,
+ suffix => $suffix,
+ bs => $bs,
+ } );
+
+my @op_funcs = @{$op_funcs_ref};
+my @op_func_table = @{$op_func_table_ref};
+my @cg_jump_table = @{$cg_jump_table_ref};
-my @op_funcs;
-my @op_func_table;
-my @cg_jump_table;
-my $index = 0;
-my ( $prev_src, $prev_index );
-
-$prev_src = '';
-foreach my $op ( $ops->ops ) {
- my $func_name = $op->func_name($trans);
- my $arg_types = "$opsarraytype *, Interp *";
- my $prototype = "$sym_export $opsarraytype * $func_name ($arg_types)";
- my $args = "$opsarraytype *cur_opcode, Interp *interp";
- my $definition;
- my $comment = '';
- my $one_op = "";
-
- if ( $suffix =~ /cg/ ) {
- $definition = "PC_$index:";
- $comment = "/* " . $op->full_name() . " */";
- }
- elsif ( $suffix =~ /switch/ ) {
- $definition = "case $index:";
- $comment = "/* " . $op->full_name() . " */";
- }
- else {
- $definition = "$prototype;\n$opsarraytype *\n$func_name ($args)";
- }
+_print_cg_jump_table( {
+ source => $SOURCE,
+ cg_jump_table => [EMAIL PROTECTED],
+ suffix => $suffix,
+ trans => $trans,
+ bs => $bs,
+} );
+
+_print_goto_opcode( {
+ source => $SOURCE,
+ suffix => $suffix,
+ bs => $bs,
+} );
+
+_print_op_function_definitions( {
+ source => $SOURCE,
+ op_funcs => [EMAIL PROTECTED],
+ trans => $trans,
+ base => $base,
+} );
+
+# reset #line in the SOURCE file.
+$SOURCE = _reset_line_number( {
+ flag => $flagref,
+ source => $SOURCE,
+ sourcefile => $source,
+} );
+
+my ($op_info, $op_func, $getop) = _op_func_table( {
+ suffix => $suffix,
+ bs => $bs,
+ num_ops => $num_ops,
+ num_entries => $num_entries,
+ op_func_table => [EMAIL PROTECTED],
+ source => $SOURCE,
+} );
+
+my $namesref = {};
+($namesref, $op_info, $index) = _op_info_table( {
+ suffix => $suffix,
+ bs => $bs,
+ source => $SOURCE,
+ op_info => $op_info,
+ num_entries => $num_entries,
+ index => $index,
+ ops => $ops,
+ names => $namesref,
+} );
+
+$getop = _op_lookup( {
+ getop => $getop,
+ suffix => $suffix,
+ flag => $flagref,
+ index => $index,
+ names => $namesref,
+ source => $SOURCE,
+ num_ops => $num_ops,
+ bs => $bs,
+} );
+
+_print_op_lib_descriptor( {
+ source => $SOURCE,
+ bs => $bs,
+ base => $base,
+ suffix => $suffix,
+ trans => $trans,
+ versions => \%versions,
+ num_ops => $num_ops,
+ op_info => $op_info,
+ op_func => $op_func,
+ getop => $getop,
+} );
+
+_generate_init_func( {
+ trans => $trans,
+ base => $base,
+ bs => $bs,
+ source => $SOURCE,
+ init_func => $init_func,
+} );
+
+_print_dynamic_lib_load( {
+ flag => $flagref,
+ base => $base,
+ suffix => $suffix,
+ source => $SOURCE,
+ sym_export => $sym_export,
+ init_func => $init_func,
+} );
+
+_print_coda($SOURCE);
+
+close $SOURCE or die "Unable to close handle to $source: $!";
+##### END printing to $SOURCE #####
+
+_rename_source($source);
+
+exit 0;
+
+
+#################### SUBROUTINES ####################
+
+sub _compose_preamble {
+ my ($file, $script) = @_;
+ my $preamble = <<END_C;
+/* ex: set ro:
+ * !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+ *
+ * This file is generated automatically from '$file' (and possibly other
+ * .ops files). by $script.
+ *
+ * Any changes made here will be lost!
+ *
+ */
- my $src = $op->source($trans);
- $src =~ s/\bop_lib\b/${bs}op_lib/g;
- $src =~ s/\bops_addr\b/${bs}ops_addr/g;
+END_C
+ return $preamble;
+}
+
+sub _print_coda {
+ my $fh = shift;
+ print $fh <<END_C;
+
+/*
+ * Local variables:
+ * c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */
+END_C
+}
- if ( $suffix =~ /cg/ ) {
+sub _iterate_over_ops {
+ my $argsref = shift;
+ my @op_funcs;
+ my @op_func_table;
+ my @cg_jump_table;
+ my $index = 0;
+ my ( $prev_src, $prev_index );
+
+ $prev_src = '';
+ foreach my $op ( $argsref->{ops}->ops ) {
+ my $func_name = $op->func_name($argsref->{trans});
+ my $arg_types = "$argsref->{opsarraytype} *, Interp *";
+ my $prototype = "$sym_export $argsref->{opsarraytype} * $func_name
($arg_types)";
+ my $args = "$argsref->{opsarraytype} *cur_opcode, Interp *interp";
+ my $definition;
+ my $comment = '';
+ my $one_op = "";
+
+ if ( $argsref->{suffix} =~ /cg/ ) {
+ $definition = "PC_$index:";
+ $comment = "/* " . $op->full_name() . " */";
+ }
+ elsif ( $argsref->{suffix} =~ /switch/ ) {
+ $definition = "case $index:";
+ $comment = "/* " . $op->full_name() . " */";
+ }
+ else {
+ $definition = "$prototype;\n$argsref->{opsarraytype} *\n$func_name
($args)";
+ }
+
+ my $src = $op->source($argsref->{trans});
+ $src =~ s/\bop_lib\b/$argsref->{bs}op_lib/g;
+ $src =~ s/\bops_addr\b/$argsref->{bs}ops_addr/g;
+
+ if ( $argsref->{suffix} =~ /cg/ ) {
+ if ( $prev_src eq $src ) {
+ push @cg_jump_table, " &&PC_$prev_index,\n";
+ }
+ else {
+ push @cg_jump_table, " &&PC_$index,\n";
+ }
+ }
+ elsif ( $argsref->{suffix} eq '' ) {
+ push @op_func_table, sprintf( " %-50s /* %6ld */\n",
"$func_name,", $index );
+ }
if ( $prev_src eq $src ) {
- push @cg_jump_table, " &&PC_$prev_index,\n";
+ push @op_funcs, "$comment\n";
}
else {
- push @cg_jump_table, " &&PC_$index,\n";
+ $one_op .= "$definition $comment {\n$src}\n\n";
+ push @op_funcs, $one_op;
+ $prev_src = $src if ( $argsref->{suffix} eq '_cgp' ||
$argsref->{suffix} eq '_switch' );
+ $prev_index = $index;
}
+ $index++;
}
- elsif ( $suffix eq '' ) {
- push @op_func_table, sprintf( " %-50s /* %6ld */\n", "$func_name,",
$index );
- }
- if ( $prev_src eq $src ) {
- push @op_funcs, "$comment\n";
- }
- else {
- $one_op .= "$definition $comment {\n$src}\n\n";
- push @op_funcs, $one_op;
- $prev_src = $src if ( $suffix eq '_cgp' || $suffix eq '_switch' );
- $prev_index = $index;
- }
- $index++;
+ return ($index, [EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED]);
}
-if ( $suffix =~ /cg/ ) {
- print $SOURCE @cg_jump_table;
- print $SOURCE <<END_C;
+sub _print_cg_jump_table {
+ my $argsref = shift;
+ my $fh = $argsref->{source};
+ my @cg_jump_table = @{$argsref->{cg_jump_table}};
+
+ if ( $argsref->{suffix} =~ /cg/ ) {
+ print $fh @cg_jump_table;
+ print $fh <<END_C;
NULL
};
END_C
- print $SOURCE $trans->run_core_after_addr_table($bs);
+ print $fh $argsref->{trans}->run_core_after_addr_table($argsref->{bs});
+ }
}
-if ( $suffix =~ /cgp/ ) {
- print $SOURCE <<END_C;
+sub _print_goto_opcode {
+ my $argsref = shift;
+ my $fh = $argsref->{source};
+
+ if ( $argsref->{suffix} =~ /cgp/ ) {
+ print $fh <<END_C;
#ifdef __GNUC__
# ifdef I386
else if (cur_opcode == (void **) 1)
@@ -263,136 +423,151 @@
goto **cur_opcode;
END_C
-}
-elsif ( $suffix =~ /cg/ ) {
- print $SOURCE <<END_C;
-goto *${bs}ops_addr[*cur_opcode];
+ }
+ elsif ( $argsref->{suffix} =~ /cg/ ) {
+ print $fh <<END_C;
+goto *$argsref->{bs}ops_addr[*cur_opcode];
END_C
+ }
+ return 1;
}
-print $SOURCE <<END_C;
+sub _print_op_function_definitions {
+ my $argsref = shift;
+ my $fh = $argsref->{source};
+ my @op_funcs = @{$argsref->{op_funcs}};
+ print $fh <<END_C;
/*
** Op Function Definitions:
*/
END_C
-#
-# Finish the SOURCE file's array initializer:
-#
-my $CORE_SPLIT = 300;
-for ( my $i = 0 ; $i < @op_funcs ; $i++ ) {
- if ( $i && $i % $CORE_SPLIT == 0 && $trans->can("run_core_split") ) {
- print $SOURCE $trans->run_core_split($base);
+ # Finish the SOURCE file's array initializer:
+ my $CORE_SPLIT = 300;
+ for ( my $i = 0 ; $i < @op_funcs ; $i++ ) {
+ if ( $i &&
+ $i % $CORE_SPLIT == 0 &&
+ $argsref->{trans}->can("run_core_split") )
+ {
+ print $fh $argsref->{trans}->run_core_split($argsref->{base});
+ }
+ print $fh $op_funcs[$i];
}
- print $SOURCE $op_funcs[$i];
-}
-
-if ( $trans->can("run_core_finish") ) {
- print $SOURCE $trans->run_core_finish($base);
+
+ if ( $trans->can("run_core_finish") ) {
+ print $fh $trans->run_core_finish($base);
+ }
+ close($fh) || die "Unable to close after writing: $!";
}
-#
-# reset #line in the SOURCE file.
-#
-
-close($SOURCE);
-open( $SOURCE, '<', $source ) || die "Error re-reading $source: $!\n";
-my $line = 0;
-while (<$SOURCE>) { $line++; }
-$line += 2;
-close($SOURCE);
-open( $SOURCE, '>>', $source ) || die "Error appending to $source: $!\n";
-unless ($flagref->{nolines}) {
- my $source_escaped = $source;
- $source_escaped =~ s|\.temp||;
- $source_escaped =~ s|(\\)|$1$1|g; # escape backslashes
- print $SOURCE qq{#line $line "$source_escaped"\n};
+sub _reset_line_number {
+ my $argsref = shift;
+ my $fh = $argsref->{source};
+ my $source = $argsref->{sourcefile};
+ my $line = 0;
+ open( $fh, '<', $source ) || die "Error re-reading $source: $!\n";
+ while (<$fh>) { $line++; }
+ $line += 2;
+ close($fh) || die "Error closing $source: $!";
+ open( $fh, '>>', $source ) || die "Error appending to $source: $!\n";
+ unless ($flagref->{nolines}) {
+ my $source_escaped = $source;
+ $source_escaped =~ s|\.temp||;
+ $source_escaped =~ s|(\\)|$1$1|g; # escape backslashes
+ print $fh qq{#line $line "$source_escaped"\n};
+ }
+ return $fh; # filehandle remains open
}
-#
-# write op_func_func
-#
-
-my ( $op_info, $op_func, $getop );
-$op_info = $op_func = 'NULL';
-$getop = '( int (*)(const char *, int) )NULL';
-
-if ( $suffix eq '' ) {
- $op_func = "${bs}op_func_table";
- print $SOURCE <<END_C;
+sub _op_func_table {
+ my $argsref = shift;
+ my $fh = $argsref->{source};
+ my ( $op_info, $op_func, $getop );
+ $op_info = $op_func = 'NULL';
+ $getop = '( int (*)(const char *, int) )NULL';
+
+ if ( $argsref->{suffix} eq '' ) {
+ $op_func = $argsref->{bs} . q{op_func_table};
+ print $fh <<END_C;
-INTVAL ${bs}numops${suffix} = $num_ops;
+INTVAL $argsref->{bs}numops$argsref->{suffix} = $argsref->{num_ops};
/*
** Op Function Table:
*/
-static op_func${suffix}_t ${op_func}\[$num_entries] = {
+static op_func$argsref->{suffix}_t ${op_func}\[$argsref->{num_entries}] = {
END_C
- print $SOURCE @op_func_table;
+ print $fh @{$argsref->{op_func_table}};
- print $SOURCE <<END_C;
- (op_func${suffix}_t)0 /* NULL function pointer */
+ print $fh <<END_C;
+ (op_func$argsref->{suffix}_t)0 /* NULL function pointer */
};
END_C
+ }
+ return ($op_info, $op_func, $getop);
}
-my ( %names, $tot );
-if ( $suffix eq '' ) {
- $op_info = "${bs}op_info_table";
-
- #
- # Op Info Table:
- #
- print $SOURCE <<END_C;
+sub _op_info_table {
+ my $argsref = shift;
+ my $fh = $argsref->{source};
+ my %names = %{$argsref->{names}};
+
+ if ( $argsref->{suffix} eq '' ) {
+ $argsref->{op_info} = "$argsref->{bs}op_info_table";
+
+ #
+ # Op Info Table:
+ #
+ print $fh <<END_C;
/*
** Op Info Table:
*/
-static op_info_t $op_info\[$num_entries] = {
+static op_info_t $argsref->{op_info}\[$argsref->{num_entries}] = {
END_C
- $index = 0;
-
- foreach my $op ( $ops->ops ) {
- my $type = sprintf( "PARROT_%s_OP", uc $op->type );
- my $name = $op->name;
- $names{$name} = 1;
- my $full_name = $op->full_name;
- my $func_name = $op->func_name($trans);
- my $body = $op->body;
- my $jump = $op->jump || 0;
- my $arg_count = $op->size;
-
- ## 0 inserted if arrays are empty to prevent msvc compiler errors
- my $arg_types = "{ "
- . join( ", ",
- scalar $op->arg_types
- ? map { sprintf( "PARROT_ARG_%s", uc $_ ) } $op->arg_types
- : 0 )
- . " }";
- my $arg_dirs = "{ "
- . join(
- ", ", scalar $op->arg_dirs
- ? map { $arg_dir_mapping{$_} } $op->arg_dirs
- : 0
- ) . " }";
- my $labels = "{ "
- . join(
- ", ", scalar $op->labels
- ? $op->labels
- : 0
- ) . " }";
- my $flags = 0;
-
- print $SOURCE <<END_C;
- { /* $index */
+ $argsref->{index} = 0;
+
+ foreach my $op ( $argsref->{ops}->ops ) {
+ my $type = sprintf( "PARROT_%s_OP", uc $op->type );
+ my $name = $op->name;
+ $names{$name} = 1;
+ my $full_name = $op->full_name;
+ my $func_name = $op->func_name($trans);
+ my $body = $op->body;
+ my $jump = $op->jump || 0;
+ my $arg_count = $op->size;
+
+ ## 0 inserted if arrays are empty to prevent msvc compiler errors
+ my $arg_types = "{ "
+ . join( ", ",
+ scalar $op->arg_types
+ ? map { sprintf( "PARROT_ARG_%s", uc $_ ) } $op->arg_types
+ : 0 )
+ . " }";
+ my $arg_dirs = "{ "
+ . join(
+ ", ", scalar $op->arg_dirs
+ ? map { $arg_dir_mapping{$_} } $op->arg_dirs
+ : 0
+ ) . " }";
+ my $labels = "{ "
+ . join(
+ ", ", scalar $op->labels
+ ? $op->labels
+ : 0
+ ) . " }";
+ my $flags = 0;
+
+ print $fh <<END_C;
+ { /* $argsref->{index} */
/* type $type, */
"$name",
"$full_name",
@@ -407,29 +582,35 @@
},
END_C
- $index++;
- }
- print $SOURCE <<END_C;
+ $argsref->{index}++;
+ }
+ print $fh <<END_C;
};
END_C
+ }
+ return (\%names, $argsref->{op_info}, $argsref->{index});
}
-if ( $suffix eq '' && !$flagref->{dynamic} ) {
- $getop = 'get_op';
- my $hash_size = 3041;
- $tot = $index + scalar keys(%names);
- if ( $hash_size < $tot * 1.2 ) {
- print STDERR "please increase hash_size ($hash_size) in
tools/build/ops2c.pl "
- . "to a prime number > ", $tot * 1.2, "\n";
- }
- print $SOURCE <<END_C;
+sub _op_lookup {
+ my $argsref = shift;
+ my $fh = $argsref->{source};
+
+ if ( $argsref->{suffix} eq '' && !$argsref->{flag}->{dynamic} ) {
+ $argsref->{getop} = 'get_op';
+ my $hash_size = 3041;
+ my $tot = $argsref->{index} + scalar keys(%{$argsref->{names}});
+ if ( $hash_size < $tot * 1.2 ) {
+ print STDERR "please increase hash_size ($hash_size) in
tools/build/ops2c.pl "
+ . "to a prime number > ", $tot * 1.2, "\n";
+ }
+ print $fh <<END_C;
/*
** Op lookup function:
*/
-#define NUM_OPS $num_ops
+#define NUM_OPS $argsref->{num_ops}
#define OP_HASH_SIZE $hash_size
@@ -495,18 +676,18 @@
}
for (p = hop[hidx]; p; p = p->next) {
if(!strcmp(name, full ? p->info->full_name : p->info->name))
- return p->info - ${bs}op_lib.op_info_table;
+ return p->info - $argsref->{bs}op_lib.op_info_table;
}
return -1;
}
static void hop_init() {
size_t i;
- op_info_t * info = ${bs}op_lib.op_info_table;
+ op_info_t * info = $argsref->{bs}op_lib.op_info_table;
/* store full names */
- for (i = 0; i < ${bs}op_lib.op_count; i++)
+ for (i = 0; i < $argsref->{bs}op_lib.op_count; i++)
store_op(info + i, 1);
/* plus one short name */
- for (i = 0; i < ${bs}op_lib.op_count; i++)
+ for (i = 0; i < $argsref->{bs}op_lib.op_count; i++)
if (get_op(info[i].name, 0) == -1)
store_op(info + i, 0);
}
@@ -527,54 +708,64 @@
}
END_C
-
-}
-else {
- print $SOURCE <<END_C;
+ return $argsref->{getop};
+ } else {
+ print $fh <<END_C;
static void hop_deinit(void) {}
END_C
+ return $argsref->{getop};
+ }
}
-print $SOURCE <<END_C;
+sub _print_op_lib_descriptor {
+ my $argsref = shift;
+ my $fh = $argsref->{source};
+ my $trans = $argsref->{trans};
+ my $core_type = $trans->core_type();
+ print $fh <<END_C;
/*
** op lib descriptor:
*/
-static op_lib_t ${bs}op_lib = {
- "$base", /* name */
- "$suffix", /* suffix */
- $core_type, /* core_type = PARROT_XX_CORE */
- 0, /* flags */
- $major_version, /* major_version */
- $minor_version, /* minor_version */
- $patch_version, /* patch_version */
- $num_ops, /* op_count */
- $op_info, /* op_info_table */
- $op_func, /* op_func_table */
- $getop /* op_code() */
+static op_lib_t $argsref->{bs}op_lib = {
+ "$argsref->{base}", /* name */
+ "$argsref->{suffix}", /* suffix */
+ $core_type, /* core_type = PARROT_XX_CORE */
+ 0, /* flags */
+ $argsref->{versions}->{major}, /* major_version */
+ $argsref->{versions}->{minor}, /* minor_version */
+ $argsref->{versions}->{patch}, /* patch_version */
+ $argsref->{num_ops}, /* op_count */
+ $argsref->{op_info}, /* op_info_table */
+ $argsref->{op_func}, /* op_func_table */
+ $argsref->{getop} /* op_code() */
};
END_C
-
-# generate initfunc
-my $init1_code = "";
-if ( $trans->can("init_func_init1") ) {
- $init1_code = $trans->init_func_init1($base);
-}
-
-my $init_set_dispatch = "";
-if ( $trans->can("init_set_dispatch") ) {
- $init_set_dispatch = $trans->init_set_dispatch($bs);
}
-print $SOURCE <<END_C;
+sub _generate_init_func {
+ my $argsref = shift;
+ my $fh = $argsref->{source};
+ my $init1_code = "";
+ if ( $argsref->{trans}->can("init_func_init1") ) {
+ $init1_code = $argsref->{trans}->init_func_init1($argsref->{base});
+ }
+
+ my $init_set_dispatch = "";
+ if ( $argsref->{trans}->can("init_set_dispatch") ) {
+ $init_set_dispatch
+ = $argsref->{trans}->init_set_dispatch($argsref->{bs});
+ }
+
+ print $fh <<END_C;
op_lib_t *
-$init_func(long init) {
+$argsref->{init_func}(long init) {
/* initialize and return op_lib ptr */
if (init == 1) {
$init1_code
- return &${bs}op_lib;
+ return &$argsref->{bs}op_lib;
}
/* set op_lib to the passed ptr (in init) */
else if (init) {
@@ -588,28 +779,7 @@
}
END_C
-
-_print_dynamic_lib_load( {
- flag => $flagref,
- base => $base,
- suffix => $suffix,
- source => $SOURCE,
- sym_export => $sym_export,
- init_func => $init_func,
-} );
-
-_print_coda($SOURCE);
-
-close $SOURCE or die "Unable to close handle to $source: $!";
-##### END printing to $SOURCE #####
-
-
-_rename_source($source);
-
-exit 0;
-
-
-#################### SUBROUTINES ####################
+}
sub _print_dynamic_lib_load {
my $argsref = shift;
@@ -639,36 +809,6 @@
}
}
-sub _compose_preamble {
- my ($file, $script) = @_;
- my $preamble = <<END_C;
-/* ex: set ro:
- * !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- *
- * This file is generated automatically from '$file' (and possibly other
- * .ops files). by $script.
- *
- * Any changes made here will be lost!
- *
- */
-
-END_C
- return $preamble;
-}
-
-sub _print_coda {
- my $fh = shift;
- print $fh <<END_C;
-
-/*
- * Local variables:
- * c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */
-END_C
-}
-
sub _rename_source {
my $source = shift;
my $final = $source;