pike.git
/
src
/
operators.c
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/src/operators.c:1:
/* || This file is part of Pike. For copyright information see COPYRIGHT. || Pike is distributed under GPL, LGPL and MPL. See the file COPYING || for more information.
-
|| $Id: operators.c,v 1.
257
2009
/
11/
05 16:
51:45
grubba
Exp $
+
|| $Id: operators.c,v 1.
258
2010
/
05
/
27
23:
16:
59
mast
Exp $
*/ #include "global.h" #include <math.h> #include "interpret.h" #include "svalue.h" #include "multiset.h" #include "mapping.h" #include "array.h" #include "stralloc.h"
-
+
#include "pike_float.h"
#include "opcodes.h" #include "operators.h" #include "pike_memory.h" #include "pike_error.h" #include "docode.h" #include "constants.h" #include "peep.h" #include "lex.h" #include "program.h" #include "object.h"
pike.git/src/operators.c:41:
/* The destructive multiset merge code is broken. * l->msd gets -1 refs. * * Disable it for now. * /grubba 2008-07-08 */ #undef PIKE_MERGE_DESTR_A #define PIKE_MERGE_DESTR_A 0
-
/*
These
calculations
should always give some margin based on the size. */
-
/*
The
calculations
utilize
that log10(256) ~= 2.4 < 5/2. */
+
/*
This
calculation
should always give some margin based on the size. */
+
/*
It
utilizes
that log10(256) ~= 2.4 < 5/2. */
+
/* One extra char for the sign and one for the \0 terminator. */
+
#define MAX_INT_SPRINTF_LEN (2 + (SIZEOF_INT_TYPE * 5 + 1) / 2)
-
/*
One extra char for the sign. */
-
#define MAX_INT_SPRINTF_LEN (1 + (SIZEOF_INT_TYPE * 5 + 1) / 2)
-
-
/* One quarter of the float is the exponent. */
-
#define MAX_FLOAT_EXP_LEN ((SIZEOF_FLOAT_TYPE * 5 + 4) / 8)
-
/* Six extra chars: Mantissa sign, decimal point, zero before the
-
* decimal point, the 'e', the exponent sign, and an extra digit due
-
* to the mantissa/exponent split. */
-
#define MAX_FLOAT_SPRINTF_LEN (6 + PIKEFLOAT_DIG + MAX_FLOAT_EXP_LEN)
-
-
/*
Enough to hold a Pike float or int in textform
including a trailing \0
+
/* Enough to hold a Pike float or int in textform
*/
-
#define MAX_NUM_BUF (MAXIMUM(MAX_INT_SPRINTF_LEN,MAX_FLOAT_SPRINTF_LEN)
+1
)
+
#define MAX_NUM_BUF (MAXIMUM(MAX_INT_SPRINTF_LEN,MAX_FLOAT_SPRINTF_LEN))
void index_no_free(struct svalue *to,struct svalue *what,struct svalue *ind) { #ifdef PIKE_SECURITY if(what->type <= MAX_COMPLEX) if(!CHECK_DATA_SECURITY(what->u.array, SECURITY_BIT_INDEX)) Pike_error("Index permission denied.\n"); #endif switch(what->type)
pike.git/src/operators.c:462:
} return; default: Pike_error("Cannot cast %s to string.\n", get_name_of_type(sp[-1].type)); case PIKE_T_STRING: return; case T_FLOAT:
-
sprintf
(buf,
"%.*"PRINTPIKEFLOAT"g",
-
PIKEFLOAT_DIG,
sp[-1].u.float_number);
-
/* Same kludge as in svalue.c:describe_svalue. */
-
if (!STRCHR (buf, '.') && !STRCHR (buf, ',') && !STRCHR (buf, 'e'))
-
strcat (buf, ".0");
+
format_pike_float
(buf, sp[-1].u.float_number);
break; case T_INT: sprintf(buf, "%"PRINTPIKEINT"d", sp[-1].u.integer); break; } sp[-1].type = PIKE_T_STRING; sp[-1].u.string = make_shared_string(buf); }