summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2003-11-15 07:49:03 +0000
committerAndrew Tridgell <tridge@samba.org>2003-11-15 07:49:03 +0000
commit5a28ca7bf3250f951826aa0726e4487b88062abe (patch)
treee59602931956fa85755bb53241719aba6d71f4bd
parentba5a060136145abdfa4915fe0fecc4afe1180627 (diff)
downloadsamba-5a28ca7bf3250f951826aa0726e4487b88062abe.tar.gz
samba-5a28ca7bf3250f951826aa0726e4487b88062abe.tar.bz2
samba-5a28ca7bf3250f951826aa0726e4487b88062abe.zip
support a new value() attribute that allows us to auto-fill certain
elements. Used at the moment for string lengths. the regular expression isn't right, but it works for the case I need. Perl expert needed :) (This used to be commit c7ddd6b2aadeb3bbd2ad520a9e074866b434cbba)
-rw-r--r--source4/build/pidl/idl.gram11
-rw-r--r--source4/build/pidl/parser.pm4
-rw-r--r--source4/build/pidl/util.pm5
3 files changed, 17 insertions, 3 deletions
diff --git a/source4/build/pidl/idl.gram b/source4/build/pidl/idl.gram
index 956b3e9ff9..4605c4c712 100644
--- a/source4/build/pidl/idl.gram
+++ b/source4/build/pidl/idl.gram
@@ -107,11 +107,12 @@ property: 'unique'
| 'size_is' '(' expression ')' {{ "$item[1]" => "$item{expression}" }}
| 'length_is' '(' expression ')' {{ "$item[1]" => "$item{expression}" }}
| 'switch_is' '(' expression ')' {{ "$item[1]" => "$item{expression}" }}
+ | 'value' '(' anytext ')' {{ "$item[1]" => "$item{anytext}" }}
| 'switch_type' '(' type ')' {{ "$item[1]" => $item{type} }}
identifier: /[\w?]+/
-expression: /[\w?\/+*-]+/
+expression: /[\w.?\/+*-_]+/
function : type identifier '(' <commit> element_list2 ');'
{{
@@ -132,7 +133,13 @@ type :
| identifier { $item[1] }
| <error>
-text: /[\w\s.?-]*/
+text: /[\w\s\..?-]*/
+
+anytext: call(s?)
+ {{ "$item[1][0]" }}
+
+call: expression '(' <commit> expression ')'
+ {{ "$item[1]($item[4])" }}
constant: /-?\d+/
| '*'
diff --git a/source4/build/pidl/parser.pm b/source4/build/pidl/parser.pm
index ec747f33b5..d85a15eb00 100644
--- a/source4/build/pidl/parser.pm
+++ b/source4/build/pidl/parser.pm
@@ -168,7 +168,9 @@ sub ParseElementPushScalar($$$)
my($ndr_flags) = shift;
my $cprefix = util::c_push_prefix($e);
- if (defined $e->{VALUE}) {
+ if (my $value = util::has_property($e, "value")) {
+ $res .= "\tNDR_CHECK(ndr_push_$e->{TYPE}(ndr, $value));\n";
+ } elsif (defined $e->{VALUE}) {
$res .= "\tNDR_CHECK(ndr_push_$e->{TYPE}(ndr, $e->{VALUE}));\n";
} elsif (util::need_wire_pointer($e)) {
$res .= "\tNDR_CHECK(ndr_push_ptr(ndr, $var_prefix$e->{NAME}));\n";
diff --git a/source4/build/pidl/util.pm b/source4/build/pidl/util.pm
index 9e7b909109..341502e551 100644
--- a/source4/build/pidl/util.pm
+++ b/source4/build/pidl/util.pm
@@ -353,5 +353,10 @@ sub is_constant($)
return 0;
}
+sub dump($)
+{
+ print Dumper shift;
+}
+
1;