[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: emacs coding modes need 'Suspend Disbelief' button
From: |
Stefan Monnier |
Subject: |
Re: emacs coding modes need 'Suspend Disbelief' button |
Date: |
Fri, 23 Jun 2017 17:11:01 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.0.50 (gnu/linux) |
> ((argc > 2) && (argv[3]!=NULL) &&
> (argv[3][0]=='u'))?U::RTNL::RT::Type_t::RT_UNICAST:(
> ((argc > 2) && (argv[3]!=NULL) &&
> (argv[3][0]=='l'))?U::RTNL::RT::Type_t::RT_LOCAL:(
> ((argc > 2) && (argv[3]!=NULL) &&
> (argv[3][0]=='b'))?U::RTNL::RT::Type_t::RT_BROADCAST:(
> ((argc > 2) && (argv[3]!=NULL) &&
> (argv[3][0]=='a'))?U::RTNL::RT::Type_t::RT_ANYCAST:(
> ((argc > 2) && (argv[3]!=NULL) &&
> (argv[3][0]=='a'))?U::RTNL::RT::Type_t::RT_ANYCAST:(
> An attempt to add another clause with Emacs c++-mode enabled
> fairly reliably results in a core dump.
Sorry, no core dump here. But that code sure looks hideous.
Is that machine-generated code, maybe?
I'd be strongly tempted to rewrite along the lines of
if ((argc <= 2) || (argv[3] == NULL))
<blabla>
else
switch (argv[3][0]) {
case 'u': return U::RTNL::RT::Type_t::RT_UNICAST;
case 'l': return U::RTNL::RT::Type_t::RT_LOCAL;
...
}
-- Stefan