summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Hopf <mhopf@suse.de>2007-12-13 16:27:38 +0100
committerMatthias Hopf <mhopf@suse.de>2007-12-13 16:27:38 +0100
commit543a5c8c835913dd517d6dee63d2acf6fe300726 (patch)
tree9a2f27dfd96c94d723147a8b03d04a9f7f160df9
parent9d5f3d05b43f6180b4f86e9016141cd91f50c2bd (diff)
Evaluate expressions in array size definitions for data table dumper generator.
No unparsable lines any more. Hurray!
-rw-r--r--datastructs_factory.pl14
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;