mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	Restore EXP2 and LOG2 functions, by providing mathematical identify functions, when the underlying C functions are not available.
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@73911 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		| @@ -375,8 +375,14 @@ if test "x${host_os}" = "xlinux-gnu" ; then | ||||
| fi | ||||
|  | ||||
| # BSD might not have exp2, and/or log2 | ||||
| AST_EXT_LIB_CHECK([EXP2L], [m], [exp2l]) | ||||
| AST_EXT_LIB_CHECK([LOG2L], [m], [log2l]) | ||||
| AST_EXT_LIB_CHECK([EXP10L], [m], [exp10l]) | ||||
| AST_EXT_LIB_CHECK([LOG10L], [m], [log10l]) | ||||
| AST_EXT_LIB_CHECK([EXP2], [m], [exp2]) | ||||
| AST_EXT_LIB_CHECK([LOG2], [m], [log2]) | ||||
| AST_EXT_LIB_CHECK([EXP10], [m], [exp10]) | ||||
| AST_EXT_LIB_CHECK([LOG10], [m], [log10]) | ||||
|  | ||||
| GSM_INTERNAL="yes" | ||||
| AC_SUBST(GSM_INTERNAL) | ||||
|   | ||||
| @@ -105,9 +105,27 @@ | ||||
| /* Define to 1 if you have the `endpwent' function. */ | ||||
| #undef HAVE_ENDPWENT | ||||
|  | ||||
| /* Define this to indicate the ${EXP10_DESCRIP} library */ | ||||
| #undef HAVE_EXP10 | ||||
|  | ||||
| /* Define this to indicate the ${EXP10L_DESCRIP} library */ | ||||
| #undef HAVE_EXP10L | ||||
|  | ||||
| /* Define to indicate the ${EXP10L_DESCRIP} library version */ | ||||
| #undef HAVE_EXP10L_VERSION | ||||
|  | ||||
| /* Define to indicate the ${EXP10_DESCRIP} library version */ | ||||
| #undef HAVE_EXP10_VERSION | ||||
|  | ||||
| /* Define this to indicate the ${EXP2_DESCRIP} library */ | ||||
| #undef HAVE_EXP2 | ||||
|  | ||||
| /* Define this to indicate the ${EXP2L_DESCRIP} library */ | ||||
| #undef HAVE_EXP2L | ||||
|  | ||||
| /* Define to indicate the ${EXP2L_DESCRIP} library version */ | ||||
| #undef HAVE_EXP2L_VERSION | ||||
|  | ||||
| /* Define to indicate the ${EXP2_DESCRIP} library version */ | ||||
| #undef HAVE_EXP2_VERSION | ||||
|  | ||||
| @@ -232,9 +250,27 @@ | ||||
| /* Define to 1 if you have the `localtime_r' function. */ | ||||
| #undef HAVE_LOCALTIME_R | ||||
|  | ||||
| /* Define this to indicate the ${LOG10_DESCRIP} library */ | ||||
| #undef HAVE_LOG10 | ||||
|  | ||||
| /* Define this to indicate the ${LOG10L_DESCRIP} library */ | ||||
| #undef HAVE_LOG10L | ||||
|  | ||||
| /* Define to indicate the ${LOG10L_DESCRIP} library version */ | ||||
| #undef HAVE_LOG10L_VERSION | ||||
|  | ||||
| /* Define to indicate the ${LOG10_DESCRIP} library version */ | ||||
| #undef HAVE_LOG10_VERSION | ||||
|  | ||||
| /* Define this to indicate the ${LOG2_DESCRIP} library */ | ||||
| #undef HAVE_LOG2 | ||||
|  | ||||
| /* Define this to indicate the ${LOG2L_DESCRIP} library */ | ||||
| #undef HAVE_LOG2L | ||||
|  | ||||
| /* Define to indicate the ${LOG2L_DESCRIP} library version */ | ||||
| #undef HAVE_LOG2L_VERSION | ||||
|  | ||||
| /* Define to indicate the ${LOG2_DESCRIP} library version */ | ||||
| #undef HAVE_LOG2_VERSION | ||||
|  | ||||
| @@ -711,12 +747,12 @@ | ||||
|    release 3. */ | ||||
| #undef SETVBUF_REVERSED | ||||
|  | ||||
| /* The size of a `int', as computed by sizeof. */ | ||||
| /* The size of `int', as computed by sizeof. */ | ||||
| #undef SIZEOF_INT | ||||
|  | ||||
| /* If using the C implementation of alloca, define if you know the | ||||
|    direction of stack growth for your system; otherwise it will be | ||||
|    automatically deduced at run-time. | ||||
|    automatically deduced at runtime. | ||||
| 	STACK_DIRECTION > 0 => grows toward higher addresses | ||||
| 	STACK_DIRECTION < 0 => grows toward lower addresses | ||||
| 	STACK_DIRECTION = 0 => direction of growth unknown */ | ||||
| @@ -731,6 +767,13 @@ | ||||
| /* Define to 1 if your <sys/time.h> declares `struct tm'. */ | ||||
| #undef TM_IN_SYS_TIME | ||||
|  | ||||
| /* Define to 1 if on AIX 3. | ||||
|    System headers sometimes define this. | ||||
|    We just want to avoid a redefinition error message.  */ | ||||
| #ifndef _ALL_SOURCE | ||||
| # undef _ALL_SOURCE | ||||
| #endif | ||||
|  | ||||
| /* Number of bits in a file offset, on hosts where this is settable. */ | ||||
| #undef _FILE_OFFSET_BITS | ||||
|  | ||||
| @@ -745,6 +788,27 @@ | ||||
| /* Define for large files, on AIX-style hosts. */ | ||||
| #undef _LARGE_FILES | ||||
|  | ||||
| /* Define to 1 if on MINIX. */ | ||||
| #undef _MINIX | ||||
|  | ||||
| /* Define to 2 if the system does not provide POSIX.1 features except with | ||||
|    this defined. */ | ||||
| #undef _POSIX_1_SOURCE | ||||
|  | ||||
| /* Define to 1 if you need to in order for `stat' and other things to work. */ | ||||
| #undef _POSIX_SOURCE | ||||
|  | ||||
| /* Enable extensions on Solaris.  */ | ||||
| #ifndef __EXTENSIONS__ | ||||
| # undef __EXTENSIONS__ | ||||
| #endif | ||||
| #ifndef _POSIX_PTHREAD_SEMANTICS | ||||
| # undef _POSIX_PTHREAD_SEMANTICS | ||||
| #endif | ||||
| #ifndef _TANDEM_SOURCE | ||||
| # undef _TANDEM_SOURCE | ||||
| #endif | ||||
|  | ||||
| /* Define like PROTOTYPES; this can be used by system headers. */ | ||||
| #undef __PROTOTYPES | ||||
|  | ||||
| @@ -763,13 +827,13 @@ | ||||
| /* Define to `int' if <sys/types.h> does not define. */ | ||||
| #undef mode_t | ||||
|  | ||||
| /* Define to `long' if <sys/types.h> does not define. */ | ||||
| /* Define to `long int' if <sys/types.h> does not define. */ | ||||
| #undef off_t | ||||
|  | ||||
| /* Define to `int' if <sys/types.h> does not define. */ | ||||
| #undef pid_t | ||||
|  | ||||
| /* Define to `unsigned' if <sys/types.h> does not define. */ | ||||
| /* Define to `unsigned int' if <sys/types.h> does not define. */ | ||||
| #undef size_t | ||||
|  | ||||
| /* Define to `int' if <sys/types.h> doesn't define. */ | ||||
|   | ||||
							
								
								
									
										269
									
								
								main/ast_expr2.c
									
									
									
									
									
								
							
							
						
						
									
										269
									
								
								main/ast_expr2.c
									
									
									
									
									
								
							| @@ -1,7 +1,9 @@ | ||||
| /* A Bison parser, made by GNU Bison 2.1a.  */ | ||||
| /* A Bison parser, made by GNU Bison 2.3.  */ | ||||
|  | ||||
| /* Skeleton parser for Yacc-like parsing with Bison, | ||||
|    Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. | ||||
| /* Skeleton implementation for Bison's Yacc-like parsers in C | ||||
|  | ||||
|    Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 | ||||
|    Free Software Foundation, Inc. | ||||
|  | ||||
|    This program is free software; you can redistribute it and/or modify | ||||
|    it under the terms of the GNU General Public License as published by | ||||
| @@ -18,10 +20,18 @@ | ||||
|    Foundation, Inc., 51 Franklin Street, Fifth Floor, | ||||
|    Boston, MA 02110-1301, USA.  */ | ||||
|  | ||||
| /* As a special exception, when this file is copied by Bison into a | ||||
|    Bison output file, you may use that output file without restriction. | ||||
|    This special exception was added by the Free Software Foundation | ||||
|    in version 1.24 of Bison.  */ | ||||
| /* As a special exception, you may create a larger work that contains | ||||
|    part or all of the Bison parser skeleton and distribute that work | ||||
|    under terms of your choice, so long as that work isn't itself a | ||||
|    parser generator using the skeleton or a modified version thereof | ||||
|    as a parser skeleton.  Alternatively, if you modify or redistribute | ||||
|    the parser skeleton itself, you may (at your option) remove this | ||||
|    special exception, which will cause the skeleton and the resulting | ||||
|    Bison output files to be licensed under the GNU General Public | ||||
|    License without this special exception. | ||||
|  | ||||
|    This special exception was added by the Free Software Foundation in | ||||
|    version 2.2 of Bison.  */ | ||||
|  | ||||
| /* C LALR(1) parser skeleton written by Richard Stallman, by | ||||
|    simplifying the original so-called "semantic" parser.  */ | ||||
| @@ -37,7 +47,7 @@ | ||||
| #define YYBISON 1 | ||||
|  | ||||
| /* Bison version.  */ | ||||
| #define YYBISON_VERSION "2.1a" | ||||
| #define YYBISON_VERSION "2.3" | ||||
|  | ||||
| /* Skeleton name.  */ | ||||
| #define YYSKELETON_NAME "yacc.c" | ||||
| @@ -116,7 +126,7 @@ | ||||
|  | ||||
|  | ||||
| /* Copy the first part of user declarations.  */ | ||||
| #line 1 "ast_expr2.y" | ||||
| #line 1 "../main/ast_expr2.y" | ||||
|  | ||||
| /* Written by Pace Willisson (pace@blitz.com)  | ||||
|  * and placed in the public domain. | ||||
| @@ -160,14 +170,27 @@ | ||||
| #define FUNC_RINT     rintl | ||||
| #define FUNC_TRUNC     truncl | ||||
| #define FUNC_EXP       expl | ||||
| #ifdef HAVE_EXP2 | ||||
| #ifdef HAVE_EXP2L | ||||
| #define FUNC_EXP2       exp2l | ||||
| #else | ||||
| #define	FUNC_EXP2(x)	expl((x) * logl(2)) | ||||
| #endif | ||||
| #ifdef HAVE_EXP10L | ||||
| #define FUNC_EXP10       exp10l | ||||
| #else | ||||
| #define	FUNC_EXP10(x)	expl((x) * logl(10)) | ||||
| #endif | ||||
| #define FUNC_LOG       logl | ||||
| #ifdef HAVE_LOG2 | ||||
| #ifdef HAVE_LOG2L | ||||
| #define FUNC_LOG2       log2l | ||||
| #else | ||||
| #define	FUNC_LOG2(x)	(logl(x) / logl(2)) | ||||
| #endif | ||||
| #ifdef HAVE_LOG10L | ||||
| #define FUNC_LOG10       log10l | ||||
| #else | ||||
| #define	FUNC_LOG10(x)	(logl(x) / logl(10)) | ||||
| #endif | ||||
| #define FUNC_REMAINDER       remainderl | ||||
| #else | ||||
| #define FP___PRINTF "%.16g" | ||||
| @@ -191,12 +214,25 @@ | ||||
| #define FUNC_EXP       exp | ||||
| #ifdef HAVE_EXP2 | ||||
| #define FUNC_EXP2       exp2 | ||||
| #else | ||||
| #define	FUNC_EXP2(x)	exp((x) * log(2)) | ||||
| #endif | ||||
| #ifdef HAVE_EXP10 | ||||
| #define FUNC_EXP10       exp10 | ||||
| #else | ||||
| #define	FUNC_EXP10(x)	exp((x) * log(10)) | ||||
| #endif | ||||
| #define FUNC_LOG       log | ||||
| #ifdef HAVE_LOG2 | ||||
| #define FUNC_LOG2       log2 | ||||
| #else | ||||
| #define	FUNC_LOG2(x)	(log(x) / log(2)) | ||||
| #endif | ||||
| #ifdef HAVE_LOG10 | ||||
| #define FUNC_LOG10       log10 | ||||
| #else | ||||
| #define	FUNC_LOG10(x)	(log(x) / log(10)) | ||||
| #endif | ||||
| #define FUNC_REMAINDER       remainder | ||||
| #endif | ||||
|  | ||||
| @@ -363,13 +399,13 @@ int		ast_yyerror(const char *,YYLTYPE *, struct parse_io *); | ||||
|  | ||||
| #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED | ||||
| typedef union YYSTYPE | ||||
| #line 226 "ast_expr2.y" | ||||
| #line 260 "../main/ast_expr2.y" | ||||
| { | ||||
| 	struct val *val; | ||||
| 	struct expr_node *arglist; | ||||
| } | ||||
| /* Line 198 of yacc.c.  */ | ||||
| #line 365 "ast_expr2.c" | ||||
| /* Line 187 of yacc.c.  */ | ||||
| #line 409 "../main/ast_expr2.c" | ||||
| 	YYSTYPE; | ||||
| # define yystype YYSTYPE /* obsolescent; will be withdrawn */ | ||||
| # define YYSTYPE_IS_DECLARED 1 | ||||
| @@ -391,13 +427,13 @@ typedef struct YYLTYPE | ||||
|  | ||||
|  | ||||
| /* Copy the second part of user declarations.  */ | ||||
| #line 231 "ast_expr2.y" | ||||
| #line 265 "../main/ast_expr2.y" | ||||
|  | ||||
| extern int		ast_yylex __P((YYSTYPE *, YYLTYPE *, yyscan_t)); | ||||
|  | ||||
|  | ||||
| /* Line 221 of yacc.c.  */ | ||||
| #line 393 "ast_expr2.c" | ||||
| /* Line 216 of yacc.c.  */ | ||||
| #line 437 "../main/ast_expr2.c" | ||||
|  | ||||
| #ifdef short | ||||
| # undef short | ||||
| @@ -527,8 +563,13 @@ YYID (i) | ||||
| #  ifndef YYSTACK_ALLOC_MAXIMUM | ||||
| #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM | ||||
| #  endif | ||||
| #  ifdef __cplusplus | ||||
| extern "C" { | ||||
| #  if (defined __cplusplus && ! defined _STDLIB_H \ | ||||
|        && ! ((defined YYMALLOC || defined malloc) \ | ||||
| 	     && (defined YYFREE || defined free))) | ||||
| #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ | ||||
| #   ifndef _STDLIB_H | ||||
| #    define _STDLIB_H 1 | ||||
| #   endif | ||||
| #  endif | ||||
| #  ifndef YYMALLOC | ||||
| #   define YYMALLOC malloc | ||||
| @@ -544,9 +585,6 @@ void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ | ||||
| void free (void *); /* INFRINGES ON USER NAME SPACE */ | ||||
| #   endif | ||||
| #  endif | ||||
| #  ifdef __cplusplus | ||||
| } | ||||
| #  endif | ||||
| # endif | ||||
| #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ | ||||
|  | ||||
| @@ -691,9 +729,9 @@ static const yytype_int8 yyrhs[] = | ||||
| /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */ | ||||
| static const yytype_uint16 yyrline[] = | ||||
| { | ||||
|        0,   257,   257,   265,   272,   273,   282,   288,   289,   293, | ||||
|      297,   301,   305,   309,   313,   317,   321,   325,   329,   333, | ||||
|      337,   341,   345,   349,   353,   357,   361 | ||||
|        0,   291,   291,   299,   306,   307,   316,   322,   323,   327, | ||||
|      331,   335,   339,   343,   347,   351,   355,   359,   363,   367, | ||||
|      371,   375,   379,   383,   387,   391,   395 | ||||
| }; | ||||
| #endif | ||||
|  | ||||
| @@ -956,14 +994,14 @@ do {									  \ | ||||
| #if (defined __STDC__ || defined __C99__FUNC__ \ | ||||
|      || defined __cplusplus || defined _MSC_VER) | ||||
| static void | ||||
| yy_symbol_value_print (FILE *yyoutput, int yytype, const YYSTYPE * const yyvaluep, const YYLTYPE * const yylocationp) | ||||
| yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp) | ||||
| #else | ||||
| static void | ||||
| yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) | ||||
|     FILE *yyoutput; | ||||
|     int yytype; | ||||
|     const YYSTYPE * const yyvaluep; | ||||
|     const YYLTYPE * const yylocationp; | ||||
|     YYSTYPE const * const yyvaluep; | ||||
|     YYLTYPE const * const yylocationp; | ||||
| #endif | ||||
| { | ||||
|   if (!yyvaluep) | ||||
| @@ -990,14 +1028,14 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp) | ||||
| #if (defined __STDC__ || defined __C99__FUNC__ \ | ||||
|      || defined __cplusplus || defined _MSC_VER) | ||||
| static void | ||||
| yy_symbol_print (FILE *yyoutput, int yytype, const YYSTYPE * const yyvaluep, const YYLTYPE * const yylocationp) | ||||
| yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp) | ||||
| #else | ||||
| static void | ||||
| yy_symbol_print (yyoutput, yytype, yyvaluep, yylocationp) | ||||
|     FILE *yyoutput; | ||||
|     int yytype; | ||||
|     const YYSTYPE * const yyvaluep; | ||||
|     const YYLTYPE * const yylocationp; | ||||
|     YYSTYPE const * const yyvaluep; | ||||
|     YYLTYPE const * const yylocationp; | ||||
| #endif | ||||
| { | ||||
|   if (yytype < YYNTOKENS) | ||||
| @@ -1050,8 +1088,7 @@ static void | ||||
| yy_reduce_print (YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule) | ||||
| #else | ||||
| static void | ||||
| yy_reduce_print (yyvsp, yylsp, yyrule | ||||
| 		   ) | ||||
| yy_reduce_print (yyvsp, yylsp, yyrule) | ||||
|     YYSTYPE *yyvsp; | ||||
|     YYLTYPE *yylsp; | ||||
|     int yyrule; | ||||
| @@ -1174,7 +1211,7 @@ yytnamerr (char *yyres, const char *yystr) | ||||
| { | ||||
|   if (*yystr == '"') | ||||
|     { | ||||
|       size_t yyn = 0; | ||||
|       YYSIZE_T yyn = 0; | ||||
|       char const *yyp = yystr; | ||||
|  | ||||
|       for (;;) | ||||
| @@ -1221,7 +1258,7 @@ yysyntax_error (char *yyresult, int yystate, int yychar) | ||||
| { | ||||
|   int yyn = yypact[yystate]; | ||||
|  | ||||
|   if (! (YYPACT_NINF < yyn && yyn < YYLAST)) | ||||
|   if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) | ||||
|     return 0; | ||||
|   else | ||||
|     { | ||||
| @@ -1259,7 +1296,7 @@ yysyntax_error (char *yyresult, int yystate, int yychar) | ||||
|       int yyxbegin = yyn < 0 ? -yyn : 0; | ||||
|  | ||||
|       /* Stay within bounds of both yycheck and yytname.  */ | ||||
|       int yychecklim = YYLAST - yyn; | ||||
|       int yychecklim = YYLAST - yyn + 1; | ||||
|       int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; | ||||
|       int yycount = 1; | ||||
|  | ||||
| @@ -1347,114 +1384,114 @@ yydestruct (yymsg, yytype, yyvaluep, yylocationp) | ||||
|   switch (yytype) | ||||
|     { | ||||
|       case 4: /* "TOK_COLONCOLON" */ | ||||
| #line 251 "ast_expr2.y" | ||||
| #line 285 "../main/ast_expr2.y" | ||||
| 	{  free_value((yyvaluep->val)); }; | ||||
| #line 1345 "ast_expr2.c" | ||||
| #line 1390 "../main/ast_expr2.c" | ||||
| 	break; | ||||
|       case 5: /* "TOK_COND" */ | ||||
| #line 251 "ast_expr2.y" | ||||
| #line 285 "../main/ast_expr2.y" | ||||
| 	{  free_value((yyvaluep->val)); }; | ||||
| #line 1350 "ast_expr2.c" | ||||
| #line 1395 "../main/ast_expr2.c" | ||||
| 	break; | ||||
|       case 6: /* "TOK_OR" */ | ||||
| #line 251 "ast_expr2.y" | ||||
| #line 285 "../main/ast_expr2.y" | ||||
| 	{  free_value((yyvaluep->val)); }; | ||||
| #line 1355 "ast_expr2.c" | ||||
| #line 1400 "../main/ast_expr2.c" | ||||
| 	break; | ||||
|       case 7: /* "TOK_AND" */ | ||||
| #line 251 "ast_expr2.y" | ||||
| #line 285 "../main/ast_expr2.y" | ||||
| 	{  free_value((yyvaluep->val)); }; | ||||
| #line 1360 "ast_expr2.c" | ||||
| #line 1405 "../main/ast_expr2.c" | ||||
| 	break; | ||||
|       case 8: /* "TOK_NE" */ | ||||
| #line 251 "ast_expr2.y" | ||||
| #line 285 "../main/ast_expr2.y" | ||||
| 	{  free_value((yyvaluep->val)); }; | ||||
| #line 1365 "ast_expr2.c" | ||||
| #line 1410 "../main/ast_expr2.c" | ||||
| 	break; | ||||
|       case 9: /* "TOK_LE" */ | ||||
| #line 251 "ast_expr2.y" | ||||
| #line 285 "../main/ast_expr2.y" | ||||
| 	{  free_value((yyvaluep->val)); }; | ||||
| #line 1370 "ast_expr2.c" | ||||
| #line 1415 "../main/ast_expr2.c" | ||||
| 	break; | ||||
|       case 10: /* "TOK_GE" */ | ||||
| #line 251 "ast_expr2.y" | ||||
| #line 285 "../main/ast_expr2.y" | ||||
| 	{  free_value((yyvaluep->val)); }; | ||||
| #line 1375 "ast_expr2.c" | ||||
| #line 1420 "../main/ast_expr2.c" | ||||
| 	break; | ||||
|       case 11: /* "TOK_LT" */ | ||||
| #line 251 "ast_expr2.y" | ||||
| #line 285 "../main/ast_expr2.y" | ||||
| 	{  free_value((yyvaluep->val)); }; | ||||
| #line 1380 "ast_expr2.c" | ||||
| #line 1425 "../main/ast_expr2.c" | ||||
| 	break; | ||||
|       case 12: /* "TOK_GT" */ | ||||
| #line 251 "ast_expr2.y" | ||||
| #line 285 "../main/ast_expr2.y" | ||||
| 	{  free_value((yyvaluep->val)); }; | ||||
| #line 1385 "ast_expr2.c" | ||||
| #line 1430 "../main/ast_expr2.c" | ||||
| 	break; | ||||
|       case 13: /* "TOK_EQ" */ | ||||
| #line 251 "ast_expr2.y" | ||||
| #line 285 "../main/ast_expr2.y" | ||||
| 	{  free_value((yyvaluep->val)); }; | ||||
| #line 1390 "ast_expr2.c" | ||||
| #line 1435 "../main/ast_expr2.c" | ||||
| 	break; | ||||
|       case 14: /* "TOK_MINUS" */ | ||||
| #line 251 "ast_expr2.y" | ||||
| #line 285 "../main/ast_expr2.y" | ||||
| 	{  free_value((yyvaluep->val)); }; | ||||
| #line 1395 "ast_expr2.c" | ||||
| #line 1440 "../main/ast_expr2.c" | ||||
| 	break; | ||||
|       case 15: /* "TOK_PLUS" */ | ||||
| #line 251 "ast_expr2.y" | ||||
| #line 285 "../main/ast_expr2.y" | ||||
| 	{  free_value((yyvaluep->val)); }; | ||||
| #line 1400 "ast_expr2.c" | ||||
| #line 1445 "../main/ast_expr2.c" | ||||
| 	break; | ||||
|       case 16: /* "TOK_MOD" */ | ||||
| #line 251 "ast_expr2.y" | ||||
| #line 285 "../main/ast_expr2.y" | ||||
| 	{  free_value((yyvaluep->val)); }; | ||||
| #line 1405 "ast_expr2.c" | ||||
| #line 1450 "../main/ast_expr2.c" | ||||
| 	break; | ||||
|       case 17: /* "TOK_DIV" */ | ||||
| #line 251 "ast_expr2.y" | ||||
| #line 285 "../main/ast_expr2.y" | ||||
| 	{  free_value((yyvaluep->val)); }; | ||||
| #line 1410 "ast_expr2.c" | ||||
| #line 1455 "../main/ast_expr2.c" | ||||
| 	break; | ||||
|       case 18: /* "TOK_MULT" */ | ||||
| #line 251 "ast_expr2.y" | ||||
| #line 285 "../main/ast_expr2.y" | ||||
| 	{  free_value((yyvaluep->val)); }; | ||||
| #line 1415 "ast_expr2.c" | ||||
| #line 1460 "../main/ast_expr2.c" | ||||
| 	break; | ||||
|       case 19: /* "TOK_COMPL" */ | ||||
| #line 251 "ast_expr2.y" | ||||
| #line 285 "../main/ast_expr2.y" | ||||
| 	{  free_value((yyvaluep->val)); }; | ||||
| #line 1420 "ast_expr2.c" | ||||
| #line 1465 "../main/ast_expr2.c" | ||||
| 	break; | ||||
|       case 20: /* "TOK_EQTILDE" */ | ||||
| #line 251 "ast_expr2.y" | ||||
| #line 285 "../main/ast_expr2.y" | ||||
| 	{  free_value((yyvaluep->val)); }; | ||||
| #line 1425 "ast_expr2.c" | ||||
| #line 1470 "../main/ast_expr2.c" | ||||
| 	break; | ||||
|       case 21: /* "TOK_COLON" */ | ||||
| #line 251 "ast_expr2.y" | ||||
| #line 285 "../main/ast_expr2.y" | ||||
| 	{  free_value((yyvaluep->val)); }; | ||||
| #line 1430 "ast_expr2.c" | ||||
| #line 1475 "../main/ast_expr2.c" | ||||
| 	break; | ||||
|       case 22: /* "TOK_LP" */ | ||||
| #line 251 "ast_expr2.y" | ||||
| #line 285 "../main/ast_expr2.y" | ||||
| 	{  free_value((yyvaluep->val)); }; | ||||
| #line 1435 "ast_expr2.c" | ||||
| #line 1480 "../main/ast_expr2.c" | ||||
| 	break; | ||||
|       case 23: /* "TOK_RP" */ | ||||
| #line 251 "ast_expr2.y" | ||||
| #line 285 "../main/ast_expr2.y" | ||||
| 	{  free_value((yyvaluep->val)); }; | ||||
| #line 1440 "ast_expr2.c" | ||||
| #line 1485 "../main/ast_expr2.c" | ||||
| 	break; | ||||
|       case 24: /* "TOKEN" */ | ||||
| #line 251 "ast_expr2.y" | ||||
| #line 285 "../main/ast_expr2.y" | ||||
| 	{  free_value((yyvaluep->val)); }; | ||||
| #line 1445 "ast_expr2.c" | ||||
| #line 1490 "../main/ast_expr2.c" | ||||
| 	break; | ||||
|       case 28: /* "expr" */ | ||||
| #line 251 "ast_expr2.y" | ||||
| #line 285 "../main/ast_expr2.y" | ||||
| 	{  free_value((yyvaluep->val)); }; | ||||
| #line 1450 "ast_expr2.c" | ||||
| #line 1495 "../main/ast_expr2.c" | ||||
| 	break; | ||||
|  | ||||
|       default: | ||||
| @@ -1777,7 +1814,7 @@ yyreduce: | ||||
|   switch (yyn) | ||||
|     { | ||||
|         case 2: | ||||
| #line 257 "ast_expr2.y" | ||||
| #line 291 "../main/ast_expr2.y" | ||||
|     { ((struct parse_io *)parseio)->val = (struct val *)calloc(sizeof(struct val),1); | ||||
|               ((struct parse_io *)parseio)->val->type = (yyvsp[(1) - (1)].val)->type; | ||||
|               if( (yyvsp[(1) - (1)].val)->type == AST_EXPR_number ) | ||||
| @@ -1789,7 +1826,7 @@ yyreduce: | ||||
|     break; | ||||
|  | ||||
|   case 3: | ||||
| #line 265 "ast_expr2.y" | ||||
| #line 299 "../main/ast_expr2.y" | ||||
|     {/* nothing */ ((struct parse_io *)parseio)->val = (struct val *)calloc(sizeof(struct val),1); | ||||
|               ((struct parse_io *)parseio)->val->type = AST_EXPR_string; | ||||
| 			  ((struct parse_io *)parseio)->val->u.s = strdup("");  | ||||
| @@ -1797,12 +1834,12 @@ yyreduce: | ||||
|     break; | ||||
|  | ||||
|   case 4: | ||||
| #line 272 "ast_expr2.y" | ||||
| #line 306 "../main/ast_expr2.y" | ||||
|     { (yyval.arglist) = alloc_expr_node(AST_EXPR_NODE_VAL); (yyval.arglist)->val = (yyvsp[(1) - (1)].val);;} | ||||
|     break; | ||||
|  | ||||
|   case 5: | ||||
| #line 273 "ast_expr2.y" | ||||
| #line 307 "../main/ast_expr2.y" | ||||
|     {struct expr_node *x = alloc_expr_node(AST_EXPR_NODE_VAL); | ||||
|                                  struct expr_node *t; | ||||
| 								 DESTROY((yyvsp[(2) - (3)].val)); | ||||
| @@ -1812,7 +1849,7 @@ yyreduce: | ||||
|     break; | ||||
|  | ||||
|   case 6: | ||||
| #line 282 "ast_expr2.y" | ||||
| #line 316 "../main/ast_expr2.y" | ||||
|     { (yyval.val) = op_func((yyvsp[(1) - (4)].val),(yyvsp[(3) - (4)].arglist), ((struct parse_io *)parseio)->chan); | ||||
| 		                            DESTROY((yyvsp[(2) - (4)].val)); | ||||
| 									DESTROY((yyvsp[(4) - (4)].val)); | ||||
| @@ -1822,12 +1859,12 @@ yyreduce: | ||||
|     break; | ||||
|  | ||||
|   case 7: | ||||
| #line 288 "ast_expr2.y" | ||||
| #line 322 "../main/ast_expr2.y" | ||||
|     {(yyval.val) = (yyvsp[(1) - (1)].val);;} | ||||
|     break; | ||||
|  | ||||
|   case 8: | ||||
| #line 289 "ast_expr2.y" | ||||
| #line 323 "../main/ast_expr2.y" | ||||
|     { (yyval.val) = (yyvsp[(2) - (3)].val); | ||||
| 	                       (yyloc).first_column = (yylsp[(1) - (3)]).first_column; (yyloc).last_column = (yylsp[(3) - (3)]).last_column;  | ||||
| 						   (yyloc).first_line=0; (yyloc).last_line=0; | ||||
| @@ -1835,7 +1872,7 @@ yyreduce: | ||||
|     break; | ||||
|  | ||||
|   case 9: | ||||
| #line 293 "ast_expr2.y" | ||||
| #line 327 "../main/ast_expr2.y" | ||||
|     { (yyval.val) = op_or ((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); | ||||
| 						DESTROY((yyvsp[(2) - (3)].val));	 | ||||
|                          (yyloc).first_column = (yylsp[(1) - (3)]).first_column; (yyloc).last_column = (yylsp[(3) - (3)]).last_column;  | ||||
| @@ -1843,7 +1880,7 @@ yyreduce: | ||||
|     break; | ||||
|  | ||||
|   case 10: | ||||
| #line 297 "ast_expr2.y" | ||||
| #line 331 "../main/ast_expr2.y" | ||||
|     { (yyval.val) = op_and ((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));  | ||||
| 						DESTROY((yyvsp[(2) - (3)].val));	 | ||||
| 	                      (yyloc).first_column = (yylsp[(1) - (3)]).first_column; (yyloc).last_column = (yylsp[(3) - (3)]).last_column;  | ||||
| @@ -1851,7 +1888,7 @@ yyreduce: | ||||
|     break; | ||||
|  | ||||
|   case 11: | ||||
| #line 301 "ast_expr2.y" | ||||
| #line 335 "../main/ast_expr2.y" | ||||
|     { (yyval.val) = op_eq ((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); | ||||
| 						DESTROY((yyvsp[(2) - (3)].val));	 | ||||
| 	                     (yyloc).first_column = (yylsp[(1) - (3)]).first_column; (yyloc).last_column = (yylsp[(3) - (3)]).last_column; | ||||
| @@ -1859,7 +1896,7 @@ yyreduce: | ||||
|     break; | ||||
|  | ||||
|   case 12: | ||||
| #line 305 "ast_expr2.y" | ||||
| #line 339 "../main/ast_expr2.y" | ||||
|     { (yyval.val) = op_gt ((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); | ||||
| 						DESTROY((yyvsp[(2) - (3)].val));	 | ||||
|                          (yyloc).first_column = (yylsp[(1) - (3)]).first_column; (yyloc).last_column = (yylsp[(3) - (3)]).last_column; | ||||
| @@ -1867,7 +1904,7 @@ yyreduce: | ||||
|     break; | ||||
|  | ||||
|   case 13: | ||||
| #line 309 "ast_expr2.y" | ||||
| #line 343 "../main/ast_expr2.y" | ||||
|     { (yyval.val) = op_lt ((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));  | ||||
| 						DESTROY((yyvsp[(2) - (3)].val));	 | ||||
| 	                     (yyloc).first_column = (yylsp[(1) - (3)]).first_column; (yyloc).last_column = (yylsp[(3) - (3)]).last_column;  | ||||
| @@ -1875,7 +1912,7 @@ yyreduce: | ||||
|     break; | ||||
|  | ||||
|   case 14: | ||||
| #line 313 "ast_expr2.y" | ||||
| #line 347 "../main/ast_expr2.y" | ||||
|     { (yyval.val) = op_ge ((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));  | ||||
| 						DESTROY((yyvsp[(2) - (3)].val));	 | ||||
| 	                      (yyloc).first_column = (yylsp[(1) - (3)]).first_column; (yyloc).last_column = (yylsp[(3) - (3)]).last_column;  | ||||
| @@ -1883,7 +1920,7 @@ yyreduce: | ||||
|     break; | ||||
|  | ||||
|   case 15: | ||||
| #line 317 "ast_expr2.y" | ||||
| #line 351 "../main/ast_expr2.y" | ||||
|     { (yyval.val) = op_le ((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));  | ||||
| 						DESTROY((yyvsp[(2) - (3)].val));	 | ||||
| 	                      (yyloc).first_column = (yylsp[(1) - (3)]).first_column; (yyloc).last_column = (yylsp[(3) - (3)]).last_column;  | ||||
| @@ -1891,7 +1928,7 @@ yyreduce: | ||||
|     break; | ||||
|  | ||||
|   case 16: | ||||
| #line 321 "ast_expr2.y" | ||||
| #line 355 "../main/ast_expr2.y" | ||||
|     { (yyval.val) = op_ne ((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));  | ||||
| 						DESTROY((yyvsp[(2) - (3)].val));	 | ||||
| 	                      (yyloc).first_column = (yylsp[(1) - (3)]).first_column; (yyloc).last_column = (yylsp[(3) - (3)]).last_column;  | ||||
| @@ -1899,7 +1936,7 @@ yyreduce: | ||||
|     break; | ||||
|  | ||||
|   case 17: | ||||
| #line 325 "ast_expr2.y" | ||||
| #line 359 "../main/ast_expr2.y" | ||||
|     { (yyval.val) = op_plus ((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));  | ||||
| 						DESTROY((yyvsp[(2) - (3)].val));	 | ||||
| 	                       (yyloc).first_column = (yylsp[(1) - (3)]).first_column; (yyloc).last_column = (yylsp[(3) - (3)]).last_column;  | ||||
| @@ -1907,7 +1944,7 @@ yyreduce: | ||||
|     break; | ||||
|  | ||||
|   case 18: | ||||
| #line 329 "ast_expr2.y" | ||||
| #line 363 "../main/ast_expr2.y" | ||||
|     { (yyval.val) = op_minus ((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));  | ||||
| 						DESTROY((yyvsp[(2) - (3)].val));	 | ||||
| 	                        (yyloc).first_column = (yylsp[(1) - (3)]).first_column; (yyloc).last_column = (yylsp[(3) - (3)]).last_column;  | ||||
| @@ -1915,7 +1952,7 @@ yyreduce: | ||||
|     break; | ||||
|  | ||||
|   case 19: | ||||
| #line 333 "ast_expr2.y" | ||||
| #line 367 "../main/ast_expr2.y" | ||||
|     { (yyval.val) = op_negate ((yyvsp[(2) - (2)].val));  | ||||
| 						DESTROY((yyvsp[(1) - (2)].val));	 | ||||
| 	                        (yyloc).first_column = (yylsp[(1) - (2)]).first_column; (yyloc).last_column = (yylsp[(2) - (2)]).last_column;  | ||||
| @@ -1923,7 +1960,7 @@ yyreduce: | ||||
|     break; | ||||
|  | ||||
|   case 20: | ||||
| #line 337 "ast_expr2.y" | ||||
| #line 371 "../main/ast_expr2.y" | ||||
|     { (yyval.val) = op_compl ((yyvsp[(2) - (2)].val));  | ||||
| 						DESTROY((yyvsp[(1) - (2)].val));	 | ||||
| 	                        (yyloc).first_column = (yylsp[(1) - (2)]).first_column; (yyloc).last_column = (yylsp[(2) - (2)]).last_column;  | ||||
| @@ -1931,7 +1968,7 @@ yyreduce: | ||||
|     break; | ||||
|  | ||||
|   case 21: | ||||
| #line 341 "ast_expr2.y" | ||||
| #line 375 "../main/ast_expr2.y" | ||||
|     { (yyval.val) = op_times ((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));  | ||||
| 						DESTROY((yyvsp[(2) - (3)].val));	 | ||||
| 	                       (yyloc).first_column = (yylsp[(1) - (3)]).first_column; (yyloc).last_column = (yylsp[(3) - (3)]).last_column;  | ||||
| @@ -1939,7 +1976,7 @@ yyreduce: | ||||
|     break; | ||||
|  | ||||
|   case 22: | ||||
| #line 345 "ast_expr2.y" | ||||
| #line 379 "../main/ast_expr2.y" | ||||
|     { (yyval.val) = op_div ((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));  | ||||
| 						DESTROY((yyvsp[(2) - (3)].val));	 | ||||
| 	                      (yyloc).first_column = (yylsp[(1) - (3)]).first_column; (yyloc).last_column = (yylsp[(3) - (3)]).last_column;  | ||||
| @@ -1947,7 +1984,7 @@ yyreduce: | ||||
|     break; | ||||
|  | ||||
|   case 23: | ||||
| #line 349 "ast_expr2.y" | ||||
| #line 383 "../main/ast_expr2.y" | ||||
|     { (yyval.val) = op_rem ((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));  | ||||
| 						DESTROY((yyvsp[(2) - (3)].val));	 | ||||
| 	                      (yyloc).first_column = (yylsp[(1) - (3)]).first_column; (yyloc).last_column = (yylsp[(3) - (3)]).last_column;  | ||||
| @@ -1955,7 +1992,7 @@ yyreduce: | ||||
|     break; | ||||
|  | ||||
|   case 24: | ||||
| #line 353 "ast_expr2.y" | ||||
| #line 387 "../main/ast_expr2.y" | ||||
|     { (yyval.val) = op_colon ((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));  | ||||
| 						DESTROY((yyvsp[(2) - (3)].val));	 | ||||
| 	                        (yyloc).first_column = (yylsp[(1) - (3)]).first_column; (yyloc).last_column = (yylsp[(3) - (3)]).last_column;  | ||||
| @@ -1963,7 +2000,7 @@ yyreduce: | ||||
|     break; | ||||
|  | ||||
|   case 25: | ||||
| #line 357 "ast_expr2.y" | ||||
| #line 391 "../main/ast_expr2.y" | ||||
|     { (yyval.val) = op_eqtilde ((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));  | ||||
| 						DESTROY((yyvsp[(2) - (3)].val));	 | ||||
| 	                        (yyloc).first_column = (yylsp[(1) - (3)]).first_column; (yyloc).last_column = (yylsp[(3) - (3)]).last_column;  | ||||
| @@ -1971,7 +2008,7 @@ yyreduce: | ||||
|     break; | ||||
|  | ||||
|   case 26: | ||||
| #line 361 "ast_expr2.y" | ||||
| #line 395 "../main/ast_expr2.y" | ||||
|     { (yyval.val) = op_cond ((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(5) - (5)].val));  | ||||
| 						DESTROY((yyvsp[(2) - (5)].val));	 | ||||
| 						DESTROY((yyvsp[(4) - (5)].val));	 | ||||
| @@ -1980,8 +2017,8 @@ yyreduce: | ||||
|     break; | ||||
|  | ||||
|  | ||||
| /* Line 1270 of yacc.c.  */ | ||||
| #line 1977 "ast_expr2.c" | ||||
| /* Line 1267 of yacc.c.  */ | ||||
| #line 2022 "../main/ast_expr2.c" | ||||
|       default: break; | ||||
|     } | ||||
|   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); | ||||
| @@ -2196,11 +2233,12 @@ yyreturn: | ||||
|   if (yymsg != yymsgbuf) | ||||
|     YYSTACK_FREE (yymsg); | ||||
| #endif | ||||
|   return yyresult; | ||||
|   /* Make sure YYID is used.  */ | ||||
|   return YYID (yyresult); | ||||
| } | ||||
|  | ||||
|  | ||||
| #line 368 "ast_expr2.y" | ||||
| #line 402 "../main/ast_expr2.y" | ||||
|  | ||||
|  | ||||
| static struct expr_node *alloc_expr_node(enum node_type nt) | ||||
| @@ -2639,7 +2677,6 @@ static struct val *op_func(struct val *funcname, struct expr_node *arglist, stru | ||||
| 				ast_log(LOG_WARNING,"Wrong args to %s() function\n",funcname->u.s); | ||||
| 				return make_number(0.0); | ||||
| 			} | ||||
| #ifdef HAVE_EXP2 | ||||
| 		} else if (strcmp(funcname->u.s,"EXP2") == 0) { | ||||
| 			if (arglist && !arglist->right && arglist->val){ | ||||
| 				to_number(arglist->val); | ||||
| @@ -2649,7 +2686,15 @@ static struct val *op_func(struct val *funcname, struct expr_node *arglist, stru | ||||
| 				ast_log(LOG_WARNING,"Wrong args to %s() function\n",funcname->u.s); | ||||
| 				return make_number(0.0); | ||||
| 			} | ||||
| #endif | ||||
| 		} else if (strcmp(funcname->u.s,"EXP10") == 0) { | ||||
| 			if (arglist && !arglist->right && arglist->val){ | ||||
| 				to_number(arglist->val); | ||||
| 				result = make_number(FUNC_EXP10(arglist->val->u.i)); | ||||
| 				return result; | ||||
| 			} else { | ||||
| 				ast_log(LOG_WARNING,"Wrong args to %s() function\n",funcname->u.s); | ||||
| 				return make_number(0.0); | ||||
| 			} | ||||
| 		} else if (strcmp(funcname->u.s,"LOG") == 0) { | ||||
| 			if (arglist && !arglist->right && arglist->val){ | ||||
| 				to_number(arglist->val); | ||||
| @@ -2659,7 +2704,6 @@ static struct val *op_func(struct val *funcname, struct expr_node *arglist, stru | ||||
| 				ast_log(LOG_WARNING,"Wrong args to %s() function\n",funcname->u.s); | ||||
| 				return make_number(0.0); | ||||
| 			} | ||||
| #ifdef HAVE_LOG2 | ||||
| 		} else if (strcmp(funcname->u.s,"LOG2") == 0) { | ||||
| 			if (arglist && !arglist->right && arglist->val){ | ||||
| 				to_number(arglist->val); | ||||
| @@ -2669,7 +2713,6 @@ static struct val *op_func(struct val *funcname, struct expr_node *arglist, stru | ||||
| 				ast_log(LOG_WARNING,"Wrong args to %s() function\n",funcname->u.s); | ||||
| 				return make_number(0.0); | ||||
| 			} | ||||
| #endif | ||||
| 		} else if (strcmp(funcname->u.s,"LOG10") == 0) { | ||||
| 			if (arglist && !arglist->right && arglist->val){ | ||||
| 				to_number(arglist->val); | ||||
|   | ||||
| @@ -1,7 +1,9 @@ | ||||
| /* A Bison parser, made by GNU Bison 2.1a.  */ | ||||
| /* A Bison parser, made by GNU Bison 2.3.  */ | ||||
|  | ||||
| /* Skeleton parser for Yacc-like parsing with Bison, | ||||
|    Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. | ||||
| /* Skeleton interface for Bison's Yacc-like parsers in C | ||||
|  | ||||
|    Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 | ||||
|    Free Software Foundation, Inc. | ||||
|  | ||||
|    This program is free software; you can redistribute it and/or modify | ||||
|    it under the terms of the GNU General Public License as published by | ||||
| @@ -18,10 +20,18 @@ | ||||
|    Foundation, Inc., 51 Franklin Street, Fifth Floor, | ||||
|    Boston, MA 02110-1301, USA.  */ | ||||
|  | ||||
| /* As a special exception, when this file is copied by Bison into a | ||||
|    Bison output file, you may use that output file without restriction. | ||||
|    This special exception was added by the Free Software Foundation | ||||
|    in version 1.24 of Bison.  */ | ||||
| /* As a special exception, you may create a larger work that contains | ||||
|    part or all of the Bison parser skeleton and distribute that work | ||||
|    under terms of your choice, so long as that work isn't itself a | ||||
|    parser generator using the skeleton or a modified version thereof | ||||
|    as a parser skeleton.  Alternatively, if you modify or redistribute | ||||
|    the parser skeleton itself, you may (at your option) remove this | ||||
|    special exception, which will cause the skeleton and the resulting | ||||
|    Bison output files to be licensed under the GNU General Public | ||||
|    License without this special exception. | ||||
|  | ||||
|    This special exception was added by the Free Software Foundation in | ||||
|    version 2.2 of Bison.  */ | ||||
|  | ||||
| /* Tokens.  */ | ||||
| #ifndef YYTOKENTYPE | ||||
| @@ -82,13 +92,13 @@ | ||||
|  | ||||
| #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED | ||||
| typedef union YYSTYPE | ||||
| #line 226 "ast_expr2.y" | ||||
| #line 260 "../main/ast_expr2.y" | ||||
| { | ||||
| 	struct val *val; | ||||
| 	struct expr_node *arglist; | ||||
| } | ||||
| /* Line 1536 of yacc.c.  */ | ||||
| #line 92 "ast_expr2.h" | ||||
| /* Line 1489 of yacc.c.  */ | ||||
| #line 102 "../main/ast_expr2.h" | ||||
| 	YYSTYPE; | ||||
| # define yystype YYSTYPE /* obsolescent; will be withdrawn */ | ||||
| # define YYSTYPE_IS_DECLARED 1 | ||||
| @@ -111,5 +121,3 @@ typedef struct YYLTYPE | ||||
| #endif | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -41,14 +41,27 @@ | ||||
| #define FUNC_RINT     rintl | ||||
| #define FUNC_TRUNC     truncl | ||||
| #define FUNC_EXP       expl | ||||
| #ifdef HAVE_EXP2 | ||||
| #ifdef HAVE_EXP2L | ||||
| #define FUNC_EXP2       exp2l | ||||
| #else | ||||
| #define	FUNC_EXP2(x)	expl((x) * logl(2)) | ||||
| #endif | ||||
| #ifdef HAVE_EXP10L | ||||
| #define FUNC_EXP10       exp10l | ||||
| #else | ||||
| #define	FUNC_EXP10(x)	expl((x) * logl(10)) | ||||
| #endif | ||||
| #define FUNC_LOG       logl | ||||
| #ifdef HAVE_LOG2 | ||||
| #ifdef HAVE_LOG2L | ||||
| #define FUNC_LOG2       log2l | ||||
| #else | ||||
| #define	FUNC_LOG2(x)	(logl(x) / logl(2)) | ||||
| #endif | ||||
| #ifdef HAVE_LOG10L | ||||
| #define FUNC_LOG10       log10l | ||||
| #else | ||||
| #define	FUNC_LOG10(x)	(logl(x) / logl(10)) | ||||
| #endif | ||||
| #define FUNC_REMAINDER       remainderl | ||||
| #else | ||||
| #define FP___PRINTF "%.16g" | ||||
| @@ -72,12 +85,25 @@ | ||||
| #define FUNC_EXP       exp | ||||
| #ifdef HAVE_EXP2 | ||||
| #define FUNC_EXP2       exp2 | ||||
| #else | ||||
| #define	FUNC_EXP2(x)	exp((x) * log(2)) | ||||
| #endif | ||||
| #ifdef HAVE_EXP10 | ||||
| #define FUNC_EXP10       exp10 | ||||
| #else | ||||
| #define	FUNC_EXP10(x)	exp((x) * log(10)) | ||||
| #endif | ||||
| #define FUNC_LOG       log | ||||
| #ifdef HAVE_LOG2 | ||||
| #define FUNC_LOG2       log2 | ||||
| #else | ||||
| #define	FUNC_LOG2(x)	(log(x) / log(2)) | ||||
| #endif | ||||
| #ifdef HAVE_LOG10 | ||||
| #define FUNC_LOG10       log10 | ||||
| #else | ||||
| #define	FUNC_LOG10(x)	(log(x) / log(10)) | ||||
| #endif | ||||
| #define FUNC_REMAINDER       remainder | ||||
| #endif | ||||
|  | ||||
| @@ -811,7 +837,6 @@ static struct val *op_func(struct val *funcname, struct expr_node *arglist, stru | ||||
| 				ast_log(LOG_WARNING,"Wrong args to %s() function\n",funcname->u.s); | ||||
| 				return make_number(0.0); | ||||
| 			} | ||||
| #ifdef HAVE_EXP2 | ||||
| 		} else if (strcmp(funcname->u.s,"EXP2") == 0) { | ||||
| 			if (arglist && !arglist->right && arglist->val){ | ||||
| 				to_number(arglist->val); | ||||
| @@ -821,7 +846,15 @@ static struct val *op_func(struct val *funcname, struct expr_node *arglist, stru | ||||
| 				ast_log(LOG_WARNING,"Wrong args to %s() function\n",funcname->u.s); | ||||
| 				return make_number(0.0); | ||||
| 			} | ||||
| #endif | ||||
| 		} else if (strcmp(funcname->u.s,"EXP10") == 0) { | ||||
| 			if (arglist && !arglist->right && arglist->val){ | ||||
| 				to_number(arglist->val); | ||||
| 				result = make_number(FUNC_EXP10(arglist->val->u.i)); | ||||
| 				return result; | ||||
| 			} else { | ||||
| 				ast_log(LOG_WARNING,"Wrong args to %s() function\n",funcname->u.s); | ||||
| 				return make_number(0.0); | ||||
| 			} | ||||
| 		} else if (strcmp(funcname->u.s,"LOG") == 0) { | ||||
| 			if (arglist && !arglist->right && arglist->val){ | ||||
| 				to_number(arglist->val); | ||||
| @@ -831,7 +864,6 @@ static struct val *op_func(struct val *funcname, struct expr_node *arglist, stru | ||||
| 				ast_log(LOG_WARNING,"Wrong args to %s() function\n",funcname->u.s); | ||||
| 				return make_number(0.0); | ||||
| 			} | ||||
| #ifdef HAVE_LOG2 | ||||
| 		} else if (strcmp(funcname->u.s,"LOG2") == 0) { | ||||
| 			if (arglist && !arglist->right && arglist->val){ | ||||
| 				to_number(arglist->val); | ||||
| @@ -841,7 +873,6 @@ static struct val *op_func(struct val *funcname, struct expr_node *arglist, stru | ||||
| 				ast_log(LOG_WARNING,"Wrong args to %s() function\n",funcname->u.s); | ||||
| 				return make_number(0.0); | ||||
| 			} | ||||
| #endif | ||||
| 		} else if (strcmp(funcname->u.s,"LOG10") == 0) { | ||||
| 			if (arglist && !arglist->right && arglist->val){ | ||||
| 				to_number(arglist->val); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user