From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751316AbbJGG5x (ORCPT ); Wed, 7 Oct 2015 02:57:53 -0400 Received: from mail-wi0-f172.google.com ([209.85.212.172]:36842 "EHLO mail-wi0-f172.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750956AbbJGG5w (ORCPT ); Wed, 7 Oct 2015 02:57:52 -0400 Date: Wed, 7 Oct 2015 08:57:47 +0200 From: Ingo Molnar To: Rasmus Villemoes Cc: Paul Gortmaker , Jiri Slaby , Ingo Molnar , Andrew Morton , Thomas Gleixner , "H. Peter Anvin" , Michal Marek , linux-kernel@vger.kernel.org Subject: Re: [PATCH 1/2] linux/kconfig.h: generalize IS_ENABLED logic Message-ID: <20151007065747.GA7837@gmail.com> References: <5613F3DE.4010406@suse.cz> <1444165543-2209-1-git-send-email-linux@rasmusvillemoes.dk> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1444165543-2209-1-git-send-email-linux@rasmusvillemoes.dk> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org * Rasmus Villemoes wrote: > +#define _COMMA , > +#define _COND_PUNCTUATION_0(p) > +#define _COND_PUNCTUATION_1(p) p > + > +#define CHOOSE_EXPR(cfg, expr, ...) _CHOOSE_EXPR(cfg, expr, ##__VA_ARGS__, /* empty defalt arg */) > +#define _CHOOSE_EXPR(cfg, expr, def, ...) __CHOOSE_EXPR(__ARG_PLACEHOLDER_##cfg, expr, def) > +#define __CHOOSE_EXPR(arg1_or_junk, expr, def) ___CHOOSE_EXPR(arg1_or_junk expr, def) > +#define ___CHOOSE_EXPR(__ignored, expr, ...) expr > + > +#define COND_DECLARATION(cfg, decl) _COND_DECLARATION(cfg, decl, CHOOSE_EXPR(cfg, 1, 0)) > +#define _COND_DECLARATION(cfg, decl, sfx) __COND_DECLARATION(cfg, decl, sfx) > +#define __COND_DECLARATION(cfg, decl, sfx) CHOOSE_EXPR(cfg, decl) _COND_PUNCTUATION_##sfx(;) > +#define COND_INITIALIZER(cfg, init) _COND_INITIALIZER(cfg, init, CHOOSE_EXPR(cfg, 1, 0)) > +#define _COND_INITIALIZER(cfg, init, sfx) __COND_INITIALIZER(cfg, init, sfx) > +#define __COND_INITIALIZER(cfg, init, sfx) CHOOSE_EXPR(cfg, init) _COND_PUNCTUATION_##sfx(_COMMA) Pet peeve, mind structuring this in a typographically more readable fashion, by adding some common-sense vertical structure to the definitions: #define CHOOSE_EXPR(cfg, expr, ...) _CHOOSE_EXPR(cfg, expr, ##__VA_ARGS__, /* empty defalt arg */) #define _CHOOSE_EXPR(cfg, expr, def, ...) __CHOOSE_EXPR(__ARG_PLACEHOLDER_##cfg, expr, def) #define __CHOOSE_EXPR(arg1_or_junk, expr, def) ___CHOOSE_EXPR(arg1_or_junk expr, def) #define ___CHOOSE_EXPR(__ignored, expr, ...) expr #define COND_DECLARATION(cfg, decl) _COND_DECLARATION(cfg, decl, CHOOSE_EXPR(cfg, 1, 0)) #define _COND_DECLARATION(cfg, decl, sfx) __COND_DECLARATION(cfg, decl, sfx) #define __COND_DECLARATION(cfg, decl, sfx) CHOOSE_EXPR(cfg, decl) _COND_PUNCTUATION_##sfx(;) #define COND_INITIALIZER(cfg, init) _COND_INITIALIZER(cfg, init, CHOOSE_EXPR(cfg, 1, 0)) #define _COND_INITIALIZER(cfg, init, sfx) __COND_INITIALIZER(cfg, init, sfx) #define __COND_INITIALIZER(cfg, init, sfx) CHOOSE_EXPR(cfg, init) _COND_PUNCTUATION_##sfx(_COMMA) ? It's still a mouthful, but at least readable at a glance. Thanks, Ingo