Reimplement support for the ** (exponent) gnu extension, make it available thought the -g (mimic gnu) option

Reviewed by:	cognet
Approved by:	cognet
Discussed with:	espie@OpenBSD.org (upstream)
This commit is contained in:
bapt 2011-12-18 22:04:55 +00:00
parent 0283ff3e72
commit e5ed194323
3 changed files with 10 additions and 2 deletions

View File

@ -269,8 +269,12 @@ expand_builtin(const char *argv[], int argc, int td)
case INCLTYPE:
if (argc > 2)
if (!doincl(argv[2]))
err(1, "%s at line %lu: include(%s)",
CURRENT_NAME, CURRENT_LINE, argv[2]);
if (mimic_gnu)
warn("%s at line %lu: include(%s)",
CURRENT_NAME, CURRENT_LINE, argv[2]);
else
err(1, "%s at line %lu: include(%s)",
CURRENT_NAME, CURRENT_LINE, argv[2]);
break;
case SINCTYPE:

View File

@ -18,6 +18,7 @@
* $FreeBSD$
*/
#include <stdint.h>
#include <math.h>
#define YYSTYPE int32_t
extern int32_t end_result;
extern int yylex(void);
@ -34,6 +35,7 @@ extern int yyparse(void);
%left EQ NE
%left '<' LE '>' GE
%left LSHIFT RSHIFT
%right EXPONENT
%left '+' '-'
%left '*' '/' '%'
%right UMINUS UPLUS '!' '~'
@ -44,6 +46,7 @@ top : expr { end_result = $1; }
;
expr : expr '+' expr { $$ = $1 + $3; }
| expr '-' expr { $$ = $1 - $3; }
| expr EXPONENT expr { $$ = pow($1, $3); }
| expr '*' expr { $$ = $1 * $3; }
| expr '/' expr {
if ($3 == 0) {

View File

@ -57,6 +57,7 @@ radix 0[rR][0-9]+:[0-9a-zA-Z]+
"!=" { return(NE); }
"&&" { return(LAND); }
"||" { return(LOR); }
"**" { if (mimic_gnu) { return (EXPONENT); } }
. { return yytext[0]; }
%%