package Iotta::Copp::CodeGen::IDs; use strict; require Iotta::Elem; our @ISA = ("Iotta::Elem"); my $ws = "[ \t\n]"; my $decls = { "M" => "static co_id_t __co_id_message_#ID#;\n", "P" => "static co_id_t __co_id_property_#ID#;\n", "E" => "static co_id_t __co_id_event_#ID#;\n", "X" => "static co_id_t __co_id_exception_#ID#;\n", "T" => "static co_id_t __co_id_type_#ID#;\n" }; my $defs = { "M" => "\tCOM (#ID#) = co_id_init (superd -> id_msg, \"#ID#\");\n", "P" => "\tCOP (#ID#) = co_id_init (superd -> id_prop, \"#ID#\");\n", "E" => "\tCOE (#ID#) = co_id_init (superd -> id_event, \"#ID#\");\n", "X" => "\tCOX_ID (#ID#) = co_id_init (superd -> id_exception, \"#ID#\");\n", "T" => "\tCOT (#ID#) = co_id_init (superd -> id_type, \"#ID#\");\n", }; sub generate { my $self = shift; my $templ = shift; my $lst = shift; my $o; for (@$lst) { /(.)(.*)/; my $T = $1; my $id = $2; my $l = $$templ{$T}; $l =~ s/#ID#/$id/g; #print STDERR "$l"; $o .= $l; } return $o; } sub run { my $self = shift; my $meta = shift; my $data = shift; $$meta{o_id_decls} = $self->generate ($decls, $$meta{idlist}); $$meta{o_id_defs} = $self->generate ($defs, $$meta{idlist}); $self->next->run ($meta, $data) if ($self->next); } 1;