#! perl my $class = shift; my $curclass = ""; my @member; for my $file (@ARGV) { open my $fh, "<:utf8", $file or die "$file: $!"; while (<$fh>) { while (/ACC_R([WO])\s*\((\S+)\)/g) { next unless $curclass eq $class; push @member, [$1, $2]; } while (/ACC_CLASS\s*\((\S+)\)/g) { $curclass = $1; } } } exit unless @member; print "SV *$member[0][1] ($class *self, SV *newval = 0)\n"; print "\tPROTOTYPE: \$;\$\n"; if (@member > 1) { print "\tALIAS:\n"; for (1 .. $#member) { print "\t\t$member[$_][1]\t= $_\n"; } } print "\tCODE:\n"; # read print "\tif (GIMME_V == G_VOID)\n", "\t RETVAL = &PL_sv_undef;\n", "\telse\n", "\t switch (ix)\n", "\t {\n", (map "\t case $_: RETVAL = to_sv (self->$member[$_][1]); break;\n", 0 .. $#member), "\t default: croak (\"member is write-only\");\n", "\t };\n"; # write print "\tif (newval)\n", "\t switch (ix)\n", "\t {\n", (map "\t case $_: sv_to (newval, self->$member[$_][1]); break;\n", grep $member[$_][0] eq "W", 0 .. $#member), "\t default: croak (\"member is read-only\");\n", "\t };\n"; print "\tOUTPUT: RETVAL\n";