コード例 #1
0
ファイル: jsvalue.c プロジェクト: ccxvii/mujs
/* ToString() on a number */
const char *jsV_numbertostring(js_State *J, char buf[32], double f)
{
	char digits[32], *p = buf, *s = digits;
	int exp, ndigits, point;

	if (f == 0) return "0";
	if (isnan(f)) return "NaN";
	if (isinf(f)) return f < 0 ? "-Infinity" : "Infinity";

	/* Fast case for integers. This only works assuming all integers can be
	 * exactly represented by a float. This is true for 32-bit integers and
	 * 64-bit floats. */
	if (f >= INT_MIN && f <= INT_MAX) {
		int i = (int)f;
		if ((double)i == f)
			return js_itoa(buf, i);
	}

	ndigits = js_grisu2(f, digits, &exp);
	point = ndigits + exp;

	if (signbit(f))
		*p++ = '-';

	if (point < -5 || point > 21) {
		*p++ = *s++;
		if (ndigits > 1) {
			int n = ndigits - 1;
			*p++ = '.';
			while (n--)
				*p++ = *s++;
		}
		js_fmtexp(p, point - 1);
	}

	else if (point <= 0) {
		*p++ = '0';
		*p++ = '.';
		while (point++ < 0)
			*p++ = '0';
		while (ndigits-- > 0)
			*p++ = *s++;
		*p = 0;
	}

	else {
		while (ndigits-- > 0) {
			*p++ = *s++;
			if (--point == 0 && ndigits > 0)
				*p++ = '.';
		}
		while (point-- > 0)
			*p++ = '0';
		*p = 0;
	}

	return buf;
}
コード例 #2
0
ファイル: jsproperty.c プロジェクト: MajenkoLibraries/MuJS
static void itwalk(js_State *J, js_Object *io, js_Object *top, int own)
{
	js_Object *obj = top;
	js_Iterator *tail = NULL;
	char buf[32];
	int k;

#define ITADD(x) \
	js_Iterator *node = js_malloc(J, sizeof *node); \
	node->name = x; \
	node->next = NULL; \
	if (!tail) { \
		io->u.iter.head = tail = node; \
	} else { \
		tail->next = node; \
		tail = node; \
	}

	while (obj) {
		js_Property *prop = obj->head;
		while (prop) {
			if (!(prop->atts & JS_DONTENUM) && !itshadow(J, top, obj, prop->name)) {
				ITADD(prop->name);
			}
			prop = prop->next;
		}

		if (obj->type == JS_CSTRING) {
			for (k = 0; k < obj->u.s.length; ++k) {
				js_itoa(buf, k);
				if (!itshadow(J, top, obj, buf)) {
					ITADD(js_intern(J, buf));
				}
			}
		}

		if (own)
			break;
		obj = obj->prototype;
	}
}
コード例 #3
0
ファイル: jsproperty.c プロジェクト: MajenkoLibraries/MuJS
void jsV_resizearray(js_State *J, js_Object *obj, int newlen)
{
	char buf[32];
	const char *s;
	int k;
	if (newlen < obj->u.a.length) {
		if (obj->u.a.length > obj->count * 2) {
			js_Object *it = jsV_newiterator(J, obj, 1);
			while ((s = jsV_nextiterator(J, it))) {
				k = jsV_numbertointeger(jsV_stringtonumber(J, s));
				if (k >= newlen && !strcmp(s, jsV_numbertostring(J, buf, k)))
					jsV_delproperty(J, obj, s);
			}
		} else {
			for (k = newlen; k < obj->u.a.length; ++k) {
				jsV_delproperty(J, obj, js_itoa(buf, k));
			}
		}
	}
	obj->u.a.length = newlen;
}
コード例 #4
0
ファイル: jsarray.c プロジェクト: Crayonic/muPDFC
void js_delindex(js_State *J, int idx, unsigned int i)
{
	char buf[32];
	js_delproperty(J, idx, js_itoa(buf, i));
}
コード例 #5
0
ファイル: jsarray.c プロジェクト: Crayonic/muPDFC
int js_hasindex(js_State *J, int idx, unsigned int i)
{
	char buf[32];
	return js_hasproperty(J, idx, js_itoa(buf, i));
}
コード例 #6
0
ファイル: jsarray.c プロジェクト: ccxvii/mujs
void js_setindex(js_State *J, int idx, int i)
{
	char buf[32];
	js_setproperty(J, idx, js_itoa(buf, i));
}