From 7adb6b2ee9cb955beed283d5636ac4c8c4d3b175 Mon Sep 17 00:00:00 2001 From: jj Date: Sat, 4 Jan 2014 15:04:56 +0100 Subject: [PATCH] ruby: codegen unit.caste_tg helper --- plugins/ruby/codegen.pl | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/plugins/ruby/codegen.pl b/plugins/ruby/codegen.pl index a4bebb7e6..f04731e3b 100755 --- a/plugins/ruby/codegen.pl +++ b/plugins/ruby/codegen.pl @@ -296,11 +296,32 @@ sub render_struct_field_refs { sub render_field_reftarget { my ($parent, $field, $name, $reftg) = @_; - my $aux = $field->getAttribute('aux-value'); - return if ($aux); # TODO - my $tg = $global_types{$reftg}; return if (!$tg); + + my $tgname = "${name}_tg"; + $tgname =~ s/_id(.?.?)_tg/_tg$1/; + + my $aux = $field->getAttribute('aux-value'); + if ($aux) { + # minimal support (aims is unit.caste_tg) + return if $aux !~ /^\$\$\.[^_][\w\.]+$/; + $aux =~ s/\$\$\.//; + + for my $codehelper ($tg->findnodes('child::code-helper')) { + if ($codehelper->getAttribute('name') eq 'find-instance') { + my $helper = $codehelper->textContent; + $helper =~ s/\$global/df/; + $helper =~ s/\$\$/$aux/; + $helper =~ s/\$/$name/; + if ($helper =~ /^[\w\.\[\]]+$/) { + push @lines_rb, "def $tgname ; $helper ; end"; + } + } + } + return; + } + my $tgvec = $tg->getAttribute('instance-vector'); return if (!$tgvec); my $idx = $tg->getAttribute('key-field'); @@ -308,9 +329,6 @@ sub render_field_reftarget { $tgvec =~ s/^\$global/df/; return if $tgvec !~ /^[\w\.]+$/; - my $tgname = "${name}_tg"; - $tgname =~ s/_id(.?.?)_tg/_tg$1/; - for my $othername (map { $_->getAttribute('name') } $parent->findnodes('child::ld:field')) { $tgname .= '_' if ($othername and $tgname eq $othername); }