Make js_ConcatStrings JS_FASTCALL and use directly as a built-in; remove gcflag param from it and from js_NewString.

This commit is contained in:
Brendan Eich 2008-08-11 11:03:54 -07:00
Родитель 318379e34f
Коммит b676b877d3
6 изменённых файлов: 11 добавлений и 21 удалений

Просмотреть файл

@ -52,7 +52,7 @@ BUILTIN4(Array_dense_setelem, LO, LO, LO, LO, LO, bool, JSContext*, JSObject*
BUILTIN3(Array_p_join, LO, LO, LO, LO, JSString*, JSContext*, JSObject*, JSString*, 1, 1)
BUILTIN4(String_p_substring, LO, LO, LO, LO, LO, JSString*, JSContext*, JSString*, jsint, jsint, 1, 1)
BUILTIN3(String_p_substring_1, LO, LO, LO, LO, JSString*, JSContext*, JSString*, jsint, 1, 1)
BUILTIN3(FastConcatStrings, LO, LO, LO, LO, JSString*, JSContext*, JSString*, JSString*, 1, 1)
BUILTIN3(ConcatStrings, LO, LO, LO, LO, JSString*, JSContext*, JSString*, JSString*, 1, 1)
BUILTIN3(String_getelem, LO, LO, LO, LO, JSString*, JSContext*, JSString*, jsint, 1, 1)
BUILTIN2(String_fromCharCode, LO, LO, LO, JSString*, JSContext*, jsint, 1, 1)
BUILTIN2(String_p_charCodeAt, LO, LO, LO, jsint, JSString*, jsint, 1, 1)

Просмотреть файл

@ -220,12 +220,6 @@ js_String_p_substring_1(JSContext* cx, JSString* str, jsint begin)
return js_NewDependentString(cx, str, (size_t)begin, (size_t)(end - begin));
}
JSString* FASTCALL
js_FastConcatStrings(JSContext* cx, JSString* left, JSString* right)
{
return js_ConcatStrings(cx, left, right, GCF_DONT_BLOCK);
}
JSString* FASTCALL
js_String_getelem(JSContext* cx, JSString* str, jsint i)
{
@ -270,7 +264,7 @@ js_String_p_concat_1int(JSContext* cx, JSString* str, jsint i)
JSString* istr = js_NumberToString(cx, i);
if (!istr)
return NULL;
return js_ConcatStrings(cx, str, istr, GCF_DONT_BLOCK);
return js_ConcatStrings(cx, str, istr);
}
jsdouble FASTCALL

Просмотреть файл

@ -6708,7 +6708,6 @@ js_Interpret(JSContext *cx)
L_JSOP_DEFXMLNS:
# endif
L_JSOP_UNUSED75:
L_JSOP_UNUSED76:
L_JSOP_UNUSED77:
L_JSOP_UNUSED78:

Просмотреть файл

@ -123,8 +123,8 @@ js_GetStringChars(JSContext *cx, JSString *str)
return JSFLATSTR_CHARS(str);
}
JSString *
js_ConcatStrings(JSContext *cx, JSString *left, JSString *right, uintN gcflag)
JSString * JS_FASTCALL
js_ConcatStrings(JSContext *cx, JSString *left, JSString *right)
{
size_t rn, ln, lrdist, n;
jschar *rs, *ls, *s;
@ -164,7 +164,7 @@ js_ConcatStrings(JSContext *cx, JSString *left, JSString *right, uintN gcflag)
js_strncpy(s + ln, rs, rn);
n = ln + rn;
s[n] = 0;
str = js_NewString(cx, s, n, gcflag);
str = js_NewString(cx, s, n);
if (!str) {
/* Out of memory: clean up any space we (re-)allocated. */
if (!ldep) {
@ -2502,7 +2502,7 @@ js_InitStringClass(JSContext *cx, JSObject *obj)
}
JSString *
js_NewString(JSContext *cx, jschar *chars, size_t length, uintN gcflag)
js_NewString(JSContext *cx, jschar *chars, size_t length)
{
JSString *str;
@ -2511,7 +2511,7 @@ js_NewString(JSContext *cx, jschar *chars, size_t length, uintN gcflag)
return NULL;
}
str = (JSString *) js_NewGCThing(cx, gcflag | GCX_STRING, sizeof(JSString));
str = (JSString *) js_NewGCThing(cx, GCX_STRING, sizeof(JSString));
if (!str)
return NULL;
JSFLATSTR_INIT(str, chars, length);

Просмотреть файл

@ -48,7 +48,6 @@
* string descriptor. String descriptors are GC'ed, while their chars are
* allocated from the malloc heap.
*/
#include "jsstddef.h"
#include <ctype.h>
#include "jspubtd.h"
#include "jsprvtd.h"
@ -241,9 +240,8 @@ js_GetDependentStringChars(JSString *str);
extern const jschar *
js_GetStringChars(JSContext *cx, JSString *str);
extern JSString *
js_ConcatStrings(JSContext *cx, JSString *left, JSString *right,
uintN gcflag __cplusplus_only( = 0));
extern JSString * JS_FASTCALL
js_ConcatStrings(JSContext *cx, JSString *left, JSString *right);
extern const jschar *
js_UndependString(JSContext *cx, JSString *str);
@ -445,8 +443,7 @@ extern const char js_encodeURIComponent_str[];
/* GC-allocate a string descriptor for the given malloc-allocated chars. */
extern JSString *
js_NewString(JSContext *cx, jschar *chars, size_t length,
uintN gcflag __cplusplus_only( = 0));
js_NewString(JSContext *cx, jschar *chars, size_t length);
extern JSString *
js_NewDependentString(JSContext *cx, JSString *base, size_t start,

Просмотреть файл

@ -2718,7 +2718,7 @@ TraceRecorder::record_JSOP_ADD()
jsval& l = stackval(-2);
if (JSVAL_IS_STRING(l) && JSVAL_IS_STRING(r)) {
LIns* args[] = { get(&r), get(&l), cx_ins };
LIns* concat = lir->insCall(F_FastConcatStrings, args);
LIns* concat = lir->insCall(F_ConcatStrings, args);
guard(false, lir->ins_eq0(concat), OOM_EXIT);
set(&l, concat);
return true;