The branch, master has been updated
       via  558ff911df1e16e28e3a1efa0849c9083d08c617 (commit)
       via  20a6fb5cdb15b138021076e14c1df8f4ebb06184 (commit)
       via  bfa9624946a35e5645effbb20e02abba2c34a8c2 (commit)
       via  7d7a9210cddd291f86e313554c83affb73dfda52 (commit)
       via  cdfaaed9a87e27b1019cc119be4296f66a389c56 (commit)
       via  282375791297b83806d9d9ed6e47b5408e3da850 (commit)
      from  8e419aab48ace1fe0d075e2a25935e650805a23c (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 558ff911df1e16e28e3a1efa0849c9083d08c617
Author: Stefan Metzmacher <[email protected]>
Date:   Wed Aug 5 13:40:38 2009 +0200

    pidl: parse idl 'pipe' typedefs, but print out a not supported message for 
now
    
    metze

commit 20a6fb5cdb15b138021076e14c1df8f4ebb06184
Author: Stefan Metzmacher <[email protected]>
Date:   Tue Aug 4 15:00:13 2009 +0200

    pidl: fix formatting in expr.yp
    
    metze

commit bfa9624946a35e5645effbb20e02abba2c34a8c2
Author: Stefan Metzmacher <[email protected]>
Date:   Tue Aug 4 14:59:33 2009 +0200

    pidl: fix formatting in idl.yp
    
    metze

commit 7d7a9210cddd291f86e313554c83affb73dfda52
Author: Stefan Metzmacher <[email protected]>
Date:   Wed Aug 5 13:03:37 2009 +0200

    librpc: fix callers after epmapper.idl changes
    
    metze

commit cdfaaed9a87e27b1019cc119be4296f66a389c56
Author: Stefan Metzmacher <[email protected]>
Date:   Wed Aug 5 13:05:20 2009 +0200

    librpc: rerun 'make idl' after epmapper.idl changes
    
    metze

commit 282375791297b83806d9d9ed6e47b5408e3da850
Author: Stefan Metzmacher <[email protected]>
Date:   Wed Aug 5 13:04:59 2009 +0200

    epmapper.idl: avoid usage of 'pipe', this is a reserved word in IDL
    
    We now use 'named_pipe' instead.
    
    metze

-----------------------------------------------------------------------

Summary of changes:
 librpc/gen_ndr/epmapper.h     |    8 +-
 librpc/gen_ndr/ndr_epmapper.c |   26 +-
 librpc/gen_ndr/ndr_epmapper.h |    2 +-
 librpc/idl/epmapper.idl       |    8 +-
 librpc/rpc/binding.c          |   18 +-
 pidl/expr.yp                  |  202 +++--
 pidl/idl.yp                   |  708 +++++++++------
 pidl/lib/Parse/Pidl/Expr.pm   |  116 ++--
 pidl/lib/Parse/Pidl/IDL.pm    | 2137 +++++++++++++++++++++--------------------
 pidl/lib/Parse/Pidl/NDR.pm    |   20 +-
 10 files changed, 1785 insertions(+), 1460 deletions(-)


Changeset truncated at 500 lines:

diff --git a/librpc/gen_ndr/epmapper.h b/librpc/gen_ndr/epmapper.h
index ff80fbb..2030e1e 100644
--- a/librpc/gen_ndr/epmapper.h
+++ b/librpc/gen_ndr/epmapper.h
@@ -26,7 +26,7 @@ enum epm_protocol
        EPM_PROTOCOL_UUID=0x0d,
        EPM_PROTOCOL_IPX=0x0e,
        EPM_PROTOCOL_SMB=0x0f,
-       EPM_PROTOCOL_PIPE=0x10,
+       EPM_PROTOCOL_NAMED_PIPE=0x10,
        EPM_PROTOCOL_NETBIOS=0x11,
        EPM_PROTOCOL_NETBEUI=0x12,
        EPM_PROTOCOL_SPX=0x13,
@@ -55,7 +55,7 @@ enum epm_protocol
 #define EPM_PROTOCOL_UUID ( 0x0d )
 #define EPM_PROTOCOL_IPX ( 0x0e )
 #define EPM_PROTOCOL_SMB ( 0x0f )
-#define EPM_PROTOCOL_PIPE ( 0x10 )
+#define EPM_PROTOCOL_NAMED_PIPE ( 0x10 )
 #define EPM_PROTOCOL_NETBIOS ( 0x11 )
 #define EPM_PROTOCOL_NETBEUI ( 0x12 )
 #define EPM_PROTOCOL_SPX ( 0x13 )
@@ -116,7 +116,7 @@ struct epm_rhs_smb {
        const char * unc;/* 
[flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
 };
 
-struct epm_rhs_pipe {
+struct epm_rhs_named_pipe {
        const char * path;/* 
[flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
 };
 
@@ -189,7 +189,7 @@ union epm_rhs {
        struct epm_rhs_uuid uuid;/* [case(EPM_PROTOCOL_UUID)] */
        struct epm_rhs_ipx ipx;/* [case(EPM_PROTOCOL_IPX)] */
        struct epm_rhs_smb smb;/* [case(EPM_PROTOCOL_SMB)] */
-       struct epm_rhs_pipe pipe;/* [case(EPM_PROTOCOL_PIPE)] */
+       struct epm_rhs_named_pipe named_pipe;/* [case(EPM_PROTOCOL_NAMED_PIPE)] 
*/
        struct epm_rhs_netbios netbios;/* [case(EPM_PROTOCOL_NETBIOS)] */
        struct epm_rhs_netbeui netbeui;/* [case(EPM_PROTOCOL_NETBEUI)] */
        struct epm_rhs_spx spx;/* [case(EPM_PROTOCOL_SPX)] */
diff --git a/librpc/gen_ndr/ndr_epmapper.c b/librpc/gen_ndr/ndr_epmapper.c
index e39356f..7bcd8dd 100644
--- a/librpc/gen_ndr/ndr_epmapper.c
+++ b/librpc/gen_ndr/ndr_epmapper.c
@@ -35,7 +35,7 @@ _PUBLIC_ void ndr_print_epm_protocol(struct ndr_print *ndr, 
const char *name, en
                case EPM_PROTOCOL_UUID: val = "EPM_PROTOCOL_UUID"; break;
                case EPM_PROTOCOL_IPX: val = "EPM_PROTOCOL_IPX"; break;
                case EPM_PROTOCOL_SMB: val = "EPM_PROTOCOL_SMB"; break;
-               case EPM_PROTOCOL_PIPE: val = "EPM_PROTOCOL_PIPE"; break;
+               case EPM_PROTOCOL_NAMED_PIPE: val = "EPM_PROTOCOL_NAMED_PIPE"; 
break;
                case EPM_PROTOCOL_NETBIOS: val = "EPM_PROTOCOL_NETBIOS"; break;
                case EPM_PROTOCOL_NETBEUI: val = "EPM_PROTOCOL_NETBEUI"; break;
                case EPM_PROTOCOL_SPX: val = "EPM_PROTOCOL_SPX"; break;
@@ -391,7 +391,7 @@ _PUBLIC_ void ndr_print_epm_rhs_smb(struct ndr_print *ndr, 
const char *name, con
        ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_epm_rhs_pipe(struct ndr_push *ndr, int 
ndr_flags, const struct epm_rhs_pipe *r)
+static enum ndr_err_code ndr_push_epm_rhs_named_pipe(struct ndr_push *ndr, int 
ndr_flags, const struct epm_rhs_named_pipe *r)
 {
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_push_align(ndr, 4));
@@ -407,7 +407,7 @@ static enum ndr_err_code ndr_push_epm_rhs_pipe(struct 
ndr_push *ndr, int ndr_fla
        return NDR_ERR_SUCCESS;
 }
 
-static enum ndr_err_code ndr_pull_epm_rhs_pipe(struct ndr_pull *ndr, int 
ndr_flags, struct epm_rhs_pipe *r)
+static enum ndr_err_code ndr_pull_epm_rhs_named_pipe(struct ndr_pull *ndr, int 
ndr_flags, struct epm_rhs_named_pipe *r)
 {
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -423,9 +423,9 @@ static enum ndr_err_code ndr_pull_epm_rhs_pipe(struct 
ndr_pull *ndr, int ndr_fla
        return NDR_ERR_SUCCESS;
 }
 
-_PUBLIC_ void ndr_print_epm_rhs_pipe(struct ndr_print *ndr, const char *name, 
const struct epm_rhs_pipe *r)
+_PUBLIC_ void ndr_print_epm_rhs_named_pipe(struct ndr_print *ndr, const char 
*name, const struct epm_rhs_named_pipe *r)
 {
-       ndr_print_struct(ndr, name, "epm_rhs_pipe");
+       ndr_print_struct(ndr, name, "epm_rhs_named_pipe");
        ndr->depth++;
        ndr_print_string(ndr, "path", r->path);
        ndr->depth--;
@@ -916,8 +916,8 @@ static enum ndr_err_code ndr_push_epm_rhs(struct ndr_push 
*ndr, int ndr_flags, c
                                        NDR_CHECK(ndr_push_epm_rhs_smb(ndr, 
NDR_SCALARS, &r->smb));
                                break; }
 
-                               case EPM_PROTOCOL_PIPE: {
-                                       NDR_CHECK(ndr_push_epm_rhs_pipe(ndr, 
NDR_SCALARS, &r->pipe));
+                               case EPM_PROTOCOL_NAMED_PIPE: {
+                                       
NDR_CHECK(ndr_push_epm_rhs_named_pipe(ndr, NDR_SCALARS, &r->named_pipe));
                                break; }
 
                                case EPM_PROTOCOL_NETBIOS: {
@@ -1022,7 +1022,7 @@ static enum ndr_err_code ndr_push_epm_rhs(struct ndr_push 
*ndr, int ndr_flags, c
                                case EPM_PROTOCOL_SMB:
                                break;
 
-                               case EPM_PROTOCOL_PIPE:
+                               case EPM_PROTOCOL_NAMED_PIPE:
                                break;
 
                                case EPM_PROTOCOL_NETBIOS:
@@ -1131,8 +1131,8 @@ static enum ndr_err_code ndr_pull_epm_rhs(struct ndr_pull 
*ndr, int ndr_flags, u
                                        NDR_CHECK(ndr_pull_epm_rhs_smb(ndr, 
NDR_SCALARS, &r->smb));
                                break; }
 
-                               case EPM_PROTOCOL_PIPE: {
-                                       NDR_CHECK(ndr_pull_epm_rhs_pipe(ndr, 
NDR_SCALARS, &r->pipe));
+                               case EPM_PROTOCOL_NAMED_PIPE: {
+                                       
NDR_CHECK(ndr_pull_epm_rhs_named_pipe(ndr, NDR_SCALARS, &r->named_pipe));
                                break; }
 
                                case EPM_PROTOCOL_NETBIOS: {
@@ -1236,7 +1236,7 @@ static enum ndr_err_code ndr_pull_epm_rhs(struct ndr_pull 
*ndr, int ndr_flags, u
                                case EPM_PROTOCOL_SMB:
                                break;
 
-                               case EPM_PROTOCOL_PIPE:
+                               case EPM_PROTOCOL_NAMED_PIPE:
                                break;
 
                                case EPM_PROTOCOL_NETBIOS:
@@ -1345,8 +1345,8 @@ _PUBLIC_ void ndr_print_epm_rhs(struct ndr_print *ndr, 
const char *name, const u
                                ndr_print_epm_rhs_smb(ndr, "smb", &r->smb);
                        break;
 
-                       case EPM_PROTOCOL_PIPE:
-                               ndr_print_epm_rhs_pipe(ndr, "pipe", &r->pipe);
+                       case EPM_PROTOCOL_NAMED_PIPE:
+                               ndr_print_epm_rhs_named_pipe(ndr, "named_pipe", 
&r->named_pipe);
                        break;
 
                        case EPM_PROTOCOL_NETBIOS:
diff --git a/librpc/gen_ndr/ndr_epmapper.h b/librpc/gen_ndr/ndr_epmapper.h
index 797c68d..8053d07 100644
--- a/librpc/gen_ndr/ndr_epmapper.h
+++ b/librpc/gen_ndr/ndr_epmapper.h
@@ -40,7 +40,7 @@ void ndr_print_epm_rhs_ncacn(struct ndr_print *ndr, const 
char *name, const stru
 void ndr_print_epm_rhs_uuid(struct ndr_print *ndr, const char *name, const 
struct epm_rhs_uuid *r);
 void ndr_print_epm_rhs_ipx(struct ndr_print *ndr, const char *name, const 
struct epm_rhs_ipx *r);
 void ndr_print_epm_rhs_smb(struct ndr_print *ndr, const char *name, const 
struct epm_rhs_smb *r);
-void ndr_print_epm_rhs_pipe(struct ndr_print *ndr, const char *name, const 
struct epm_rhs_pipe *r);
+void ndr_print_epm_rhs_named_pipe(struct ndr_print *ndr, const char *name, 
const struct epm_rhs_named_pipe *r);
 void ndr_print_epm_rhs_netbios(struct ndr_print *ndr, const char *name, const 
struct epm_rhs_netbios *r);
 void ndr_print_epm_rhs_netbeui(struct ndr_print *ndr, const char *name, const 
struct epm_rhs_netbeui *r);
 void ndr_print_epm_rhs_spx(struct ndr_print *ndr, const char *name, const 
struct epm_rhs_spx *r);
diff --git a/librpc/idl/epmapper.idl b/librpc/idl/epmapper.idl
index 0a110a1..3d91138 100644
--- a/librpc/idl/epmapper.idl
+++ b/librpc/idl/epmapper.idl
@@ -52,7 +52,7 @@ interface epmapper
                EPM_PROTOCOL_UUID                       = 0x0d,
                EPM_PROTOCOL_IPX                        = 0x0e,
                EPM_PROTOCOL_SMB                = 0x0f,
-               EPM_PROTOCOL_PIPE               = 0x10,
+               EPM_PROTOCOL_NAMED_PIPE         = 0x10,
                EPM_PROTOCOL_NETBIOS            = 0x11,
                EPM_PROTOCOL_NETBEUI            = 0x12,
                EPM_PROTOCOL_SPX                = 0x13,
@@ -113,8 +113,8 @@ interface epmapper
        } epm_rhs_smb;
 
        typedef struct {
-               astring path;   
-       } epm_rhs_pipe;
+               astring path;
+       } epm_rhs_named_pipe;
 
        typedef struct {
                astring name;
@@ -178,7 +178,7 @@ interface epmapper
                [case(EPM_PROTOCOL_UUID)] epm_rhs_uuid uuid;
                [case(EPM_PROTOCOL_IPX)] epm_rhs_ipx ipx;
                [case(EPM_PROTOCOL_SMB)] epm_rhs_smb smb;
-               [case(EPM_PROTOCOL_PIPE)] epm_rhs_pipe pipe;
+               [case(EPM_PROTOCOL_NAMED_PIPE)] epm_rhs_named_pipe named_pipe;
                [case(EPM_PROTOCOL_NETBIOS)] epm_rhs_netbios netbios;
                [case(EPM_PROTOCOL_NETBEUI)] epm_rhs_netbeui netbeui;
                [case(EPM_PROTOCOL_SPX)] epm_rhs_spx spx;
diff --git a/librpc/rpc/binding.c b/librpc/rpc/binding.c
index ba99239..652927b 100644
--- a/librpc/rpc/binding.c
+++ b/librpc/rpc/binding.c
@@ -45,7 +45,7 @@ static const struct {
        { "ncadg_ip_udp", NCACN_IP_UDP, 3, 
                { EPM_PROTOCOL_NCADG, EPM_PROTOCOL_UDP, EPM_PROTOCOL_IP } },
        { "ncalrpc", NCALRPC, 2, 
-               { EPM_PROTOCOL_NCALRPC, EPM_PROTOCOL_PIPE } },
+               { EPM_PROTOCOL_NCALRPC, EPM_PROTOCOL_NAMED_PIPE } },
        { "ncacn_unix_stream", NCACN_UNIX_STREAM, 2, 
                { EPM_PROTOCOL_NCACN, EPM_PROTOCOL_UNIX_DS } },
        { "ncadg_unix_dgram", NCADG_UNIX_DGRAM, 2, 
@@ -130,8 +130,8 @@ const char *epm_floor_string(TALLOC_CTX *mem_ctx, struct 
epm_floor *epm_floor)
                case EPM_PROTOCOL_IP:
                        return talloc_asprintf(mem_ctx, "IP:%s", 
epm_floor->rhs.ip.ipaddr);
 
-               case EPM_PROTOCOL_PIPE:
-                       return talloc_asprintf(mem_ctx, "PIPE:%s", 
epm_floor->rhs.pipe.path);
+               case EPM_PROTOCOL_NAMED_PIPE:
+                       return talloc_asprintf(mem_ctx, "NAMED-PIPE:%s", 
epm_floor->rhs.named_pipe.path);
 
                case EPM_PROTOCOL_SMB:
                        return talloc_asprintf(mem_ctx, "SMB:%s", 
epm_floor->rhs.smb.unc);
@@ -440,9 +440,9 @@ const char *dcerpc_floor_get_rhs_data(TALLOC_CTX *mem_ctx, 
struct epm_floor *epm
                if (strlen(epm_floor->rhs.smb.unc) == 0) return NULL;
                return talloc_strdup(mem_ctx, epm_floor->rhs.smb.unc);
 
-       case EPM_PROTOCOL_PIPE:
-               if (strlen(epm_floor->rhs.pipe.path) == 0) return NULL;
-               return talloc_strdup(mem_ctx, epm_floor->rhs.pipe.path);
+       case EPM_PROTOCOL_NAMED_PIPE:
+               if (strlen(epm_floor->rhs.named_pipe.path) == 0) return NULL;
+               return talloc_strdup(mem_ctx, epm_floor->rhs.named_pipe.path);
 
        case EPM_PROTOCOL_NETBIOS:
                if (strlen(epm_floor->rhs.netbios.name) == 0) return NULL;
@@ -510,9 +510,9 @@ static NTSTATUS dcerpc_floor_set_rhs_data(TALLOC_CTX 
*mem_ctx,
                NT_STATUS_HAVE_NO_MEMORY(epm_floor->rhs.smb.unc);
                return NT_STATUS_OK;
 
-       case EPM_PROTOCOL_PIPE:
-               epm_floor->rhs.pipe.path = talloc_strdup(mem_ctx, data);
-               NT_STATUS_HAVE_NO_MEMORY(epm_floor->rhs.pipe.path);
+       case EPM_PROTOCOL_NAMED_PIPE:
+               epm_floor->rhs.named_pipe.path = talloc_strdup(mem_ctx, data);
+               NT_STATUS_HAVE_NO_MEMORY(epm_floor->rhs.named_pipe.path);
                return NT_STATUS_OK;
 
        case EPM_PROTOCOL_NETBIOS:
diff --git a/pidl/expr.yp b/pidl/expr.yp
index a807487..ef8eee3 100644
--- a/pidl/expr.yp
+++ b/pidl/expr.yp
@@ -2,70 +2,120 @@
 # Copyright (C) 2006 Jelmer Vernooij <[email protected]>
 # Published under the GNU GPL
 # 
-%left   '->'
-%right  '!' '~' 
-%left   '*' '/' '%'
-%left   '+' '-'
+%left  '->'
+%right '!' '~'
+%left  '*' '/' '%'
+%left  '+' '-'
 %left  '<<' '>>'
-%left   '>' '<'
-%left   '==' '!=' 
-%left   '&'
-%left   '|'
-%left   '&&'
-%left   '||'
+%left  '>' '<'
+%left  '==' '!='
+%left  '&'
+%left  '|'
+%left  '&&'
+%left  '||'
 %left  '?' ':'
-%left   NEG DEREF ADDROF INV
-%left  '.'
+%left  NEG DEREF ADDROF INV
+%left  '.'
 
 %%
-exp:        NUM
-               |       TEXT                            { "\"$_[1]\"" }
-               |       func
-               |   var
-        |   '~' exp %prec INV   { "~$_[2]" }
-        |   exp '+' exp         { "$_[1] + $_[3]" }
-        |   exp '-' exp         { "$_[1] - $_[3]" }
-        |   exp '*' exp         { "$_[1] * $_[3]" }
-        |   exp '%' exp         { "$_[1] % $_[3]" }
-        |   exp '<' exp         { "$_[1] < $_[3]" }
-        |   exp '>' exp         { "$_[1] > $_[3]" }
-        |   exp '|' exp         { "$_[1] | $_[3]" }
-        |   exp '==' exp         { "$_[1] == $_[3]" }
-        |   exp '<=' exp         { "$_[1] <= $_[3]" }
-        |   exp '=>' exp         { "$_[1] => $_[3]" }
-        |   exp '<<' exp         { "$_[1] << $_[3]" }
-        |   exp '>>' exp         { "$_[1] >> $_[3]" }
-        |   exp '!=' exp         { "$_[1] != $_[3]" }
-        |   exp '||' exp        { "$_[1] || $_[3]" }
-        |   exp '&&' exp        { "$_[1] && $_[3]" }
-        |   exp '&' exp         { "$_[1] & $_[3]" }
-               |       exp '?' exp ':' exp { "$_[1]?$_[3]:$_[5]" }
-               |       '~' exp                         { "~$_[1]" }
-               |       '!' exp                         { "not $_[1]" }
-        |   exp '/' exp         { "$_[1] / $_[3]" }
-        |   '-' exp %prec NEG   { "-$_[2]" }
-        |   '&' exp %prec ADDROF { "&$_[2]" }
-        |   exp '^' exp         { "$_[1]^$_[3]" }
-        |   '(' exp ')'         { "($_[2])" }
+exp:
+       NUM
+       |
+       TEXT                { "\"$_[1]\"" }
+       |
+       func
+       |
+       var
+       |
+       '~' exp %prec INV   { "~$_[2]" }
+       |
+       exp '+' exp         { "$_[1] + $_[3]" }
+       |
+       exp '-' exp         { "$_[1] - $_[3]" }
+       |
+       exp '*' exp         { "$_[1] * $_[3]" }
+       |
+       exp '%' exp         { "$_[1] % $_[3]" }
+       |
+       exp '<' exp         { "$_[1] < $_[3]" }
+       |
+       exp '>' exp         { "$_[1] > $_[3]" }
+       |
+       exp '|' exp         { "$_[1] | $_[3]" }
+       |
+       exp '==' exp        { "$_[1] == $_[3]" }
+       |
+       exp '<=' exp        { "$_[1] <= $_[3]" }
+       |
+       exp '=>' exp        { "$_[1] => $_[3]" }
+       |
+       exp '<<' exp        { "$_[1] << $_[3]" }
+       |
+       exp '>>' exp        { "$_[1] >> $_[3]" }
+       |
+       exp '!=' exp        { "$_[1] != $_[3]" }
+       |
+       exp '||' exp        { "$_[1] || $_[3]" }
+       |
+       exp '&&' exp        { "$_[1] && $_[3]" }
+       |
+       exp '&' exp         { "$_[1] & $_[3]" }
+       |
+       exp '?' exp ':' exp { "$_[1]?$_[3]:$_[5]" }
+       |
+       '~' exp             { "~$_[1]" }
+       |
+       '!' exp             { "not $_[1]" }
+       |
+       exp '/' exp         { "$_[1] / $_[3]" }
+       |
+       '-' exp %prec NEG   { "-$_[2]" }
+       |
+       '&' exp %prec ADDROF { "&$_[2]" }
+       |
+       exp '^' exp         { "$_[1]^$_[3]" }
+       |
+       '(' exp ')'         { "($_[2])" }
 ;
 
-possible_pointer: 
-            VAR                 { $_[0]->_Lookup($_[1]) }
-        |   '*' possible_pointer %prec DEREF { $_[0]->_Dereference($_[2]); 
"*$_[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])" }
+;
 
-var:   possible_pointer        { $_[0]->_Use($_[1]) }
-               |       var '.' VAR                     { 
$_[0]->_Use("$_[1].$_[3]") }
-               |   '(' var ')'         { "($_[2])" }
-               |       var '->' VAR            { $_[0]->_Use("*$_[1]"); 
$_[1]."->".$_[3] }
+opt_args:
+       #empty
+       { "" }
+       |
+       args
 ;
 
+exp_or_possible_pointer:
+       exp
+       |
+       possible_pointer
+;
 
-func: VAR '(' opt_args ')' { "$_[1]($_[3])" };
-opt_args: { "" } | args;
-exp_or_possible_pointer: exp | possible_pointer;
-args: exp_or_possible_pointer 
-    | exp_or_possible_pointer ',' args { "$_[1], $_[3]" }
+args:
+       exp_or_possible_pointer
+       |
+       exp_or_possible_pointer ',' args { "$_[1], $_[3]" }
 ;
 
 %%
@@ -73,22 +123,22 @@ args: exp_or_possible_pointer
 package Parse::Pidl::Expr;
 
 sub _Lexer {
-    my($parser)=shift;
+       my($parser)=shift;
 
-    $parser->YYData->{INPUT}=~s/^[ \t]//;
+       $parser->YYData->{INPUT}=~s/^[ \t]//;
 
-    for ($parser->YYData->{INPUT}) {
-        if (s/^(0x[0-9A-Fa-f]+)//) {
+       for ($parser->YYData->{INPUT}) {
+               if (s/^(0x[0-9A-Fa-f]+)//) {
                        $parser->YYData->{LAST_TOKEN} = $1;
-            return('NUM',$1);
+                       return('NUM',$1);
                }
-        if (s/^([0-9]+(?:\.[0-9]+)?)//) {
+               if (s/^([0-9]+(?:\.[0-9]+)?)//) {
                        $parser->YYData->{LAST_TOKEN} = $1;
-            return('NUM',$1);
+                       return('NUM',$1);
                }
-        if (s/^([A-Za-z_][A-Za-z0-9_]*)//) {
+               if (s/^([A-Za-z_][A-Za-z0-9_]*)//) {
                        $parser->YYData->{LAST_TOKEN} = $1;
-               return('VAR',$1);
+                       return('VAR',$1);
                }
                if (s/^\"(.*?)\"//) {
                        $parser->YYData->{LAST_TOKEN} = $1;
@@ -96,13 +146,13 @@ sub _Lexer {
                }
                if (s/^(==|!=|<=|>=|->|\|\||<<|>>|&&)//s) {
                        $parser->YYData->{LAST_TOKEN} = $1;
-            return($1,$1);
+                       return($1,$1);
                }
-        if (s/^(.)//s) {
+               if (s/^(.)//s) {
                        $parser->YYData->{LAST_TOKEN} = $1;
-            return($1,$1);
+                       return($1,$1);
                }
-    }
+       }
 }
 
 sub _Use($$)
@@ -139,12 +189,14 @@ sub _Error($)
 }
 
 sub Run {
-    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);
+       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);
 }
diff --git a/pidl/idl.yp b/pidl/idl.yp
index d557590..dc8e293 100644
--- a/pidl/idl.yp
+++ b/pidl/idl.yp
@@ -16,119 +16,148 @@
 %%
 idl: 
        #empty  { {} }
-       | idl interface { push(@{$_[1]}, $_[2]); $_[1] }
-       | idl coclass { push(@{$_[1]}, $_[2]); $_[1] }
-       | idl import { push(@{$_[1]}, $_[2]); $_[1] }
-       | idl include { push(@{$_[1]}, $_[2]); $_[1] }
-       | idl importlib { push(@{$_[1]}, $_[2]); $_[1] }
-       | idl cpp_quote { push(@{$_[1]}, $_[2]); $_[1] }
-;
-
-import: 'import' commalist ';' {{
-                       "TYPE" => "IMPORT", 


-- 
Samba Shared Repository

Reply via email to