From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32587 invoked by alias); 20 Jun 2009 00:01:56 -0000 Received: (qmail 32154 invoked by uid 22791); 20 Jun 2009 00:01:55 -0000 X-SWARE-Spam-Status: No, hits=-1.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_53,J_CHICKENPOX_54 X-Spam-Check-By: sourceware.org Received: from mail-fx0-f210.google.com (HELO mail-fx0-f210.google.com) (209.85.220.210) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 20 Jun 2009 00:01:43 +0000 Received: by fxm6 with SMTP id 6so2391039fxm.24 for ; Fri, 19 Jun 2009 17:01:40 -0700 (PDT) Received: by 10.103.173.15 with SMTP id a15mr2208919mup.59.1245456100404; Fri, 19 Jun 2009 17:01:40 -0700 (PDT) Received: from debian (chello089079179132.chello.pl [89.79.179.132]) by mx.google.com with ESMTPS id g1sm13328424muf.26.2009.06.19.17.01.39 (version=TLSv1/SSLv3 cipher=RC4-MD5); Fri, 19 Jun 2009 17:01:40 -0700 (PDT) Mail-From: cfd3851190942c765810b8316caa23486871fb77 Mon Sep 17 00:00:00 2001 From: Przemyslaw Pawelczyk Date: Sat, 20 Jun 2009 00:01:00 -0000 Subject: [PATCH] Support OR (using ||) in preprocessor's conditions. To: systemtap@sourceware.org Message-Id: <1245456101.314490.18432@debian> X-IsSubscribed: yes Mailing-List: contact systemtap-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: systemtap-owner@sourceware.org X-SW-Source: 2009-q2/txt/msg00976.txt.bz2 --- parse.cxx | 18 +++++++++++++++++- 1 files changed, 17 insertions(+), 1 deletions(-) diff --git a/parse.cxx b/parse.cxx index a26d594..52712bd 100644 --- a/parse.cxx +++ b/parse.cxx @@ -337,11 +337,27 @@ parser::scan_pp (bool wildcard) delete op; delete r; + const token *n; + while ((n = input.scan ()) && n->type == tok_operator && n->content == "||") + { + l = input.scan (false); + op = input.scan (false); + r = input.scan (false); + if (l == 0 || op == 0 || r == 0) + throw parse_error ("incomplete condition after '%('", t); + + result |= eval_pp_conditional (session, l, op, r); + delete l; + delete op; + delete r; + delete n; + } + /* clog << "PP eval (" << *t << ") == " << result << endl; */ - const token *m = input.scan (); // NB: not recursive + const token *m = n; // NB: not recursive if (! (m && m->type == tok_operator && m->content == "%?")) throw parse_error ("expected '%?' marker for conditional", t); delete m; // "%?" -- 1.5.6.5