From 5a28ca7bf3250f951826aa0726e4487b88062abe Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 15 Nov 2003 07:49:03 +0000 Subject: 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) --- source4/build/pidl/idl.gram | 11 +++++++++-- source4/build/pidl/parser.pm | 4 +++- source4/build/pidl/util.pm | 5 +++++ 3 files changed, 17 insertions(+), 3 deletions(-) (limited to 'source4') 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 '(' element_list2 ');' {{ @@ -132,7 +133,13 @@ type : | identifier { $item[1] } | -text: /[\w\s.?-]*/ +text: /[\w\s\..?-]*/ + +anytext: call(s?) + {{ "$item[1][0]" }} + +call: expression '(' 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; -- cgit