diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp index 7d3fb55a67a6..5d77397f3a6f 100644 --- a/js/src/jsapi.cpp +++ b/js/src/jsapi.cpp @@ -92,6 +92,8 @@ #include "jsxml.h" #endif +#include "jsatominlines.h" + #ifdef HAVE_VA_LIST_AS_ARRAY #define JS_ADDRESSOF_VA_LIST(ap) ((va_list *)(ap)) #else diff --git a/js/src/jsarray.cpp b/js/src/jsarray.cpp index c9ab258de488..0067767a75a4 100644 --- a/js/src/jsarray.cpp +++ b/js/src/jsarray.cpp @@ -101,6 +101,8 @@ #include "jsstaticcheck.h" #include "jsvector.h" +#include "jsatominlines.h" + /* 2^32 - 1 as a number and a string */ #define MAXINDEX 4294967295u #define MAXSTR "4294967295" diff --git a/js/src/jsatom.cpp b/js/src/jsatom.cpp index 425341d54301..02818fc15ca9 100644 --- a/js/src/jsatom.cpp +++ b/js/src/jsatom.cpp @@ -838,38 +838,6 @@ js_AtomizePrimitiveValue(JSContext *cx, jsval v, JSAtom **atomp) return JS_TRUE; } -JSBool -js_ValueToStringId(JSContext *cx, jsval v, jsid *idp) -{ - JSString *str; - JSAtom *atom; - - /* - * Optimize for the common case where v is an already-atomized string. The - * comment in jsstr.h before JSString::flatSetAtomized explains why this is - * thread-safe. The extra rooting via lastAtom (which would otherwise be - * done in js_js_AtomizeString) ensures the caller that the resulting id at - * is least weakly rooted. - */ - if (JSVAL_IS_STRING(v)) { - str = JSVAL_TO_STRING(v); - if (str->isAtomized()) { - cx->weakRoots.lastAtom = v; - *idp = ATOM_TO_JSID((JSAtom *) v); - return JS_TRUE; - } - } else { - str = js_ValueToString(cx, v); - if (!str) - return JS_FALSE; - } - atom = js_AtomizeString(cx, str, 0); - if (!atom) - return JS_FALSE; - *idp = ATOM_TO_JSID(atom); - return JS_TRUE; -} - #ifdef DEBUG static JSDHashOperator diff --git a/js/src/jsatom.h b/js/src/jsatom.h index 4ec7a3f58cb5..4c7e0135d143 100644 --- a/js/src/jsatom.h +++ b/js/src/jsatom.h @@ -467,12 +467,6 @@ js_GetExistingStringAtom(JSContext *cx, const jschar *chars, size_t length); JSBool js_AtomizePrimitiveValue(JSContext *cx, jsval v, JSAtom **atomp); -/* - * Convert v to an atomized string and wrap it as an id. - */ -extern JSBool -js_ValueToStringId(JSContext *cx, jsval v, jsid *idp); - #ifdef DEBUG extern JS_FRIEND_API(void) diff --git a/js/src/jsatominlines.h b/js/src/jsatominlines.h new file mode 100644 index 000000000000..fc5a62ab3bc7 --- /dev/null +++ b/js/src/jsatominlines.h @@ -0,0 +1,98 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Mozilla Communicator client code, released + * March 31, 1998. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either of the GNU General Public License Version 2 or later (the "GPL"), + * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef jsatom_inlines_h___ +#define jsatom_inlines_h___ + +#include "jsatom.h" +#include "jsnum.h" + +JS_BEGIN_EXTERN_C + +/* + * Convert v to an atomized string and wrap it as an id. + */ +static inline JSBool +js_ValueToStringId(JSContext *cx, jsval v, jsid *idp) +{ + JSString *str; + JSAtom *atom; + + /* + * Optimize for the common case where v is an already-atomized string. The + * comment in jsstr.h before JSString::flatSetAtomized explains why this is + * thread-safe. The extra rooting via lastAtom (which would otherwise be + * done in js_js_AtomizeString) ensures the caller that the resulting id at + * is least weakly rooted. + */ + if (JSVAL_IS_STRING(v)) { + str = JSVAL_TO_STRING(v); + if (str->isAtomized()) { + cx->weakRoots.lastAtom = v; + *idp = ATOM_TO_JSID((JSAtom *) v); + return JS_TRUE; + } + } else { + str = js_ValueToString(cx, v); + if (!str) + return JS_FALSE; + } + atom = js_AtomizeString(cx, str, 0); + if (!atom) + return JS_FALSE; + *idp = ATOM_TO_JSID(atom); + return JS_TRUE; +} + +static inline JSBool +js_Int32ToId(JSContext* cx, int32 index, jsid* id) +{ + if (index <= JSVAL_INT_MAX) { + *id = INT_TO_JSID(index); + return JS_TRUE; + } + JSString* str = js_NumberToString(cx, index); + if (!str) + return JS_FALSE; + return js_ValueToStringId(cx, STRING_TO_JSVAL(str), id); +} + +JS_END_EXTERN_C + +#endif /* jsatom_inlines_h___ */ diff --git a/js/src/jsbuiltins.cpp b/js/src/jsbuiltins.cpp index 408ff4bbe41c..53c647614a0b 100644 --- a/js/src/jsbuiltins.cpp +++ b/js/src/jsbuiltins.cpp @@ -59,6 +59,8 @@ #include "jsbuiltins.h" #include "jstracer.h" +#include "jsatominlines.h" + using namespace avmplus; using namespace nanojit; diff --git a/js/src/jsbuiltins.h b/js/src/jsbuiltins.h index 5fcfa53e072a..aef4ec2150e2 100644 --- a/js/src/jsbuiltins.h +++ b/js/src/jsbuiltins.h @@ -410,19 +410,6 @@ js_StringToNumber(JSContext* cx, JSString* str); jsdouble FASTCALL js_BooleanOrUndefinedToNumber(JSContext* cx, int32 unboxed); -static JS_INLINE JSBool -js_Int32ToId(JSContext* cx, int32 index, jsid* id) -{ - if (index <= JSVAL_INT_MAX) { - *id = INT_TO_JSID(index); - return JS_TRUE; - } - JSString* str = js_NumberToString(cx, index); - if (!str) - return JS_FALSE; - return js_ValueToStringId(cx, STRING_TO_JSVAL(str), id); -} - /* Extern version of js_SetBuiltinError. */ extern JS_FRIEND_API(void) js_SetTraceableNativeFailed(JSContext *cx); diff --git a/js/src/jsdbgapi.cpp b/js/src/jsdbgapi.cpp index 68edc887927a..df265e10ec10 100644 --- a/js/src/jsdbgapi.cpp +++ b/js/src/jsdbgapi.cpp @@ -63,6 +63,8 @@ #include "jsstaticcheck.h" #include "jsstr.h" +#include "jsatominlines.h" + #include "jsautooplen.h" typedef struct JSTrap { diff --git a/js/src/jsfun.cpp b/js/src/jsfun.cpp index 03ce48650252..006fad56716b 100644 --- a/js/src/jsfun.cpp +++ b/js/src/jsfun.cpp @@ -77,6 +77,8 @@ # include "jsxdrapi.h" #endif +#include "jsatominlines.h" + /* Generic function/call/arguments tinyids -- also reflected bit numbers. */ enum { CALL_ARGUMENTS = -1, /* predefined arguments local variable */ diff --git a/js/src/jsinterp.cpp b/js/src/jsinterp.cpp index 7728dadbe3f3..bcf64aae8612 100644 --- a/js/src/jsinterp.cpp +++ b/js/src/jsinterp.cpp @@ -81,6 +81,8 @@ #include "jsxml.h" #endif +#include "jsatominlines.h" + #include "jsautooplen.h" /* jsinvoke_cpp___ indicates inclusion from jsinvoke.cpp. */ diff --git a/js/src/jsobj.cpp b/js/src/jsobj.cpp index f7621266dd1e..24adfdb6c5bc 100644 --- a/js/src/jsobj.cpp +++ b/js/src/jsobj.cpp @@ -90,6 +90,8 @@ #include "jsdtracef.h" #endif +#include "jsatominlines.h" + #include "jsautooplen.h" #ifdef JS_THREADSAFE diff --git a/js/src/json.cpp b/js/src/json.cpp index 6fae0fab06d4..ddae9303ce34 100644 --- a/js/src/json.cpp +++ b/js/src/json.cpp @@ -61,6 +61,8 @@ #include "json.h" +#include "jsatominlines.h" + JSClass js_JSONClass = { js_JSON_str, JSCLASS_HAS_CACHED_PROTO(JSProto_JSON), diff --git a/js/src/jstracer.cpp b/js/src/jstracer.cpp index b5d28b6407f5..8ca229ff84ed 100644 --- a/js/src/jstracer.cpp +++ b/js/src/jstracer.cpp @@ -75,6 +75,8 @@ #include "jstracer.h" #include "jsxml.h" +#include "jsatominlines.h" + #include "jsautooplen.h" // generated headers last #include "imacros.c.out"