diff options
author | Matthias Hopf <mhopf@suse.de> | 2007-12-13 16:27:38 +0100 |
---|---|---|
committer | Matthias Hopf <mhopf@suse.de> | 2007-12-13 16:27:38 +0100 |
commit | 543a5c8c835913dd517d6dee63d2acf6fe300726 (patch) | |
tree | 9a2f27dfd96c94d723147a8b03d04a9f7f160df9 | |
parent | 9d5f3d05b43f6180b4f86e9016141cd91f50c2bd (diff) |
Evaluate expressions in array size definitions for data table dumper generator.
No unparsable lines any more. Hurray!
-rw-r--r-- | datastructs_factory.pl | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/datastructs_factory.pl b/datastructs_factory.pl index b7ca8e9..70f689d 100644 --- a/datastructs_factory.pl +++ b/datastructs_factory.pl @@ -18,6 +18,7 @@ while (<>) { $t = $1; $tv= $t eq "union" ? "(union) " : ""; $s = $2; + print STDERR " $t $2\n"; print "int ${s}_dumper (uint8_t *start, uint8_t *data, int indent) {\n"; print " $s *d = ($s *) data;\n"; print " int i;\n"; @@ -28,6 +29,19 @@ while (<>) { s|\s*//.*||g; next if /^\s*\{\s*$/ || /^\s*$/; last if /\}/; + while (/\[([^\]]+)\]/g) { + $expr=$1; + if ($expr !~ /^\d+$/) { + print STDERR " Trying to evaluate $1...\n"; + $res = eval $expr; + if (! defined $res) { + print STDERR " $@\n"; + } else { + print STDERR " -> $res\n"; + s/\[[^\]]+\]/[$res]/; + } + } + } if (/^\s*(\w+)\s+(\w+)(\s*(:\d+))?(\s*\[(\d+)\])?\s*;/) { $e = $1; $n = $2; |