r21222: Merge a couple of pidl fixes:
authorJelmer Vernooij <jelmer@samba.org>
Wed, 7 Feb 2007 19:03:19 +0000 (19:03 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:44:48 +0000 (14:44 -0500)
* Pidl will now warn when trying to use pointers as integers in expressions.
* "subcontext()" is now marked as deprecated. The alternatives,
  transmit_as() / represent_as() should be available soon.
* More tests.
* Remove some unused code in smbtorture.
(This used to be commit 37c0da541e3962164d5af3e3c9560803a733f3b7)

13 files changed:
source4/pidl/TODO
source4/pidl/expr.yp
source4/pidl/lib/Parse/Pidl/Expr.pm
source4/pidl/lib/Parse/Pidl/NDR.pm
source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
source4/pidl/lib/Parse/Pidl/Util.pm
source4/pidl/pidl
source4/pidl/ref_notes.txt [deleted file]
source4/pidl/tests/ndr_deprecations.pl [new file with mode: 0755]
source4/pidl/tests/ndr_represent.pl [changed mode: 0644->0755]
source4/pidl/tests/util.pl
source4/torture/smbtorture.c
source4/torture/torture.c

index 5b3610232c20c73691bcf16fe60b0563cbc70b21..7cf6a4209a4a61532fab61b8a469d62f90e9495e 100644 (file)
@@ -1,8 +1,6 @@
 - EJS output backend shouldn't use the NDR levels stuff but instead 
   as the "C levels" and NDR levels don't necessarily match.
 
-- warn about [out] attributes on pointers (midl/samba3 compatibility)
-
 - true multiple dimension array / strings in arrays support
 
 - compatibility mode for generating MIDL-readable data:
@@ -21,3 +19,5 @@
 - allow data structures outside of interfaces
 
 - mem_ctx in the interface rather than as struct ndr member.
+
+- real typelibs
index 6faef27588d3fefd67b7b0b261a413cedca4823a..a8074875ff90fad7c04c127e5c9227504b90be14 100644 (file)
@@ -21,9 +21,7 @@
 exp:        NUM
                |       TEXT                            { "\"$_[1]\"" }
                |       func
-               |       exp '.' VAR                     { "$_[1].$_[3]" }
-        |   VAR                 { $_[0]->_Lookup($_[1]) }
-        |   '*' exp %prec DEREF { $_[0]->_Dereference($_[2]); "*$_[2]" }
+               |   var
         |   '~' exp %prec INV   { "~$_[2]" }
         |   exp '+' exp         { "$_[1] + $_[3]" }
         |   exp '-' exp         { "$_[1] - $_[3]" }
@@ -41,7 +39,6 @@ exp:        NUM
         |   exp '||' exp        { "$_[1] || $_[3]" }
         |   exp '&&' exp        { "$_[1] && $_[3]" }
         |   exp '&' exp         { "$_[1] & $_[3]" }
-               |       exp '->' VAR            { $_[1]."->".$_[3] }
                |       exp '?' exp ':' exp { "$_[1]?$_[3]:$_[5]" }
                |       '~' exp                         { "~$_[1]" }
                |       '!' exp                         { "not $_[1]" }
@@ -52,9 +49,24 @@ exp:        NUM
         |   '(' exp ')'         { "($_[2])" }
 ;
 
+possible_pointer: 
+            VAR                 { $_[0]->_Lookup($_[1]) }
+        |   '*' possible_pointer %prec DEREF { $_[0]->_Dereference($_[2]); "*$_[2]" }
+               ;
+
+var:   possible_pointer        { $_[0]->_Use($_[1]) }
+               |       var '.' VAR                     { $_[0]->_Use("$_[1].$_[3]") }
+               |   '(' var ')'         { "($_[2])" }
+               |       var '->' VAR            { $_[0]->_Use("*$_[1]"); $_[1]."->".$_[3] }
+;
+
+
 func: VAR '(' opt_args ')' { "$_[1]($_[3])" };
 opt_args: { "" } | args;
-args: exp | exp ',' args { "$_[1], $_[3]" };
+exp_or_possible_pointer: exp | possible_pointer;
+args: exp_or_possible_pointer 
+    | exp_or_possible_pointer ',' args { "$_[1], $_[3]" }
+;
 
 %%
 
@@ -93,6 +105,15 @@ sub _Lexer {
     }
 }
 
+sub _Use($$)
+{
+       my ($self, $x) = @_;
+       if (defined($self->YYData->{USE})) {
+               return $self->YYData->{USE}->($x);
+       }
+       return $x;
+}
+
 sub _Lookup($$) 
 {
        my ($self, $x) = @_;
@@ -118,11 +139,12 @@ sub _Error($)
 }
 
 sub Run {
-    my($self, $data, $error, $lookup, $deref) = @_;
+    my($self, $data, $error, $lookup, $deref, $use) = @_;
     $self->YYData->{FULL_INPUT} = $data;
     $self->YYData->{INPUT} = $data;
     $self->YYData->{LOOKUP} = $lookup;
     $self->YYData->{DEREFERENCE} = $deref;
     $self->YYData->{ERROR} = $error;
+    $self->YYData->{USE} = $use;
     return $self->YYParse( yylex => \&_Lexer, yyerror => \&_Error);
 }
index 34c30b824fbbc1053d5e0b8559a7d60400ef92af..f64db508d6b8518e5abe01118dc6f17504295ac0 100644 (file)
@@ -38,7 +38,9 @@ sub new {
                },
                GOTOS => {
                        'exp' => 2,
-                       'func' => 11
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
        {#State 1
@@ -54,33 +56,33 @@ sub new {
                        'VAR' => 10
                },
                GOTOS => {
-                       'exp' => 12,
-                       'func' => 11
+                       'exp' => 14,
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
        {#State 2
                ACTIONS => {
-                       '' => 14,
-                       "-" => 13,
-                       "<" => 15,
-                       "+" => 16,
-                       "%" => 17,
-                       "==" => 18,
-                       "^" => 19,
-                       "*" => 20,
-                       ">>" => 21,
-                       "!=" => 22,
-                       "?" => 23,
-                       "&&" => 24,
-                       "||" => 25,
-                       "&" => 26,
-                       "/" => 27,
-                       "->" => 28,
-                       "|" => 29,
-                       "<<" => 31,
-                       "=>" => 30,
+                       '' => 16,
+                       "-" => 15,
+                       "<" => 17,
+                       "+" => 18,
+                       "%" => 19,
+                       "==" => 20,
+                       "^" => 21,
+                       "*" => 22,
+                       ">>" => 23,
+                       "!=" => 24,
+                       "?" => 25,
+                       "||" => 26,
+                       "&&" => 27,
+                       "&" => 28,
+                       "/" => 29,
+                       "|" => 30,
+                       "<<" => 32,
+                       "=>" => 31,
                        "<=" => 33,
-                       "." => 32,
                        ">" => 34
                }
        },
@@ -98,7 +100,9 @@ sub new {
                },
                GOTOS => {
                        'exp' => 35,
-                       'func' => 11
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
        {#State 4
@@ -115,7 +119,9 @@ sub new {
                },
                GOTOS => {
                        'exp' => 36,
-                       'func' => 11
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
        {#State 5
@@ -137,8 +143,10 @@ sub new {
                        'VAR' => 10
                },
                GOTOS => {
-                       'exp' => 37,
-                       'func' => 11
+                       'exp' => 38,
+                       'var' => 37,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
        {#State 8
@@ -154,46 +162,49 @@ sub new {
                        'VAR' => 10
                },
                GOTOS => {
-                       'exp' => 38,
-                       'func' => 11
+                       'exp' => 39,
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
        {#State 9
                ACTIONS => {
-                       "-" => 1,
-                       "~" => 3,
-                       "&" => 4,
-                       'TEXT' => 6,
-                       'NUM' => 5,
-                       "!" => 8,
-                       "(" => 7,
                        "*" => 9,
-                       'VAR' => 10
+                       'VAR' => 41
                },
                GOTOS => {
-                       'exp' => 39,
-                       'func' => 11
+                       'possible_pointer' => 40
                }
        },
        {#State 10
                ACTIONS => {
-                       "(" => 40
+                       "(" => 42
                },
-               DEFAULT => -5
+               DEFAULT => -30
        },
        {#State 11
-               DEFAULT => -3
+               ACTIONS => {
+                       "->" => 43,
+                       "." => 44
+               },
+               DEFAULT => -4
        },
        {#State 12
+               DEFAULT => -3
+       },
+       {#State 13
+               DEFAULT => -32
+       },
+       {#State 14
                ACTIONS => {
-                       "^" => 19,
-                       "=>" => 30,
-                       "." => 32,
+                       "^" => 21,
+                       "=>" => 31,
                        "<=" => 33
                },
-               DEFAULT => -29
+               DEFAULT => -26
        },
-       {#State 13
+       {#State 15
                ACTIONS => {
                        "-" => 1,
                        "~" => 3,
@@ -206,14 +217,16 @@ sub new {
                        'VAR' => 10
                },
                GOTOS => {
-                       'exp' => 41,
-                       'func' => 11
+                       'exp' => 45,
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
-       {#State 14
+       {#State 16
                DEFAULT => 0
        },
-       {#State 15
+       {#State 17
                ACTIONS => {
                        "-" => 1,
                        "~" => 3,
@@ -226,11 +239,13 @@ sub new {
                        'VAR' => 10
                },
                GOTOS => {
-                       'exp' => 42,
-                       'func' => 11
+                       'exp' => 46,
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
-       {#State 16
+       {#State 18
                ACTIONS => {
                        "-" => 1,
                        "~" => 3,
@@ -243,11 +258,13 @@ sub new {
                        'VAR' => 10
                },
                GOTOS => {
-                       'exp' => 43,
-                       'func' => 11
+                       'exp' => 47,
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
-       {#State 17
+       {#State 19
                ACTIONS => {
                        "-" => 1,
                        "~" => 3,
@@ -260,11 +277,13 @@ sub new {
                        'VAR' => 10
                },
                GOTOS => {
-                       'exp' => 44,
-                       'func' => 11
+                       'exp' => 48,
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
-       {#State 18
+       {#State 20
                ACTIONS => {
                        "-" => 1,
                        "~" => 3,
@@ -277,11 +296,13 @@ sub new {
                        'VAR' => 10
                },
                GOTOS => {
-                       'exp' => 45,
-                       'func' => 11
+                       'exp' => 49,
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
-       {#State 19
+       {#State 21
                ACTIONS => {
                        "-" => 1,
                        "~" => 3,
@@ -294,11 +315,13 @@ sub new {
                        'VAR' => 10
                },
                GOTOS => {
-                       'exp' => 46,
-                       'func' => 11
+                       'exp' => 50,
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
-       {#State 20
+       {#State 22
                ACTIONS => {
                        "-" => 1,
                        "~" => 3,
@@ -311,11 +334,13 @@ sub new {
                        'VAR' => 10
                },
                GOTOS => {
-                       'exp' => 47,
-                       'func' => 11
+                       'exp' => 51,
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
-       {#State 21
+       {#State 23
                ACTIONS => {
                        "-" => 1,
                        "~" => 3,
@@ -328,11 +353,13 @@ sub new {
                        'VAR' => 10
                },
                GOTOS => {
-                       'exp' => 48,
-                       'func' => 11
+                       'exp' => 52,
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
-       {#State 22
+       {#State 24
                ACTIONS => {
                        "-" => 1,
                        "~" => 3,
@@ -345,11 +372,13 @@ sub new {
                        'VAR' => 10
                },
                GOTOS => {
-                       'exp' => 49,
-                       'func' => 11
+                       'exp' => 53,
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
-       {#State 23
+       {#State 25
                ACTIONS => {
                        "-" => 1,
                        "~" => 3,
@@ -362,11 +391,13 @@ sub new {
                        'VAR' => 10
                },
                GOTOS => {
-                       'exp' => 50,
-                       'func' => 11
+                       'exp' => 54,
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
-       {#State 24
+       {#State 26
                ACTIONS => {
                        "-" => 1,
                        "~" => 3,
@@ -379,11 +410,13 @@ sub new {
                        'VAR' => 10
                },
                GOTOS => {
-                       'exp' => 51,
-                       'func' => 11
+                       'exp' => 55,
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
-       {#State 25
+       {#State 27
                ACTIONS => {
                        "-" => 1,
                        "~" => 3,
@@ -396,11 +429,13 @@ sub new {
                        'VAR' => 10
                },
                GOTOS => {
-                       'exp' => 52,
-                       'func' => 11
+                       'exp' => 56,
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
-       {#State 26
+       {#State 28
                ACTIONS => {
                        "-" => 1,
                        "~" => 3,
@@ -413,11 +448,13 @@ sub new {
                        'VAR' => 10
                },
                GOTOS => {
-                       'exp' => 53,
-                       'func' => 11
+                       'exp' => 57,
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
-       {#State 27
+       {#State 29
                ACTIONS => {
                        "-" => 1,
                        "~" => 3,
@@ -430,16 +467,13 @@ sub new {
                        'VAR' => 10
                },
                GOTOS => {
-                       'exp' => 54,
-                       'func' => 11
-               }
-       },
-       {#State 28
-               ACTIONS => {
-                       'VAR' => 55
+                       'exp' => 58,
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
-       {#State 29
+       {#State 30
                ACTIONS => {
                        "-" => 1,
                        "~" => 3,
@@ -452,11 +486,13 @@ sub new {
                        'VAR' => 10
                },
                GOTOS => {
-                       'exp' => 56,
-                       'func' => 11
+                       'exp' => 59,
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
-       {#State 30
+       {#State 31
                ACTIONS => {
                        "-" => 1,
                        "~" => 3,
@@ -469,11 +505,13 @@ sub new {
                        'VAR' => 10
                },
                GOTOS => {
-                       'exp' => 57,
-                       'func' => 11
+                       'exp' => 60,
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
-       {#State 31
+       {#State 32
                ACTIONS => {
                        "-" => 1,
                        "~" => 3,
@@ -486,13 +524,10 @@ sub new {
                        'VAR' => 10
                },
                GOTOS => {
-                       'exp' => 58,
-                       'func' => 11
-               }
-       },
-       {#State 32
-               ACTIONS => {
-                       'VAR' => 59
+                       'exp' => 61,
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
        {#State 33
@@ -508,8 +543,10 @@ sub new {
                        'VAR' => 10
                },
                GOTOS => {
-                       'exp' => 60,
-                       'func' => 11
+                       'exp' => 62,
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
        {#State 34
@@ -525,89 +562,91 @@ sub new {
                        'VAR' => 10
                },
                GOTOS => {
-                       'exp' => 61,
-                       'func' => 11
+                       'exp' => 63,
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
        {#State 35
                ACTIONS => {
-                       "^" => 19,
-                       "=>" => 30,
-                       "." => 32,
+                       "^" => 21,
+                       "=>" => 31,
                        "<=" => 33
                },
-               DEFAULT => -7
+               DEFAULT => -5
        },
        {#State 36
                ACTIONS => {
-                       "^" => 19,
-                       "=>" => 30,
-                       "." => 32,
+                       "^" => 21,
+                       "=>" => 31,
                        "<=" => 33
                },
-               DEFAULT => -30
+               DEFAULT => -27
        },
        {#State 37
                ACTIONS => {
-                       "-" => 13,
-                       "<" => 15,
-                       "+" => 16,
-                       "%" => 17,
-                       "==" => 18,
-                       "^" => 19,
-                       "*" => 20,
-                       ")" => 62,
-                       ">>" => 21,
-                       "!=" => 22,
-                       "?" => 23,
-                       "&&" => 24,
-                       "||" => 25,
-                       "&" => 26,
-                       "/" => 27,
-                       "->" => 28,
-                       "|" => 29,
-                       "=>" => 30,
-                       "<<" => 31,
-                       "." => 32,
-                       "<=" => 33,
-                       ">" => 34
-               }
+                       ")" => 64,
+                       "->" => 43,
+                       "." => 44
+               },
+               DEFAULT => -4
        },
        {#State 38
                ACTIONS => {
-                       "-" => 13,
-                       "<" => 15,
-                       "+" => 16,
-                       "%" => 17,
-                       "==" => 18,
-                       "^" => 19,
-                       "*" => 20,
-                       ">>" => 21,
-                       "!=" => 22,
-                       "?" => 23,
-                       "&&" => 24,
-                       "||" => 25,
-                       "&" => 26,
-                       "/" => 27,
-                       "|" => 29,
-                       "=>" => 30,
-                       "<<" => 31,
-                       "." => 32,
+                       "-" => 15,
+                       "<" => 17,
+                       "+" => 18,
+                       "%" => 19,
+                       "==" => 20,
+                       "^" => 21,
+                       "*" => 22,
+                       ")" => 65,
+                       ">>" => 23,
+                       "!=" => 24,
+                       "?" => 25,
+                       "&&" => 27,
+                       "||" => 26,
+                       "&" => 28,
+                       "/" => 29,
+                       "|" => 30,
+                       "=>" => 31,
+                       "<<" => 32,
                        "<=" => 33,
                        ">" => 34
-               },
-               DEFAULT => -27
+               }
        },
        {#State 39
                ACTIONS => {
-                       "^" => 19,
-                       "=>" => 30,
-                       "." => 32,
-                       "<=" => 33
+                       "-" => 15,
+                       "<" => 17,
+                       "+" => 18,
+                       "%" => 19,
+                       "==" => 20,
+                       "^" => 21,
+                       "*" => 22,
+                       ">>" => 23,
+                       "!=" => 24,
+                       "?" => 25,
+                       "&&" => 27,
+                       "||" => 26,
+                       "&" => 28,
+                       "/" => 29,
+                       "|" => 30,
+                       "=>" => 31,
+                       "<<" => 32,
+                       "<=" => 33,
+                       ">" => 34
                },
-               DEFAULT => -6
+               DEFAULT => -24
        },
        {#State 40
+               DEFAULT => -31
+       },
+       {#State 41
+               DEFAULT => -30
+       },
+       {#State 42
                ACTIONS => {
                        "-" => 1,
                        "~" => 3,
@@ -619,411 +658,410 @@ sub new {
                        "*" => 9,
                        'VAR' => 10
                },
-               DEFAULT => -34,
+               DEFAULT => -37,
                GOTOS => {
-                       'exp' => 64,
-                       'args' => 63,
-                       'func' => 11,
-                       'opt_args' => 65
+                       'exp' => 69,
+                       'var' => 11,
+                       'args' => 66,
+                       'func' => 12,
+                       'opt_args' => 70,
+                       'exp_or_possible_pointer' => 67,
+                       'possible_pointer' => 68
                }
        },
-       {#State 41
+       {#State 43
+               ACTIONS => {
+                       'VAR' => 71
+               }
+       },
+       {#State 44
                ACTIONS => {
-                       "<" => 15,
-                       "==" => 18,
-                       "^" => 19,
-                       ">>" => 21,
-                       "!=" => 22,
-                       "?" => 23,
-                       "&&" => 24,
-                       "||" => 25,
-                       "&" => 26,
-                       "|" => 29,
-                       "=>" => 30,
-                       "<<" => 31,
-                       "." => 32,
+                       'VAR' => 72
+               }
+       },
+       {#State 45
+               ACTIONS => {
+                       "<" => 17,
+                       "==" => 20,
+                       "^" => 21,
+                       ">>" => 23,
+                       "!=" => 24,
+                       "?" => 25,
+                       "&&" => 27,
+                       "||" => 26,
+                       "&" => 28,
+                       "|" => 30,
+                       "=>" => 31,
+                       "<<" => 32,
                        "<=" => 33,
                        ">" => 34
                },
-               DEFAULT => -9
+               DEFAULT => -7
        },
-       {#State 42
+       {#State 46
                ACTIONS => {
-                       "==" => 18,
-                       "^" => 19,
-                       "!=" => 22,
-                       "?" => 23,
-                       "&&" => 24,
-                       "||" => 25,
-                       "&" => 26,
-                       "|" => 29,
-                       "=>" => 30,
-                       "." => 32,
+                       "==" => 20,
+                       "^" => 21,
+                       "!=" => 24,
+                       "?" => 25,
+                       "&&" => 27,
+                       "||" => 26,
+                       "&" => 28,
+                       "|" => 30,
+                       "=>" => 31,
                        "<=" => 33
                },
-               DEFAULT => -12
+               DEFAULT => -10
        },
-       {#State 43
+       {#State 47
                ACTIONS => {
-                       "<" => 15,
-                       "==" => 18,
-                       "^" => 19,
-                       ">>" => 21,
-                       "!=" => 22,
-                       "?" => 23,
-                       "&&" => 24,
-                       "||" => 25,
-                       "&" => 26,
-                       "|" => 29,
-                       "=>" => 30,
-                       "<<" => 31,
-                       "." => 32,
+                       "<" => 17,
+                       "==" => 20,
+                       "^" => 21,
+                       ">>" => 23,
+                       "!=" => 24,
+                       "?" => 25,
+                       "&&" => 27,
+                       "||" => 26,
+                       "&" => 28,
+                       "|" => 30,
+                       "=>" => 31,
+                       "<<" => 32,
                        "<=" => 33,
                        ">" => 34
                },
-               DEFAULT => -8
+               DEFAULT => -6
        },
-       {#State 44
+       {#State 48
                ACTIONS => {
-                       "-" => 13,
-                       "<" => 15,
-                       "+" => 16,
-                       "==" => 18,
-                       "^" => 19,
-                       ">>" => 21,
-                       "!=" => 22,
-                       "?" => 23,
-                       "&&" => 24,
-                       "||" => 25,
-                       "&" => 26,
-                       "|" => 29,
-                       "=>" => 30,
-                       "<<" => 31,
-                       "." => 32,
+                       "-" => 15,
+                       "<" => 17,
+                       "+" => 18,
+                       "==" => 20,
+                       "^" => 21,
+                       ">>" => 23,
+                       "!=" => 24,
+                       "?" => 25,
+                       "&&" => 27,
+                       "||" => 26,
+                       "&" => 28,
+                       "|" => 30,
+                       "=>" => 31,
+                       "<<" => 32,
                        "<=" => 33,
                        ">" => 34
                },
-               DEFAULT => -11
+               DEFAULT => -9
        },
-       {#State 45
+       {#State 49
                ACTIONS => {
-                       "^" => 19,
-                       "?" => 23,
-                       "&&" => 24,
-                       "||" => 25,
-                       "&" => 26,
-                       "|" => 29,
-                       "=>" => 30,
-                       "." => 32,
+                       "^" => 21,
+                       "?" => 25,
+                       "&&" => 27,
+                       "||" => 26,
+                       "&" => 28,
+                       "|" => 30,
+                       "=>" => 31,
                        "<=" => 33
                },
-               DEFAULT => -15
+               DEFAULT => -13
        },
-       {#State 46
+       {#State 50
                ACTIONS => {
-                       "-" => 13,
-                       "<" => 15,
-                       "+" => 16,
-                       "%" => 17,
-                       "==" => 18,
-                       "^" => 19,
-                       "*" => 20,
-                       ">>" => 21,
-                       "!=" => 22,
-                       "?" => 23,
-                       "&&" => 24,
-                       "||" => 25,
-                       "&" => 26,
-                       "/" => 27,
-                       "->" => 28,
-                       "|" => 29,
-                       "=>" => 30,
-                       "<<" => 31,
-                       "." => 32,
+                       "-" => 15,
+                       "<" => 17,
+                       "+" => 18,
+                       "%" => 19,
+                       "==" => 20,
+                       "^" => 21,
+                       "*" => 22,
+                       ">>" => 23,
+                       "!=" => 24,
+                       "?" => 25,
+                       "&&" => 27,
+                       "||" => 26,
+                       "&" => 28,
+                       "/" => 29,
+                       "|" => 30,
+                       "=>" => 31,
+                       "<<" => 32,
                        "<=" => 33,
                        ">" => 34
                },
-               DEFAULT => -31
+               DEFAULT => -28
        },
-       {#State 47
+       {#State 51
                ACTIONS => {
-                       "-" => 13,
-                       "<" => 15,
-                       "+" => 16,
-                       "==" => 18,
-                       "^" => 19,
-                       ">>" => 21,
-                       "!=" => 22,
-                       "?" => 23,
-                       "&&" => 24,
-                       "||" => 25,
-                       "&" => 26,
-                       "|" => 29,
-                       "=>" => 30,
-                       "<<" => 31,
-                       "." => 32,
+                       "-" => 15,
+                       "<" => 17,
+                       "+" => 18,
+                       "==" => 20,
+                       "^" => 21,
+                       ">>" => 23,
+                       "!=" => 24,
+                       "?" => 25,
+                       "&&" => 27,
+                       "||" => 26,
+                       "&" => 28,
+                       "|" => 30,
+                       "=>" => 31,
+                       "<<" => 32,
                        "<=" => 33,
                        ">" => 34
                },
-               DEFAULT => -10
+               DEFAULT => -8
        },
-       {#State 48
+       {#State 52
                ACTIONS => {
-                       "<" => 15,
-                       "==" => 18,
-                       "^" => 19,
-                       "!=" => 22,
-                       "?" => 23,
-                       "&&" => 24,
-                       "||" => 25,
-                       "&" => 26,
-                       "|" => 29,
-                       "=>" => 30,
-                       "." => 32,
+                       "<" => 17,
+                       "==" => 20,
+                       "^" => 21,
+                       "!=" => 24,
+                       "?" => 25,
+                       "&&" => 27,
+                       "||" => 26,
+                       "&" => 28,
+                       "|" => 30,
+                       "=>" => 31,
                        "<=" => 33,
                        ">" => 34
                },
-               DEFAULT => -19
+               DEFAULT => -17
        },
-       {#State 49
+       {#State 53
                ACTIONS => {
-                       "^" => 19,
-                       "?" => 23,
-                       "&&" => 24,
-                       "||" => 25,
-                       "&" => 26,
-                       "|" => 29,
-                       "=>" => 30,
-                       "." => 32,
+                       "^" => 21,
+                       "?" => 25,
+                       "&&" => 27,
+                       "||" => 26,
+                       "&" => 28,
+                       "|" => 30,
+                       "=>" => 31,
                        "<=" => 33
                },
-               DEFAULT => -20
+               DEFAULT => -18
        },
-       {#State 50
+       {#State 54
                ACTIONS => {
-                       ":" => 66,
-                       "-" => 13,
-                       "<" => 15,
-                       "+" => 16,
-                       "%" => 17,
-                       "==" => 18,
-                       "^" => 19,
-                       "*" => 20,
-                       ">>" => 21,
-                       "!=" => 22,
-                       "?" => 23,
-                       "&&" => 24,
-                       "||" => 25,
-                       "&" => 26,
-                       "/" => 27,
-                       "->" => 28,
-                       "|" => 29,
-                       "=>" => 30,
-                       "<<" => 31,
-                       "." => 32,
+                       ":" => 73,
+                       "-" => 15,
+                       "<" => 17,
+                       "+" => 18,
+                       "%" => 19,
+                       "==" => 20,
+                       "^" => 21,
+                       "*" => 22,
+                       ">>" => 23,
+                       "!=" => 24,
+                       "?" => 25,
+                       "&&" => 27,
+                       "||" => 26,
+                       "&" => 28,
+                       "/" => 29,
+                       "|" => 30,
+                       "=>" => 31,
+                       "<<" => 32,
                        "<=" => 33,
                        ">" => 34
                }
        },
-       {#State 51
+       {#State 55
                ACTIONS => {
-                       "^" => 19,
-                       "?" => 23,
-                       "||" => 25,
-                       "=>" => 30,
-                       "." => 32,
+                       "^" => 21,
+                       "?" => 25,
+                       "=>" => 31,
                        "<=" => 33
                },
-               DEFAULT => -22
+               DEFAULT => -19
        },
-       {#State 52
+       {#State 56
                ACTIONS => {
-                       "^" => 19,
-                       "?" => 23,
-                       "=>" => 30,
-                       "." => 32,
+                       "^" => 21,
+                       "?" => 25,
+                       "||" => 26,
+                       "=>" => 31,
                        "<=" => 33
                },
-               DEFAULT => -21
+               DEFAULT => -20
        },
-       {#State 53
+       {#State 57
                ACTIONS => {
-                       "^" => 19,
-                       "?" => 23,
-                       "&&" => 24,
-                       "||" => 25,
-                       "|" => 29,
-                       "=>" => 30,
-                       "." => 32,
+                       "^" => 21,
+                       "?" => 25,
+                       "&&" => 27,
+                       "||" => 26,
+                       "|" => 30,
+                       "=>" => 31,
                        "<=" => 33
                },
-               DEFAULT => -23
+               DEFAULT => -21
        },
-       {#State 54
+       {#State 58
                ACTIONS => {
-                       "-" => 13,
-                       "<" => 15,
-                       "+" => 16,
-                       "==" => 18,
-                       "^" => 19,
-                       ">>" => 21,
-                       "!=" => 22,
-                       "?" => 23,
-                       "&&" => 24,
-                       "||" => 25,
-                       "&" => 26,
-                       "|" => 29,
-                       "=>" => 30,
-                       "<<" => 31,
-                       "." => 32,
+                       "-" => 15,
+                       "<" => 17,
+                       "+" => 18,
+                       "==" => 20,
+                       "^" => 21,
+                       ">>" => 23,
+                       "!=" => 24,
+                       "?" => 25,
+                       "&&" => 27,
+                       "||" => 26,
+                       "&" => 28,
+                       "|" => 30,
+                       "=>" => 31,
+                       "<<" => 32,
                        "<=" => 33,
                        ">" => 34
                },
-               DEFAULT => -28
-       },
-       {#State 55
-               DEFAULT => -24
+               DEFAULT => -25
        },
-       {#State 56
+       {#State 59
                ACTIONS => {
-                       "^" => 19,
-                       "?" => 23,
-                       "&&" => 24,
-                       "||" => 25,
-                       "=>" => 30,
-                       "." => 32,
+                       "^" => 21,
+                       "?" => 25,
+                       "&&" => 27,
+                       "||" => 26,
+                       "=>" => 31,
                        "<=" => 33
                },
-               DEFAULT => -14
+               DEFAULT => -12
        },
-       {#State 57
+       {#State 60
                ACTIONS => {
-                       "-" => 13,
-                       "<" => 15,
-                       "+" => 16,
-                       "%" => 17,
-                       "==" => 18,
-                       "^" => 19,
-                       "*" => 20,
-                       ">>" => 21,
-                       "!=" => 22,
-                       "?" => 23,
-                       "&&" => 24,
-                       "||" => 25,
-                       "&" => 26,
-                       "/" => 27,
-                       "->" => 28,
-                       "|" => 29,
-                       "=>" => 30,
-                       "<<" => 31,
-                       "." => 32,
+                       "-" => 15,
+                       "<" => 17,
+                       "+" => 18,
+                       "%" => 19,
+                       "==" => 20,
+                       "^" => 21,
+                       "*" => 22,
+                       ">>" => 23,
+                       "!=" => 24,
+                       "?" => 25,
+                       "&&" => 27,
+                       "||" => 26,
+                       "&" => 28,
+                       "/" => 29,
+                       "|" => 30,
+                       "=>" => 31,
+                       "<<" => 32,
                        "<=" => 33,
                        ">" => 34
                },
-               DEFAULT => -17
+               DEFAULT => -15
        },
-       {#State 58
+       {#State 61
                ACTIONS => {
-                       "<" => 15,
-                       "==" => 18,
-                       "^" => 19,
-                       "!=" => 22,
-                       "?" => 23,
-                       "&&" => 24,
-                       "||" => 25,
-                       "&" => 26,
-                       "|" => 29,
-                       "=>" => 30,
-                       "." => 32,
+                       "<" => 17,
+                       "==" => 20,
+                       "^" => 21,
+                       "!=" => 24,
+                       "?" => 25,
+                       "&&" => 27,
+                       "||" => 26,
+                       "&" => 28,
+                       "|" => 30,
+                       "=>" => 31,
                        "<=" => 33,
                        ">" => 34
                },
-               DEFAULT => -18
-       },
-       {#State 59
-               DEFAULT => -4
+               DEFAULT => -16
        },
-       {#State 60
+       {#State 62
                ACTIONS => {
-                       "-" => 13,
-                       "<" => 15,
-                       "+" => 16,
-                       "%" => 17,
-                       "==" => 18,
-                       "^" => 19,
-                       "*" => 20,
-                       ">>" => 21,
-                       "!=" => 22,
-                       "?" => 23,
-                       "&&" => 24,
-                       "||" => 25,
-                       "&" => 26,
-                       "/" => 27,
-                       "->" => 28,
-                       "|" => 29,
-                       "=>" => 30,
-                       "<<" => 31,
-                       "." => 32,
+                       "-" => 15,
+                       "<" => 17,
+                       "+" => 18,
+                       "%" => 19,
+                       "==" => 20,
+                       "^" => 21,
+                       "*" => 22,
+                       ">>" => 23,
+                       "!=" => 24,
+                       "?" => 25,
+                       "&&" => 27,
+                       "||" => 26,
+                       "&" => 28,
+                       "/" => 29,
+                       "|" => 30,
+                       "=>" => 31,
+                       "<<" => 32,
                        "<=" => 33,
                        ">" => 34
                },
-               DEFAULT => -16
+               DEFAULT => -14
        },
-       {#State 61
+       {#State 63
                ACTIONS => {
-                       "==" => 18,
-                       "^" => 19,
-                       "!=" => 22,
-                       "?" => 23,
-                       "&&" => 24,
-                       "||" => 25,
-                       "&" => 26,
-                       "|" => 29,
-                       "=>" => 30,
-                       "." => 32,
+                       "==" => 20,
+                       "^" => 21,
+                       "!=" => 24,
+                       "?" => 25,
+                       "&&" => 27,
+                       "||" => 26,
+                       "&" => 28,
+                       "|" => 30,
+                       "=>" => 31,
                        "<=" => 33
                },
-               DEFAULT => -13
+               DEFAULT => -11
        },
-       {#State 62
-               DEFAULT => -32
+       {#State 64
+               DEFAULT => -34
        },
-       {#State 63
-               DEFAULT => -35
+       {#State 65
+               DEFAULT => -29
        },
-       {#State 64
+       {#State 66
+               DEFAULT => -38
+       },
+       {#State 67
+               ACTIONS => {
+                       "," => 74
+               },
+               DEFAULT => -41
+       },
+       {#State 68
+               DEFAULT => -32
+       },
+       {#State 69
                ACTIONS => {
-                       "-" => 13,
-                       "<" => 15,
-                       "+" => 16,
-                       "%" => 17,
-                       "," => 67,
-                       "==" => 18,
-                       "^" => 19,
-                       "*" => 20,
-                       ">>" => 21,
-                       "!=" => 22,
-                       "?" => 23,
-                       "&&" => 24,
-                       "||" => 25,
-                       "&" => 26,
-                       "->" => 28,
-                       "/" => 27,
-                       "|" => 29,
-                       "=>" => 30,
-                       "<<" => 31,
-                       "." => 32,
+                       "-" => 15,
+                       "<" => 17,
+                       "+" => 18,
+                       "%" => 19,
+                       "==" => 20,
+                       "^" => 21,
+                       "*" => 22,
+                       ">>" => 23,
+                       "!=" => 24,
+                       "?" => 25,
+                       "&&" => 27,
+                       "||" => 26,
+                       "&" => 28,
+                       "/" => 29,
+                       "|" => 30,
+                       "=>" => 31,
+                       "<<" => 32,
                        "<=" => 33,
                        ">" => 34
                },
-               DEFAULT => -36
+               DEFAULT => -39
        },
-       {#State 65
+       {#State 70
                ACTIONS => {
-                       ")" => 68
+                       ")" => 75
                }
        },
-       {#State 66
+       {#State 71
+               DEFAULT => -35
+       },
+       {#State 72
+               DEFAULT => -33
+       },
+       {#State 73
                ACTIONS => {
                        "-" => 1,
                        "~" => 3,
@@ -1036,11 +1074,13 @@ sub new {
                        'VAR' => 10
                },
                GOTOS => {
-                       'exp' => 69,
-                       'func' => 11
+                       'exp' => 76,
+                       'var' => 11,
+                       'func' => 12,
+                       'possible_pointer' => 13
                }
        },
-       {#State 67
+       {#State 74
                ACTIONS => {
                        "-" => 1,
                        "~" => 3,
@@ -1053,25 +1093,27 @@ sub new {
                        'VAR' => 10
                },
                GOTOS => {
-                       'exp' => 64,
-                       'args' => 70,
-                       'func' => 11
+                       'exp' => 69,
+                       'var' => 11,
+                       'args' => 77,
+                       'func' => 12,
+                       'exp_or_possible_pointer' => 67,
+                       'possible_pointer' => 68
                }
        },
-       {#State 68
-               DEFAULT => -33
+       {#State 75
+               DEFAULT => -36
        },
-       {#State 69
+       {#State 76
                ACTIONS => {
-                       "^" => 19,
-                       "=>" => 30,
-                       "." => 32,
+                       "^" => 21,
+                       "=>" => 31,
                        "<=" => 33
                },
-               DEFAULT => -25
+               DEFAULT => -22
        },
-       {#State 70
-               DEFAULT => -37
+       {#State 77
+               DEFAULT => -42
        }
 ],
                                   yyrules  =>
@@ -1085,208 +1127,229 @@ sub new {
        [#Rule 2
                 'exp', 1,
 sub
-#line 22 "pidl/expr.yp"
+#line 22 "expr.yp"
 { "\"$_[1]\"" }
        ],
        [#Rule 3
                 'exp', 1, undef
        ],
        [#Rule 4
-                'exp', 3,
-sub
-#line 24 "pidl/expr.yp"
-{ "$_[1].$_[3]" }
+                'exp', 1, undef
        ],
        [#Rule 5
-                'exp', 1,
-sub
-#line 25 "pidl/expr.yp"
-{ $_[0]->_Lookup($_[1]) }
-       ],
-       [#Rule 6
-                'exp', 2,
-sub
-#line 26 "pidl/expr.yp"
-{ $_[0]->_Dereference($_[2]); "*$_[2]" }
-       ],
-       [#Rule 7
                 'exp', 2,
 sub
-#line 27 "pidl/expr.yp"
+#line 25 "expr.yp"
 { "~$_[2]" }
        ],
-       [#Rule 8
+       [#Rule 6
                 'exp', 3,
 sub
-#line 28 "pidl/expr.yp"
+#line 26 "expr.yp"
 { "$_[1] + $_[3]" }
        ],
-       [#Rule 9
+       [#Rule 7
                 'exp', 3,
 sub
-#line 29 "pidl/expr.yp"
+#line 27 "expr.yp"
 { "$_[1] - $_[3]" }
        ],
-       [#Rule 10
+       [#Rule 8
                 'exp', 3,
 sub
-#line 30 "pidl/expr.yp"
+#line 28 "expr.yp"
 { "$_[1] * $_[3]" }
        ],
-       [#Rule 11
+       [#Rule 9
                 'exp', 3,
 sub
-#line 31 "pidl/expr.yp"
+#line 29 "expr.yp"
 { "$_[1] % $_[3]" }
        ],
-       [#Rule 12
+       [#Rule 10
                 'exp', 3,
 sub
-#line 32 "pidl/expr.yp"
+#line 30 "expr.yp"
 { "$_[1] < $_[3]" }
        ],
-       [#Rule 13
+       [#Rule 11
                 'exp', 3,
 sub
-#line 33 "pidl/expr.yp"
+#line 31 "expr.yp"
 { "$_[1] > $_[3]" }
        ],
-       [#Rule 14
+       [#Rule 12
                 'exp', 3,
 sub
-#line 34 "pidl/expr.yp"
+#line 32 "expr.yp"
 { "$_[1] | $_[3]" }
        ],
-       [#Rule 15
+       [#Rule 13
                 'exp', 3,
 sub
-#line 35 "pidl/expr.yp"
+#line 33 "expr.yp"
 { "$_[1] == $_[3]" }
        ],
-       [#Rule 16
+       [#Rule 14
                 'exp', 3,
 sub
-#line 36 "pidl/expr.yp"
+#line 34 "expr.yp"
 { "$_[1] <= $_[3]" }
        ],
-       [#Rule 17
+       [#Rule 15
                 'exp', 3,
 sub
-#line 37 "pidl/expr.yp"
+#line 35 "expr.yp"
 { "$_[1] => $_[3]" }
        ],
-       [#Rule 18
+       [#Rule 16
                 'exp', 3,
 sub
-#line 38 "pidl/expr.yp"
+#line 36 "expr.yp"
 { "$_[1] << $_[3]" }
        ],
-       [#Rule 19
+       [#Rule 17
                 'exp', 3,
 sub
-#line 39 "pidl/expr.yp"
+#line 37 "expr.yp"
 { "$_[1] >> $_[3]" }
        ],
-       [#Rule 20
+       [#Rule 18
                 'exp', 3,
 sub
-#line 40 "pidl/expr.yp"
+#line 38 "expr.yp"
 { "$_[1] != $_[3]" }
        ],
-       [#Rule 21
+       [#Rule 19
                 'exp', 3,
 sub
-#line 41 "pidl/expr.yp"
+#line 39 "expr.yp"
 { "$_[1] || $_[3]" }
        ],
-       [#Rule 22
+       [#Rule 20
                 'exp', 3,
 sub
-#line 42 "pidl/expr.yp"
+#line 40 "expr.yp"
 { "$_[1] && $_[3]" }
        ],
-       [#Rule 23
+       [#Rule 21
                 'exp', 3,
 sub
-#line 43 "pidl/expr.yp"
+#line 41 "expr.yp"
 { "$_[1] & $_[3]" }
        ],
-       [#Rule 24
-                'exp', 3,
-sub
-#line 44 "pidl/expr.yp"
-{ $_[1]."->".$_[3] }
-       ],
-       [#Rule 25
+       [#Rule 22
                 'exp', 5,
 sub
-#line 45 "pidl/expr.yp"
+#line 42 "expr.yp"
 { "$_[1]?$_[3]:$_[5]" }
        ],
-       [#Rule 26
+       [#Rule 23
                 'exp', 2,
 sub
-#line 46 "pidl/expr.yp"
+#line 43 "expr.yp"
 { "~$_[1]" }
        ],
-       [#Rule 27
+       [#Rule 24
                 'exp', 2,
 sub
-#line 47 "pidl/expr.yp"
+#line 44 "expr.yp"
 { "not $_[1]" }
        ],
-       [#Rule 28
+       [#Rule 25
                 'exp', 3,
 sub
-#line 48 "pidl/expr.yp"
+#line 45 "expr.yp"
 { "$_[1] / $_[3]" }
        ],
-       [#Rule 29
+       [#Rule 26
                 'exp', 2,
 sub
-#line 49 "pidl/expr.yp"
+#line 46 "expr.yp"
 { "-$_[2]" }
        ],
-       [#Rule 30
+       [#Rule 27
                 'exp', 2,
 sub
-#line 50 "pidl/expr.yp"
+#line 47 "expr.yp"
 { "&$_[2]" }
        ],
-       [#Rule 31
+       [#Rule 28
                 'exp', 3,
 sub
-#line 51 "pidl/expr.yp"
+#line 48 "expr.yp"
 { "$_[1]^$_[3]" }
        ],
-       [#Rule 32
+       [#Rule 29
                 'exp', 3,
 sub
-#line 52 "pidl/expr.yp"
+#line 49 "expr.yp"
 { "($_[2])" }
+       ],
+       [#Rule 30
+                'possible_pointer', 1,
+sub
+#line 53 "expr.yp"
+{ $_[0]->_Lookup($_[1]) }
+       ],
+       [#Rule 31
+                'possible_pointer', 2,
+sub
+#line 54 "expr.yp"
+{ $_[0]->_Dereference($_[2]); "*$_[2]" }
+       ],
+       [#Rule 32
+                'var', 1,
+sub
+#line 57 "expr.yp"
+{ $_[0]->_Use($_[1]) }
        ],
        [#Rule 33
+                'var', 3,
+sub
+#line 58 "expr.yp"
+{ $_[0]->_Use("$_[1].$_[3]") }
+       ],
+       [#Rule 34
+                'var', 3,
+sub
+#line 59 "expr.yp"
+{ "($_[2])" }
+       ],
+       [#Rule 35
+                'var', 3,
+sub
+#line 60 "expr.yp"
+{ $_[0]->_Use("*$_[1]"); $_[1]."->".$_[3] }
+       ],
+       [#Rule 36
                 'func', 4,
 sub
-#line 55 "pidl/expr.yp"
+#line 64 "expr.yp"
 { "$_[1]($_[3])" }
        ],
-       [#Rule 34
+       [#Rule 37
                 'opt_args', 0,
 sub
-#line 56 "pidl/expr.yp"
+#line 65 "expr.yp"
 { "" }
        ],
-       [#Rule 35
+       [#Rule 38
                 'opt_args', 1, undef
        ],
-       [#Rule 36
+       [#Rule 39
+                'exp_or_possible_pointer', 1, undef
+       ],
+       [#Rule 40
+                'exp_or_possible_pointer', 1, undef
+       ],
+       [#Rule 41
                 'args', 1, undef
        ],
-       [#Rule 37
+       [#Rule 42
                 'args', 3,
 sub
-#line 57 "pidl/expr.yp"
+#line 68 "expr.yp"
 { "$_[1], $_[3]" }
        ]
 ],
@@ -1294,7 +1357,7 @@ sub
     bless($self,$class);
 }
 
-#line 59 "pidl/expr.yp"
+#line 71 "expr.yp"
 
 
 package Parse::Pidl::Expr;
@@ -1332,6 +1395,15 @@ sub _Lexer {
     }
 }
 
+sub _Use($$)
+{
+       my ($self, $x) = @_;
+       if (defined($self->YYData->{USE})) {
+               return $self->YYData->{USE}->($x);
+       }
+       return $x;
+}
+
 sub _Lookup($$) 
 {
        my ($self, $x) = @_;
@@ -1357,12 +1429,13 @@ sub _Error($)
 }
 
 sub Run {
-    my($self, $data, $error, $lookup, $deref) = @_;
+    my($self, $data, $error, $lookup, $deref, $use) = @_;
     $self->YYData->{FULL_INPUT} = $data;
     $self->YYData->{INPUT} = $data;
     $self->YYData->{LOOKUP} = $lookup;
     $self->YYData->{DEREFERENCE} = $deref;
     $self->YYData->{ERROR} = $error;
+    $self->YYData->{USE} = $use;
     return $self->YYParse( yylex => \&_Lexer, yyerror => \&_Error);
 }
 
index 462e577cdd69569e1be82282cadb5b6318455ce7..2ba8461e4ab69e6ba127ebd42fc3e9024dd882f1 100644 (file)
@@ -35,7 +35,7 @@ use vars qw($VERSION);
 $VERSION = '0.01';
 @ISA = qw(Exporter);
 @EXPORT = qw(GetPrevLevel GetNextLevel ContainsDeferred ContainsString);
-@EXPORT_OK = qw(GetElementLevelTable ParseElement);
+@EXPORT_OK = qw(GetElementLevelTable ParseElement ValidElement);
 
 use strict;
 use Parse::Pidl qw(warning fatal);
@@ -902,7 +902,6 @@ sub ValidElement($)
                }
        }
 
-
        if (has_property($e, "subcontext") and has_property($e, "represent_as")) {
                fatal($e, el_name($e) . " : subcontext() and represent_as() can not be used on the same element");
        }
@@ -919,6 +918,10 @@ sub ValidElement($)
                fatal($e, el_name($e) . " : represent_as() and value() can not be used on the same element");
        }
 
+       if (has_property($e, "subcontext")) {
+               warning($e, "subcontext() is deprecated. Use represent_as() or transmit_as() instead");
+       }
+
        if (defined (has_property($e, "subcontext_size")) and not defined(has_property($e, "subcontext"))) {
                fatal($e, el_name($e) . " : subcontext_size() on non-subcontext element");
        }
index a1bd3e1f968ae1a21a68ad48d2637ff28e5ed844..1e199ba62bb265bf68f4375709fae6645f7035c8 100644 (file)
@@ -304,6 +304,51 @@ sub ParseArrayPushHeader($$$$$)
        return $length;
 }
 
+sub check_fully_dereferenced($$)
+{
+       my ($element, $env) = @_;
+
+       return sub ($) {
+               my $origvar = shift;
+               my $check = 0;
+
+               # Figure out the number of pointers in $ptr
+               my $expandedvar = $origvar;
+               $expandedvar =~ s/^(\**)//;
+               my $ptr = $1;
+
+               my $var = undef;
+               foreach (keys %$env) {
+                       if ($env->{$_} eq $expandedvar) {
+                               $var = $_;
+                               last;
+                       }
+               }
+               
+               return($origvar) unless (defined($var));
+               my $e;
+               foreach (@{$element->{PARENT}->{ELEMENTS}}) {
+                       if ($_->{NAME} eq $var) {
+                               $e = $_;
+                               last;
+                       }
+               }
+
+               $e or die("Environment doesn't match siblings");
+
+               # See if pointer at pointer level $level
+               # needs to be checked.
+               my $nump = 0;
+               foreach (@{$e->{LEVELS}}) {
+                       if ($_->{TYPE} eq "POINTER") {
+                               $nump = $_->{POINTER_INDEX}+1;
+                       }
+               }
+               warning($element->{ORIGINAL}, "Got pointer for `$e->{NAME}', expected fully derefenced variable") if ($nump > length($ptr));
+               return ($origvar);
+       }
+}      
+
 sub check_null_pointer($$$$)
 {
        my ($element, $env, $print_fn, $return) = @_;
@@ -373,8 +418,8 @@ sub ParseArrayPullHeader($$$$$)
        } elsif ($l->{IS_ZERO_TERMINATED}) { # Noheader arrays
                $length = $size = "ndr_get_string_size($ndr, sizeof(*$var_name))";
        } else {
-               $length = $size = ParseExprExt($l->{SIZE_IS}, $env, $e, 
-                   check_null_pointer($e, $env, \&pidl, "return NT_STATUS_INVALID_PARAMETER_MIX;"));
+               $length = $size = ParseExprExt($l->{SIZE_IS}, $env, $e->{ORIGINAL}
+                   check_null_pointer($e, $env, \&pidl, "return NT_STATUS_INVALID_PARAMETER_MIX;"), check_fully_dereferenced($e, $env));
        }
 
        if ((!$l->{IS_SURROUNDING}) and $l->{IS_CONFORMANT}) {
@@ -397,7 +442,7 @@ sub ParseArrayPullHeader($$$$$)
        if ($l->{IS_CONFORMANT} and not $l->{IS_ZERO_TERMINATED}) {
                defer "if ($var_name) {";
                defer_indent;
-               my $size = ParseExprExt($l->{SIZE_IS}, $env, $e, check_null_pointer($e, $env, \&defer, "return NT_STATUS_INVALID_PARAMETER_MIX;"));
+               my $size = ParseExprExt($l->{SIZE_IS}, $env, $e->{ORIGINAL}, check_null_pointer($e, $env, \&defer, "return NT_STATUS_INVALID_PARAMETER_MIX;"), check_fully_dereferenced($e, $env));
                defer "NDR_CHECK(ndr_check_array_size(ndr, (void*)" . get_pointer_to($var_name) . ", $size));";
                defer_deindent;
                defer "}";
@@ -406,7 +451,7 @@ sub ParseArrayPullHeader($$$$$)
        if ($l->{IS_VARYING} and not $l->{IS_ZERO_TERMINATED}) {
                defer "if ($var_name) {";
                defer_indent;
-               my $length = ParseExprExt($l->{LENGTH_IS}, $env, $e, check_null_pointer($e, $env, \&defer, "return NT_STATUS_INVALID_PARAMETER_MIX;"));
+               my $length = ParseExprExt($l->{LENGTH_IS}, $env, $e->{ORIGINAL}, check_null_pointer($e, $env, \&defer, "return NT_STATUS_INVALID_PARAMETER_MIX;"), check_fully_dereferenced($e, $env));
                defer "NDR_CHECK(ndr_check_array_length(ndr, (void*)" . get_pointer_to($var_name) . ", $length));";
                defer_deindent;
                defer "}"
@@ -432,7 +477,7 @@ sub compression_clen($$$)
        my ($e, $l, $env) = @_;
        my ($alg, $clen, $dlen) = split(/ /, $l->{COMPRESSION});
 
-       return ParseExpr($clen, $env, $e);
+       return ParseExpr($clen, $env, $e->{ORIGINAL});
 }
 
 sub compression_dlen($$$)
@@ -440,7 +485,7 @@ sub compression_dlen($$$)
        my ($e,$l,$env) = @_;
        my ($alg, $clen, $dlen) = split(/ /, $l->{COMPRESSION});
 
-       return ParseExpr($dlen, $env, $e);
+       return ParseExpr($dlen, $env, $e->{ORIGINAL});
 }
 
 sub ParseCompressionPushStart($$$$)
@@ -501,7 +546,7 @@ sub ParseSubcontextPushStart($$$$)
 {
        my ($e,$l,$ndr,$env) = @_;
        my $subndr = "_ndr_$e->{NAME}";
-       my $subcontext_size = ParseExpr($l->{SUBCONTEXT_SIZE}, $env, $e);
+       my $subcontext_size = ParseExpr($l->{SUBCONTEXT_SIZE}, $env, $e->{ORIGINAL});
 
        pidl "{";
        indent;
@@ -519,7 +564,7 @@ sub ParseSubcontextPushEnd($$$$)
 {
        my ($e,$l,$ndr,$env) = @_;
        my $subndr = "_ndr_$e->{NAME}";
-       my $subcontext_size = ParseExpr($l->{SUBCONTEXT_SIZE}, $env, $e);
+       my $subcontext_size = ParseExpr($l->{SUBCONTEXT_SIZE}, $env, $e->{ORIGINAL});
 
        if (defined $l->{COMPRESSION}) {
                ParseCompressionPushEnd($e, $l, $subndr, $env);
@@ -534,7 +579,7 @@ sub ParseSubcontextPullStart($$$$)
 {
        my ($e,$l,$ndr,$env) = @_;
        my $subndr = "_ndr_$e->{NAME}";
-       my $subcontext_size = ParseExpr($l->{SUBCONTEXT_SIZE}, $env, $e);
+       my $subcontext_size = ParseExpr($l->{SUBCONTEXT_SIZE}, $env, $e->{ORIGINAL});
 
        pidl "{";
        indent;
@@ -552,7 +597,7 @@ sub ParseSubcontextPullEnd($$$$)
 {
        my ($e,$l,$ndr,$env) = @_;
        my $subndr = "_ndr_$e->{NAME}";
-       my $subcontext_size = ParseExpr($l->{SUBCONTEXT_SIZE}, $env, $e);
+       my $subcontext_size = ParseExpr($l->{SUBCONTEXT_SIZE}, $env, $e->{ORIGINAL});
 
        if (defined $l->{COMPRESSION}) {
                ParseCompressionPullEnd($e, $l, $subndr, $env);
@@ -617,7 +662,7 @@ sub ParseElementPushLevel
                }
        } elsif ($l->{TYPE} eq "ARRAY" and not has_fast_array($e,$l) and
                not is_charset_array($e, $l)) {
-               my $length = ParseExpr($l->{LENGTH_IS}, $env, $e);
+               my $length = ParseExpr($l->{LENGTH_IS}, $env, $e->{ORIGINAL});
                my $counter = "cntr_$e->{NAME}_$l->{LEVEL_INDEX}";
 
                $var_name = $var_name . "[$counter]";
@@ -668,7 +713,7 @@ sub ParseElementPush($$$$$$)
        start_flags($e);
 
        if (my $value = has_property($e, "value")) {
-               $var_name = ParseExpr($value, $env, $e);
+               $var_name = ParseExpr($value, $env, $e->{ORIGINAL});
        }
 
        ParseElementPushLevel($e, $e->{LEVELS}[0], $ndr, $var_name, $env, $primitives, $deferred);
@@ -719,7 +764,7 @@ sub ParseElementPrint($$$)
        $var_name = append_prefix($e, $var_name);
 
        if (my $value = has_property($e, "value")) {
-               $var_name = "(ndr->flags & LIBNDR_PRINT_SET_VALUES)?" . ParseExpr($value,$env, $e) . ":$var_name";
+               $var_name = "(ndr->flags & LIBNDR_PRINT_SET_VALUES)?" . ParseExpr($value,$env, $e->{ORIGINAL}) . ":$var_name";
        }
 
        foreach my $l (@{$e->{LEVELS}}) {
@@ -741,8 +786,8 @@ sub ParseElementPrint($$$)
                        if ($l->{IS_ZERO_TERMINATED}) {
                                $length = "ndr_string_length($var_name, sizeof(*$var_name))";
                        } else {
-                               $length = ParseExprExt($l->{LENGTH_IS}, $env, $e, 
-                                                       check_null_pointer($e, $env, \&pidl, "return;"));
+                               $length = ParseExprExt($l->{LENGTH_IS}, $env, $e->{ORIGINAL}
+                                                       check_null_pointer($e, $env, \&pidl, "return;"), check_fully_dereferenced($e, $env));
                        }
 
                        if (is_charset_array($e,$l)) {
@@ -772,8 +817,8 @@ sub ParseElementPrint($$$)
                        }
                        pidl "ndr_print_$l->{DATA_TYPE}(ndr, \"$e->{NAME}\", $var_name);";
                } elsif ($l->{TYPE} eq "SWITCH") {
-                       my $switch_var = ParseExprExt($l->{SWITCH_IS}, $env, $e, 
-                                               check_null_pointer($e, $env, \&pidl, "return;"));
+                       my $switch_var = ParseExprExt($l->{SWITCH_IS}, $env, $e->{ORIGINAL}
+                                               check_null_pointer($e, $env, \&pidl, "return;"), check_fully_dereferenced($e, $env));
                        pidl "ndr_print_set_switch_value(ndr, " . get_pointer_to($var_name) . ", $switch_var);";
                } 
        }
@@ -803,8 +848,8 @@ sub ParseElementPrint($$$)
 sub ParseSwitchPull($$$$$$)
 {
        my($e,$l,$ndr,$var_name,$ndr_flags,$env) = @_;
-       my $switch_var = ParseExprExt($l->{SWITCH_IS}, $env, $e, 
-               check_null_pointer($e, $env, \&pidl, "return NT_STATUS_INVALID_PARAMETER_MIX;"));
+       my $switch_var = ParseExprExt($l->{SWITCH_IS}, $env, $e->{ORIGINAL}
+               check_null_pointer($e, $env, \&pidl, "return NT_STATUS_INVALID_PARAMETER_MIX;"), check_fully_dereferenced($e, $env));
 
        $var_name = get_pointer_to($var_name);
        pidl "NDR_CHECK(ndr_pull_set_switch_value($ndr, $var_name, $switch_var));";
@@ -815,8 +860,8 @@ sub ParseSwitchPull($$$$$$)
 sub ParseSwitchPush($$$$$$)
 {
        my($e,$l,$ndr,$var_name,$ndr_flags,$env) = @_;
-       my $switch_var = ParseExprExt($l->{SWITCH_IS}, $env, $e, 
-               check_null_pointer($e, $env, \&pidl, "return NT_STATUS_INVALID_PARAMETER_MIX;"));
+       my $switch_var = ParseExprExt($l->{SWITCH_IS}, $env, $e->{ORIGINAL}
+               check_null_pointer($e, $env, \&pidl, "return NT_STATUS_INVALID_PARAMETER_MIX;"), check_fully_dereferenced($e, $env));
 
        $var_name = get_pointer_to($var_name);
        pidl "NDR_CHECK(ndr_push_set_switch_value($ndr, $var_name, $switch_var));";
@@ -1012,7 +1057,7 @@ sub ParseElementPullLevel
                }
        } elsif ($l->{TYPE} eq "ARRAY" and 
                        not has_fast_array($e,$l) and not is_charset_array($e, $l)) {
-               my $length = ParseExpr($l->{LENGTH_IS}, $env, $e);
+               my $length = ParseExpr($l->{LENGTH_IS}, $env, $e->{ORIGINAL});
                my $counter = "cntr_$e->{NAME}_$l->{LEVEL_INDEX}";
                my $array_name = $var_name;
 
@@ -1181,7 +1226,7 @@ sub ParseStructPush($$)
                                        $size = "ndr_string_length(r->$e->{NAME}, sizeof(*r->$e->{NAME}))";
                                }
                        } else {
-                               $size = ParseExpr($e->{LEVELS}[0]->{SIZE_IS}, $env, $e);
+                               $size = ParseExpr($e->{LEVELS}[0]->{SIZE_IS}, $env, $e->{ORIGINAL});
                        }
 
                        pidl "NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, $size));";
@@ -2038,7 +2083,7 @@ sub AllocateArrayLevel($$$$$)
 {
        my ($e,$l,$ndr,$env,$size) = @_;
 
-       my $var = ParseExpr($e->{NAME}, $env, $e);
+       my $var = ParseExpr($e->{NAME}, $env, $e->{ORIGINAL});
 
        my $pl = GetPrevLevel($e, $l);
        if (defined($pl) and 
@@ -2118,7 +2163,8 @@ sub ParseFunctionPull($)
                        and   $e->{LEVELS}[1]->{IS_ZERO_TERMINATED});
 
                if ($e->{LEVELS}[1]->{TYPE} eq "ARRAY") {
-                       my $size = ParseExprExt($e->{LEVELS}[1]->{SIZE_IS}, $env, $e, check_null_pointer($e, $env, \&pidl, "return NT_STATUS_INVALID_PARAMETER_MIX;"));
+                       my $size = ParseExprExt($e->{LEVELS}[1]->{SIZE_IS}, $env, $e->{ORIGINAL}, check_null_pointer($e, $env, \&pidl, "return NT_STATUS_INVALID_PARAMETER_MIX;"), 
+                               check_fully_dereferenced($e, $env));
                        
                        pidl "NDR_PULL_ALLOC_N(ndr, r->out.$e->{NAME}, $size);";
 
index 3ca79b6c1c8c05e106911720accd62b5b77e9555..00185fbef76e8eb45b6e43493344ca9dae72f455 100644 (file)
@@ -101,12 +101,12 @@ sub ParseExpr($$$)
                          return($varlist->{$x}) if (defined($varlist->{$x})); 
                          return $x;
                  },
-               undef);
+               undef, undef);
 }
 
-sub ParseExprExt($$$$)
+sub ParseExprExt($$$$$)
 {
-       my($expr, $varlist, $e, $deref) = @_;
+       my($expr, $varlist, $e, $deref, $use) = @_;
 
        die("Undefined value in ParseExpr") if not defined($expr);
 
@@ -118,7 +118,7 @@ sub ParseExprExt($$$$)
                          return($varlist->{$x}) if (defined($varlist->{$x})); 
                          return $x;
                  },
-               $deref);
+               $deref, $use);
 }
 
 1;
index 2cc7143386d9877a3a3f7f4545d7a79aa13dcfba..0bd841a5ff78a59705bcc05d5c8df9cf695af6d3 100755 (executable)
@@ -4,7 +4,7 @@
 # package to parse IDL files and generate code for
 # rpc functions in Samba
 # Copyright tridge@samba.org 2000-2003
-# Copyright jelmer@samba.org 2005
+# Copyright jelmer@samba.org 2005-2007
 # released under the GNU GPL
 
 =pod
@@ -319,6 +319,9 @@ Specifies that a size of I<length>
 bytes should be read, followed by a blob of that size, 
 which will be parsed as NDR.
 
+subcontext() is deprecated now, and should not be used in new code. 
+Instead, use represent_as() or transmit_as().
+
 =item flag
 
 Specify boolean options, mostly used for 
diff --git a/source4/pidl/ref_notes.txt b/source4/pidl/ref_notes.txt
deleted file mode 100644 (file)
index 00f44fd..0000000
+++ /dev/null
@@ -1,220 +0,0 @@
-some experiments with ref ptrs
-
-
-
-       typedef struct {
-               short x;
-       } xstruct;
-
-       uint16 echo_TestRef([in] xstruct foo);
-
-       short v = 13;
-       xstruct r;
-       r.x = v;
-       echo_TestRef(r);
-
-       [0D 00]
-
-----------------------------------------------------
-       typedef struct {
-               short *x;
-       } xstruct;
-
-       uint16 echo_TestRef([in] xstruct foo);
-
-       short v = 13;
-       xstruct r;
-       r.x = &v;
-       echo_TestRef(r);
-
-       [PP PP PP PP 0D 00]
-
-
-       xstruct r;
-       r.x = NULL;
-       echo_TestRef(r);
-
-       [00 00 00 00]
-
-----------------------------------------------------
-       typedef struct {
-               [ref] short *x;
-       } xstruct;
-
-       uint16 echo_TestRef([in] xstruct foo);
-
-       short v = 13;
-       xstruct r;
-       r.x = &v;
-       echo_TestRef(r);
-
-       [XX XX XX XX 0D 00]
-
-
-       xstruct r;
-       r.x = NULL;
-       echo_TestRef(r);
-
-       [client runtime error 0x6f4]
-
-
-----------------------------------------------------
-       typedef struct {
-               short x;
-       } xstruct;
-
-       uint16 echo_TestRef([in] xstruct *foo);
-
-       short v = 13;
-       xstruct r;
-       r.x = v;
-       echo_TestRef(&r);
-
-       [0D 00]
-
-
-       echo_TestRef(NULL);
-
-       [client runtime error 0x6f4]
-
-----------------------------------------------------
-       typedef struct {
-               short x;
-       } xstruct;
-
-       uint16 echo_TestRef([in,ref] xstruct *foo);
-
-       short v = 13;
-       xstruct r;
-       r.x = v;
-       echo_TestRef(&r);
-
-       [0D 00]
-
-
-       echo_TestRef(NULL);
-
-       [client runtime error 0x6f4]
-
-
-----------------------------------------------------
-       typedef struct {
-               short x;
-       } xstruct;
-
-       uint16 echo_TestRef([in,unique] xstruct *foo);
-
-       short v = 13;
-       xstruct r;
-       r.x = v;
-       echo_TestRef(&r);
-
-       [PP PP PP PP 0D 00]
-
-
-       echo_TestRef(NULL);
-
-       [00 00 00 00]
-
-
-----------------------------------------------------
-       typedef struct {
-               short x;
-       } xstruct;
-
-       uint16 echo_TestRef([out] xstruct foo);
-
-        [idl compiler error]
-
-----------------------------------------------------
-       typedef struct {
-               short x;
-       } xstruct;
-
-       void echo_TestRef([out] xstruct *foo);
-
-       xstruct r;
-       echo_TestRef(&r);
-       r.x -> 13;
-
-       [0D 00]
-
-
-       echo_TestRef(NULL);
-
-       [client runtime error 0x6f4]
-
-----------------------------------------------------
-       typedef struct {
-               short x;
-       } xstruct;
-
-       void echo_TestRef([out,ref] xstruct *foo);
-
-       xstruct r;
-       echo_TestRef(&r);
-       r.x -> 13;
-
-       [0D 00]
-
-
-       echo_TestRef(NULL);
-
-       [client runtime error 0x6f4]
-
-----------------------------------------------------
-       typedef struct {
-               short x;
-       } xstruct;
-
-       void echo_TestRef([out,unique] xstruct *foo);
-
-        [idl compiler error]
-
-
-----------------------------------------------------
-       void echo_TestRef([in] short **foo);
-
-       short v = 13;
-       short *pv = &v;
-
-       echo_TestRef(&pv);
-
-       [PP PP PP PP 0D 00]
-
-
-       short *pv = NULL;
-
-       echo_TestRef(&pv);
-
-       [00 00 00 00]
-
-
-       echo_TestRef(NULL);
-       
-       [client runtime error 0x6f4]
-
-
-----------------------------------------------------
-       void echo_TestRef([in,ref] short **foo);
-
-       short v = 13;
-       short *pv = &v;
-
-       echo_TestRef(&pv);
-
-       [PP PP PP PP 0D 00]
-
-
-       short *pv = NULL;
-
-       echo_TestRef(&pv);
-
-       [00 00 00 00]
-
-
-       echo_TestRef(NULL);
-       
-       [client runtime error 0x6f4]
-
-
diff --git a/source4/pidl/tests/ndr_deprecations.pl b/source4/pidl/tests/ndr_deprecations.pl
new file mode 100755 (executable)
index 0000000..89738e4
--- /dev/null
@@ -0,0 +1,28 @@
+#!/usr/bin/perl
+# (C) 2007 Jelmer Vernooij <jelmer@samba.org>
+# Published under the GNU General Public License
+use strict;
+use warnings;
+
+use Test::More tests => 1;
+use FindBin qw($RealBin);
+use lib "$RealBin";
+use Util;
+use Parse::Pidl::Util qw(MyDumper);
+use Parse::Pidl::NDR qw(ValidElement);
+
+# Case 1
+
+my $e = {
+       'FILE' => 'foo.idl',
+       'NAME' => 'v',
+       'PROPERTIES' => {"subcontext" => 1},
+       'POINTERS' => 0,
+       'TYPE' => 'uint8',
+       'PARENT' => { TYPE => 'STRUCT' },
+       'LINE' => 42 };
+
+test_warnings("foo.idl:42: subcontext() is deprecated. Use represent_as() or transmit_as() instead\n", 
+       sub { ValidElement($e); });
+
+
old mode 100644 (file)
new mode 100755 (executable)
index 880ecba..52cd06f
@@ -3,7 +3,7 @@
 # (C) 2006 Jelmer Vernooij. Published under the GNU GPL
 use strict;
 
-use Test::More tests => 1 * 8;
+use Test::More tests => 2 * 8;
 use FindBin qw($RealBin);
 use lib "$RealBin";
 use Util qw(test_samba4_ndr);
@@ -40,3 +40,37 @@ NTSTATUS ndr_uint32_to_uint8(uint32_t from, uint8_t *to)
 }
 '
 );
+
+test_samba4_ndr('transmit_as-simple', 
+'
+       void bla([in,transmit_as(uint32)] uint8 x);
+',
+'
+       uint8_t expected[] = { 0x0D };
+       DATA_BLOB in_blob = { expected, 1 };
+       struct ndr_pull *ndr = ndr_pull_init_blob(&in_blob, NULL);
+       struct bla r;
+
+       if (NT_STATUS_IS_ERR(ndr_pull_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
+               return 1;
+
+       if (r.in.x != 13)
+               return 2;
+',
+'
+#include <libcli/util/nterr.h>
+
+NTSTATUS ndr_uint8_to_uint32(uint8_t from, uint32_t *to)
+{
+       *to = from;
+       return NT_STATUS_OK;
+}
+
+NTSTATUS ndr_uint32_to_uint8(uint32_t from, uint8_t *to)
+{
+       *to = from;
+       return NT_STATUS_OK;
+}
+'
+);
+
index 19cb90c08082fa450932caf7babfccd5c952f80c..ba2f7b7b493d1787a03f092893a8a3ec62a69234 100755 (executable)
@@ -4,10 +4,11 @@
 use strict;
 use warnings;
 
-use Test::More tests => 56;
+use Test::More tests => 70;
 use FindBin qw($RealBin);
 use lib "$RealBin";
 use Util;
+use Parse::Pidl qw(error);
 use Parse::Pidl::Util;
 
 # has_property()
@@ -89,3 +90,23 @@ is("b.a.a", ParseExpr("a.a.a", {"a" => "b"}, undef));
 
 test_errors("nofile:0: Parse error in `~' near `~'\n", sub {
        is(undef, ParseExpr("~", {}, {FILE => "nofile", LINE => 0})); });
+
+test_errors("nofile:0: Got pointer, expected integer\n", sub {
+               is(undef, ParseExprExt("foo", {}, {FILE => "nofile", LINE => 0},
+                                        undef, sub { my $x = shift; 
+                                                        error({FILE => "nofile", LINE => 0}, 
+                                                                        "Got pointer, expected integer");
+                                                        return undef; }))});
+
+is("b.a.a", ParseExpr("b.a.a", {"a" => "b"}, undef));
+is("((rr_type) == NBT_QTYPE_NETBIOS)", ParseExpr("((rr_type)==NBT_QTYPE_NETBIOS)", {}, undef));
+is("talloc_check_name", ParseExpr("talloc_check_name", {}, undef));
+is("talloc_check_name()", ParseExpr("talloc_check_name()", {}, undef));
+is("talloc_check_name(ndr)", ParseExpr("talloc_check_name(ndr)", {}, undef));
+is("talloc_check_name(ndr, 1)", ParseExpr("talloc_check_name(ndr,1)", {}, undef));
+is("talloc_check_name(ndr, \"struct ndr_push\")", ParseExpr("talloc_check_name(ndr,\"struct ndr_push\")", {}, undef));
+is("((rr_type) == NBT_QTYPE_NETBIOS) && talloc_check_name(ndr, \"struct ndr_push\")", ParseExpr("((rr_type)==NBT_QTYPE_NETBIOS)&&talloc_check_name(ndr,\"struct ndr_push\")", {}, undef));
+is("(rdata).data.length", ParseExpr("(rdata).data.length", {}, undef));
+is("((rdata).data.length == 2)", ParseExpr("((rdata).data.length==2)", {}, undef));
+is("((rdata).data.length == 2)?0:rr_type", ParseExpr("((rdata).data.length==2)?0:rr_type", {}, undef));
+is("((((rr_type) == NBT_QTYPE_NETBIOS) && talloc_check_name(ndr, \"struct ndr_push\") && ((rdata).data.length == 2))?0:rr_type)", ParseExpr("((((rr_type)==NBT_QTYPE_NETBIOS)&&talloc_check_name(ndr,\"struct ndr_push\")&&((rdata).data.length==2))?0:rr_type)", {}, undef));
index 79b00494caf67d9981ef44350a3c8b18169bca3f..cc4c3e6b5b553fb52bece2e953d427a0aa7a5020 100644 (file)
@@ -583,10 +583,8 @@ int main(int argc,char *argv[])
 
        if (strcmp(target, "samba3") == 0) {
                lp_set_cmdline("torture:samba3", "true");
-               lp_set_cmdline("torture:knownfail", "samba3-knownfail");
        } else if (strcmp(target, "samba4") == 0) {
                lp_set_cmdline("torture:samba4", "true");
-               lp_set_cmdline("torture:knownfail", "samba4-knownfail");
        }
 
        if (max_runtime) {
@@ -662,8 +660,7 @@ int main(int argc,char *argv[])
                exit(1);
        }
 
-       torture = torture_context_init(talloc_autofree_context(), 
-                               lp_parm_string(-1, "torture", "knownfail"), ui_ops);
+       torture = torture_context_init(talloc_autofree_context(), ui_ops);
 
        if (argc_new == 0) {
                printf("You must specify a test to run, or 'ALL'\n");
index df25fdce745d744f21569b106dc15c87ae1cf39f..e54efd72d0273505d288b5a2fcb2b025dacdf89b 100644 (file)
@@ -42,7 +42,6 @@ bool torture_register_suite(struct torture_suite *suite)
 }
 
 struct torture_context *torture_context_init(TALLOC_CTX *mem_ctx, 
-                                                                                        const char *known_failures_file, 
                                                                                         const struct torture_ui_ops *ui_ops)
 {
        struct torture_context *torture = talloc_zero(mem_ctx,