#ifndef builtin_String_h
#define builtin_String_h
#include "mozilla/HashFunctions.h"
#include "mozilla/PodOperations.h"
#include <stdio.h>
#include <string.h>
#include "jsutil.h"
#include "NamespaceImports.h"
#include "gc/Rooting.h"
#include "js/RootingAPI.h"
#include "js/UniquePtr.h"
#include "util/Unicode.h"
#include "vm/Printer.h"
namespace js {
class GlobalObject;
extern JSObject* InitStringClass(JSContext* cx, Handle<GlobalObject*> global);
extern bool str_fromCharCode(JSContext* cx, unsigned argc, Value* vp);
extern bool str_fromCharCode_one_arg(JSContext* cx, HandleValue code,
MutableHandleValue rval);
extern bool str_fromCodePoint(JSContext* cx, unsigned argc, Value* vp);
extern bool str_fromCodePoint_one_arg(JSContext* cx, HandleValue code,
MutableHandleValue rval);
extern bool str_includes(JSContext* cx, unsigned argc, Value* vp);
extern bool str_indexOf(JSContext* cx, unsigned argc, Value* vp);
extern bool str_lastIndexOf(JSContext* cx, unsigned argc, Value* vp);
extern bool str_startsWith(JSContext* cx, unsigned argc, Value* vp);
extern bool str_toLowerCase(JSContext* cx, unsigned argc, Value* vp);
extern bool str_toUpperCase(JSContext* cx, unsigned argc, Value* vp);
extern bool str_toString(JSContext* cx, unsigned argc, Value* vp);
extern bool str_charAt(JSContext* cx, unsigned argc, Value* vp);
extern bool str_charCodeAt_impl(JSContext* cx, HandleString string,
HandleValue index, MutableHandleValue res);
extern bool str_charCodeAt(JSContext* cx, unsigned argc, Value* vp);
extern bool str_contains(JSContext* cx, unsigned argc, Value* vp);
extern bool str_endsWith(JSContext* cx, unsigned argc, Value* vp);
extern bool str_trim(JSContext* cx, unsigned argc, Value* vp);
extern bool str_trimStart(JSContext* cx, unsigned argc, Value* vp);
extern bool str_trimEnd(JSContext* cx, unsigned argc, Value* vp);
extern MOZ_MUST_USE bool intl_toLocaleLowerCase(JSContext* cx, unsigned argc,
Value* vp);
extern MOZ_MUST_USE bool intl_toLocaleUpperCase(JSContext* cx, unsigned argc,
Value* vp);
#if EXPOSE_INTL_API
#else
extern bool str_toLocaleLowerCase(JSContext* cx, unsigned argc, Value* vp);
extern bool str_toLocaleUpperCase(JSContext* cx, unsigned argc, Value* vp);
#endif
#if EXPOSE_INTL_API
extern bool str_normalize(JSContext* cx, unsigned argc, Value* vp);
#endif
#if EXPOSE_INTL_API
#else
extern bool str_localeCompare(JSContext* cx, unsigned argc, Value* vp);
#endif
extern bool str_concat(JSContext* cx, unsigned argc, Value* vp);
ArrayObject* StringSplitString(JSContext* cx, HandleObjectGroup group,
HandleString str, HandleString sep,
uint32_t limit);
JSString* StringFlatReplaceString(JSContext* cx, HandleString string,
HandleString pattern,
HandleString replacement);
JSString* str_replace_string_raw(JSContext* cx, HandleString string,
HandleString pattern,
HandleString replacement);
extern JSString* StringToLowerCase(JSContext* cx, HandleString string);
extern JSString* StringToUpperCase(JSContext* cx, HandleString string);
extern bool StringConstructor(JSContext* cx, unsigned argc, Value* vp);
extern bool FlatStringMatch(JSContext* cx, unsigned argc, Value* vp);
extern bool FlatStringSearch(JSContext* cx, unsigned argc, Value* vp);
}
#endif