| version 1.1, 2003/02/15 15:23:55 |
version 1.2, 2003/02/18 10:42:09 |
|
|
| |
|
| sub meth { |
sub meth { |
| my $in = shift; |
my $in = shift; |
| $_ = $in; |
$_ = $in; my %msg; my %fwd; my %tab; |
| my %msg; |
|
| my %fwd; |
|
| my %tab; |
|
| while (s/CO_METH_INI$ws*\((.*?),(.*?)(?:,(.*?)|)\)//) { |
while (s/CO_METH_INI$ws*\((.*?),(.*?)(?:,(.*?)|)\)//) { |
| my $o = $1; |
my $o = $1; |
| my $m = $2; |
my $m = $2; |
|
|
| $msg{$o} = "\tCO_MH_BEGIN;\n" unless ($msg{$o}); |
$msg{$o} = "\tCO_MH_BEGIN;\n" unless ($msg{$o}); |
| $msg{$o} .= "\tCO_MH_CASE (message, $m) {\n\t\treturn " |
$msg{$o} .= "\tCO_MH_CASE (message, $m) {\n\t\treturn " |
| ."${o}_$m (this, self, message, ap);\n\t}\n"; |
."${o}_$m (this, self, message, ap);\n\t}\n"; |
| $fwd{$o} .= "co_v ${o}_$m ($o this, co self, co_id_t message, va_list ap);\n"; |
$fwd{$o} .= "co_v ${o}_$m ($o this, co self, co_id_t message, va_list" |
| $tab{$o} .= "\t__my_id_add (COM ($m), \"$m\", ${o}_$m);\n"; |
." ap);\n"; |
| } |
$tab{$o} .= "\tco_meth_add (o -> __co_meth_ar, COM ($m)," |
| while (s/CO_ATTR$ws*\((.*?), (.*?), (.*?)\)//) { |
." (co_msg_h) ${o}_$m);\n"; |
| my $o = $1; |
} |
| my $t = $2; |
my $o; |
| my $m = $3; |
while (s/(CO_OBJECT|CO_ATTR)$ws*\((.*?)\)//) { |
| $o =~ s/^$ws+|$ws+$//g; |
my $match = $1; |
| $t =~ s/^$ws+|$ws+$//g; |
if ($match eq "CO_OBJECT") { |
| $m =~ s/^$ws+|$ws+$//g; |
$o = $2; |
| $msg{$o} = "\tCO_MH_BEGIN;\n" unless ($msg{$o}); |
} else { |
| $msg{$o} .= "\tCO_MH_CASE (message, $m) {\n\t\tCO_RETURN (${t}_p, " |
my ($t, $m) = split /,/, $2; |
| ."&(this -> $m));\n\t}\n"; |
#my $m = $2; |
| $fwd{$o} .= "co_v ${o}_$m (co this, co self, co_id_t message, va_list ap);\n"; |
$o =~ s/^$ws+|$ws+$//g; |
| |
$t =~ s/^$ws+|$ws+$//g; |
| |
$m =~ s/^$ws+|$ws+$//g; |
| |
$msg{$o} = "\tCO_MH_BEGIN;\n" unless ($msg{$o}); |
| |
$msg{$o} .= "\tCO_MH_CASE (message, $m) {\n\t\tCO_RETURN (${t}_p, " |
| |
."&(this -> $m));\n\t}\n"; |
| |
#$fwd{$o} .= "co_v ${o}_$m (co this, co self, co_id_t message, va_list" |
| |
# ." ap);\n"; |
| |
$tab{$o} .= "\tco_meth_add (o -> __co_meth_ar, COM ($m)," |
| |
." (co_msg_h) ${o}_$m);\n"; |
| |
$fwd{$o} .= "co_v ${o}_$m ($o this, co self, co_id_t message, va_list" |
| |
." ap)\n{\n\tCO_RETURN (${t}_p, &(this -> $m));\n}\n"; |
| |
} |
| } |
} |
| for (keys %msg) { |
for (keys %msg) { |
| print OUT "\n"; |
print OUT "\n"; |
| print OUT $fwd{$_}."\n"; |
print OUT $fwd{$_}."\n"; |
| print OUT "static co_v ${_}_msg (co __this, co self, co_id_t message, va_list ap) {\n"; |
print OUT "/* static co_v ${_}_msg (co __this, co self, co_id_t" |
| |
." message, va_list ap) {\n"; |
| print OUT "$_ this = __this;\n"; |
print OUT "$_ this = __this;\n"; |
| print OUT $msg{$_}; |
print OUT $msg{$_}; |
| if ($in =~ /CO_MSG_DEFAULT$ws*\($ws*$_$ws*,(.*?)\)/) { |
if ($in =~ /CO_MSG_DEFAULT$ws*\($ws*$_$ws*,(.*?)\)/) { |
|
|
| ."($1, self, message, ap);\n\t}\n"; |
."($1, self, message, ap);\n\t}\n"; |
| } |
} |
| print OUT "\tCO_RETURN (int, 0xBAD0);\n"; |
print OUT "\tCO_RETURN (int, 0xBAD0);\n"; |
| print OUT "}\n"; |
print OUT "} */\n"; |
| print OUT "\n/*static void init_obj_type (void) {\n"; |
print OUT "\nstatic void ${_}_meth_ar_init (co object) {\n"; |
| |
print OUT "\tco_o_head_full o = object;\n"; |
| |
print OUT "\to -> __co_meth_ar = co_meth_array_new ();\n"; |
| |
print OUT "\tco_meth_add (o -> __co_meth_ar, COM (has_method)," |
| |
." co_has_method);\n"; |
| print OUT $tab{$_}; |
print OUT $tab{$_}; |
| print OUT "}*/\n\n"; |
print OUT "}\n\n"; |
| } |
} |
| #return \%msg; |
#return \%msg; |
| } |
} |
|
|
| &append ($in, qr/\bCO_CNT$ws*\(.*?,.*?,.*?,(.*?)\)/, \@list, "M"); |
&append ($in, qr/\bCO_CNT$ws*\(.*?,.*?,.*?,(.*?)\)/, \@list, "M"); |
| &append ($in, qr/\bCO_M$ws*\(.*?,(.*?)[,)]/, \@list, "M"); |
&append ($in, qr/\bCO_M$ws*\(.*?,(.*?)[,)]/, \@list, "M"); |
| #&append ($in, qr/CO_ATTR$ws*\(.*?,(.*?)[,)]/, \@list, "M"); |
#&append ($in, qr/CO_ATTR$ws*\(.*?,(.*?)[,)]/, \@list, "M"); |
| &append ($in, qr/\bCO_ATTR$ws*\(.*?,.*?,(.*?)[,)]/, \@list, "M"); |
&append ($in, qr/\bCO_ATTR$ws*\(.*?,(.*?)[,)]/, \@list, "M"); |
| &append ($in, qr/\bCO_METH$ws*\(.*?,(.*?)[,)]/, \@list, "M"); |
&append ($in, qr/\bCO_METH$ws*\(.*?,(.*?)[,)]/, \@list, "M"); |
| &append ($in, qr/\bCO_METH$ws*\((.*?),/, \@list, "T"); |
&append ($in, qr/\bCO_METH$ws*\((.*?),/, \@list, "T"); |
| &append ($in, qr/\bCO_OBJECT$ws*\((.*?)\)/, \@list, "T"); |
&append ($in, qr/\bCO_OBJECT$ws*\((.*?)\)/, \@list, "T"); |
|
|
| &append ($in, qr/\bM$ws*\(.*?,(.*?)[,)]/, \@list, "M"); |
&append ($in, qr/\bM$ws*\(.*?,(.*?)[,)]/, \@list, "M"); |
| &append ($in, qr/\bE$ws*\(.*?,(.*?)[,)]/, \@list, "E"); |
&append ($in, qr/\bE$ws*\(.*?,(.*?)[,)]/, \@list, "E"); |
| } |
} |
| |
&addid (\@list, "Mhas_method"); # FIXME? |
| |
|
| print OUT "#include <co_object.h>\n"; |
print OUT "#include <co_object.h>\n"; |
| print OUT "#include <co_super.h>\n"; |
print OUT "#include <co_super.h>\n"; |