source: webkit/trunk/JavaScriptCore/API/JSStringRef.cpp@ 15482

Last change on this file since 15482 was 15481, checked in by mjs, 19 years ago

Reviewed by Geoff.


  • add a JSContextRef parameter to all JSValueRef, JSObjectRef, and JSContextRef operations; except JSObject{Get,Set}PrivateData which can be assumed to be simple pure accessors.


Also renamed the parameter "context" to "ctx" because it makes the code read better with this pervasive
but usually uninteresting parameter.

  • API/JSBase.cpp: (JSEvaluateScript): (JSCheckScriptSyntax): (JSGarbageCollect):
  • API/JSBase.h:
  • API/JSCallbackObject.cpp: (KJS::JSCallbackObject::JSCallbackObject): (KJS::JSCallbackObject::init): (KJS::JSCallbackObject::getOwnPropertySlot): (KJS::JSCallbackObject::put): (KJS::JSCallbackObject::deleteProperty): (KJS::JSCallbackObject::toNumber): (KJS::JSCallbackObject::toString):
  • API/JSContextRef.cpp: (JSGlobalContextCreate): (JSGlobalContextRetain): (JSGlobalContextRelease): (JSContextGetGlobalObject):
  • API/JSContextRef.h:
  • API/JSNode.c: (JSNodePrototype_appendChild): (JSNodePrototype_removeChild): (JSNodePrototype_replaceChild): (JSNode_getNodeType): (JSNode_getFirstChild): (JSNode_prototype):
  • API/JSNodeList.c: (JSNodeListPrototype_item): (JSNodeList_length): (JSNodeList_getProperty): (JSNodeList_prototype):
  • API/JSObjectRef.cpp: (JSObjectMake): (JSObjectMakeFunctionWithCallback): (JSObjectMakeConstructor): (JSObjectMakeFunction): (JSObjectGetPrototype): (JSObjectSetPrototype): (JSObjectHasProperty): (JSObjectGetProperty): (JSObjectSetProperty): (JSObjectGetPropertyAtIndex): (JSObjectSetPropertyAtIndex): (JSObjectDeleteProperty): (JSObjectIsFunction): (JSObjectCallAsFunction): (JSObjectIsConstructor): (JSObjectCallAsConstructor): (JSObjectCopyPropertyNames):
  • API/JSObjectRef.h:
  • API/JSStringRef.cpp:
  • API/JSValueRef.cpp: (JSValueGetType): (JSValueIsUndefined): (JSValueIsNull): (JSValueIsBoolean): (JSValueIsNumber): (JSValueIsString): (JSValueIsObject): (JSValueIsObjectOfClass): (JSValueIsEqual): (JSValueIsStrictEqual): (JSValueIsInstanceOfConstructor): (JSValueMakeUndefined): (JSValueMakeNull): (JSValueMakeBoolean): (JSValueMakeNumber): (JSValueMakeString): (JSValueToBoolean): (JSValueToNumber): (JSValueToStringCopy): (JSValueToObject): (JSValueProtect): (JSValueUnprotect):
  • API/JSValueRef.h:
  • API/minidom.c: (print):
  • API/testapi.c: (MyObject_getProperty): (MyObject_deleteProperty): (MyObject_callAsFunction): (MyObject_callAsConstructor): (MyObject_convertToType): (print_callAsFunction): (main):
File size: 4.4 KB
Line 
1// -*- mode: c++; c-basic-offset: 4 -*-
2/*
3 * Copyright (C) 2006 Apple Computer, Inc. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27#include "APICast.h"
28#include "JSStringRef.h"
29
30#include <kjs/JSLock.h>
31#include <kjs/JSType.h>
32#include <kjs/internal.h>
33#include <kjs/operations.h>
34#include <kjs/ustring.h>
35#include <kjs/value.h>
36
37using namespace KJS;
38
39JSStringRef JSStringCreateWithCharacters(const JSChar* chars, size_t numChars)
40{
41 JSLock lock;
42 return toRef(UString(reinterpret_cast<const UChar*>(chars), numChars).rep()->ref());
43}
44
45JSStringRef JSStringCreateWithUTF8CString(const char* string)
46{
47 JSLock lock;
48 // FIXME: Only works with ASCII
49 // Use decodeUTF8Sequence or http://www.unicode.org/Public/PROGRAMS/CVTUTF/ instead
50 return toRef(UString(string).rep()->ref());
51}
52
53JSStringRef JSStringRetain(JSStringRef string)
54{
55 UString::Rep* rep = toJS(string);
56 return toRef(rep->ref());
57}
58
59void JSStringRelease(JSStringRef string)
60{
61 JSLock lock;
62 UString::Rep* rep = toJS(string);
63 rep->deref();
64}
65
66size_t JSStringGetLength(JSStringRef string)
67{
68 UString::Rep* rep = toJS(string);
69 return rep->size();
70}
71
72const JSChar* JSStringGetCharactersPtr(JSStringRef string)
73{
74 UString::Rep* rep = toJS(string);
75 return reinterpret_cast<const JSChar*>(rep->data());
76}
77
78size_t JSStringGetMaximumUTF8CStringSize(JSStringRef string)
79{
80 UString::Rep* rep = toJS(string);
81
82 // Any UTF8 character > 3 bytes encodes as a UTF16 surrogate pair.
83 return rep->size() * 3 + 1; // + 1 for terminating '\0'
84}
85
86size_t JSStringGetUTF8CString(JSStringRef string, char* buffer, size_t bufferSize)
87{
88 JSLock lock;
89 UString::Rep* rep = toJS(string);
90 CString cString = UString(rep).UTF8String();
91
92 size_t length = std::min(bufferSize, cString.size() + 1); // + 1 for terminating '\0'
93 memcpy(buffer, cString.c_str(), length);
94 return length;
95}
96
97bool JSStringIsEqual(JSStringRef a, JSStringRef b)
98{
99 UString::Rep* aRep = toJS(a);
100 UString::Rep* bRep = toJS(b);
101
102 return UString(aRep) == UString(bRep);
103}
104
105bool JSStringIsEqualToUTF8CString(JSStringRef a, const char* b)
106{
107 JSStringRef bBuf = JSStringCreateWithUTF8CString(b);
108 bool result = JSStringIsEqual(a, bBuf);
109 JSStringRelease(bBuf);
110
111 return result;
112}
113
114#if defined(__APPLE__)
115JSStringRef JSStringCreateWithCFString(CFStringRef string)
116{
117 JSLock lock;
118 CFIndex length = CFStringGetLength(string);
119
120 // Optimized path for when CFString backing store is a UTF16 buffer
121 if (const UniChar* buffer = CFStringGetCharactersPtr(string)) {
122 UString::Rep* rep = UString(reinterpret_cast<const UChar*>(buffer), length).rep()->ref();
123 return toRef(rep);
124 }
125
126 UniChar* buffer = static_cast<UniChar*>(fastMalloc(sizeof(UniChar) * length));
127 CFStringGetCharacters(string, CFRangeMake(0, length), buffer);
128 UString::Rep* rep = UString(reinterpret_cast<UChar*>(buffer), length, false).rep()->ref();
129 return toRef(rep);
130}
131
132CFStringRef JSStringCopyCFString(CFAllocatorRef alloc, JSStringRef string)
133{
134 UString::Rep* rep = toJS(string);
135 return CFStringCreateWithCharacters(alloc, reinterpret_cast<const JSChar*>(rep->data()), rep->size());
136}
137
138#endif // __APPLE__
Note: See TracBrowser for help on using the repository browser.