source: webkit/trunk/JavaScriptCore/API/JSContextRef.cpp@ 15307

Last change on this file since 15307 was 15307, checked in by ggaren, 19 years ago

Approved by Maciej, Darin.


Renamed JSStringBufferRef to JSInternalStringRef. "Internal string" means the
JavaScript engine's internal string representation, which is the most
low-level and efficient representation to use when interfacing with JavaScript.

  • API/APICast.h: (toJS): (toRef):
  • API/JSBase.h:
  • API/JSCallbackObject.cpp: (KJS::JSCallbackObject::getOwnPropertySlot): (KJS::JSCallbackObject::put): (KJS::JSCallbackObject::deleteProperty): (KJS::JSCallbackObject::staticValueGetter): (KJS::JSCallbackObject::callbackGetter):
  • API/JSContextRef.cpp: (JSEvaluate): (JSCheckSyntax):
  • API/JSContextRef.h:
  • API/JSInternalStringRef.cpp: Added. (JSStringMake): (JSInternalStringCreate): (JSInternalStringCreateUTF8): (JSInternalStringRetain): (JSInternalStringRelease): (JSValueCopyStringValue): (JSInternalStringGetLength): (JSInternalStringGetCharactersPtr): (JSInternalStringGetCharacters): (JSInternalStringGetMaxLengthUTF8): (JSInternalStringGetCharactersUTF8): (JSInternalStringIsEqual): (JSInternalStringIsEqualUTF8): (JSInternalStringCreateCF): (CFStringCreateWithJSInternalString):
  • API/JSInternalStringRef.h: Added.
  • API/JSNode.c: (JSNodePrototype_appendChild): (JSNode_getNodeType): (JSNode_getChildNodes): (JSNode_getFirstChild):
  • API/JSNodeList.c: (JSNodeList_length): (JSNodeList_getProperty):
  • API/JSObjectRef.cpp: (JSFunctionMakeWithBody): (JSObjectGetDescription): (JSObjectHasProperty): (JSObjectGetProperty): (JSObjectSetProperty): (JSObjectDeleteProperty): (JSPropertyEnumeratorGetNext): (JSPropertyListAdd):
  • API/JSObjectRef.h:
  • API/JSStringBufferRef.cpp: Removed.
  • API/JSStringBufferRef.h: Removed.
  • API/JSValueRef.h:
  • API/JavaScriptCore.h:
  • API/minidom.c: (main): (print):
  • API/testapi.c: (assertEqualsAsUTF8String): (assertEqualsAsCharactersPtr): (assertEqualsAsCharacters): (MyObject_hasProperty): (MyObject_getProperty): (MyObject_setProperty): (MyObject_deleteProperty): (MyObject_getPropertyList): (print_callAsFunction): (myConstructor_callAsConstructor): (main):
  • JavaScriptCore.exp:
  • JavaScriptCore.xcodeproj/project.pbxproj:
File size: 4.3 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 "JSContextRef.h"
29
30#include "JSCallbackObject.h"
31#include "completion.h"
32#include "interpreter.h"
33#include "object.h"
34
35using namespace KJS;
36
37JSContextRef JSContextCreate(JSClassRef globalObjectClass)
38{
39 JSLock lock;
40
41 JSObject* globalObject;
42 if (globalObjectClass)
43 // FIXME: We need to pass a real ExecState here to support an initialize callback in globalObjectClass
44 globalObject = new JSCallbackObject(0, globalObjectClass);
45 else
46 globalObject = new JSObject();
47
48 Interpreter* interpreter = new Interpreter(globalObject); // adds the built-in object prototype to the global object
49 return toRef(interpreter->globalExec());
50}
51
52void JSContextDestroy(JSContextRef context)
53{
54 JSLock lock;
55 ExecState* exec = toJS(context);
56 delete exec->dynamicInterpreter();
57}
58
59JSObjectRef JSContextGetGlobalObject(JSContextRef context)
60{
61 ExecState* exec = toJS(context);
62 return toRef(exec->dynamicInterpreter()->globalObject());
63}
64
65JSValueRef JSEvaluate(JSContextRef context, JSInternalStringRef script, JSObjectRef thisObject, JSInternalStringRef sourceURL, int startingLineNumber, JSValueRef* exception)
66{
67 JSLock lock;
68 ExecState* exec = toJS(context);
69 JSObject* jsThisObject = toJS(thisObject);
70 UString::Rep* scriptRep = toJS(script);
71 UString::Rep* sourceURLRep = toJS(sourceURL);
72 // Interpreter::evaluate sets "this" to the global object if it is NULL
73 Completion completion = exec->dynamicInterpreter()->evaluate(UString(sourceURLRep), startingLineNumber, UString(scriptRep), jsThisObject);
74
75 if (completion.complType() == Throw) {
76 if (exception)
77 *exception = completion.value();
78 return 0;
79 }
80
81 if (completion.value())
82 return toRef(completion.value());
83
84 // happens, for example, when the only statement is an empty (';') statement
85 return toRef(jsUndefined());
86}
87
88bool JSCheckSyntax(JSContextRef context, JSInternalStringRef script, JSInternalStringRef sourceURL, int startingLineNumber, JSValueRef* exception)
89{
90 JSLock lock;
91
92 ExecState* exec = toJS(context);
93 UString::Rep* scriptRep = toJS(script);
94 UString::Rep* sourceURLRep = toJS(sourceURL);
95 Completion completion = exec->dynamicInterpreter()->checkSyntax(UString(sourceURLRep), startingLineNumber, UString(scriptRep));
96 if (completion.complType() == Throw) {
97 if (exception)
98 *exception = toRef(completion.value());
99 return false;
100 }
101
102 return true;
103}
104
105JSValueRef JSContextGetException(JSContextRef context)
106{
107 ExecState* exec = toJS(context);
108 return toRef(exec->exception());
109}
110
111void JSContextClearException(JSContextRef context)
112{
113 ExecState* exec = toJS(context);
114 if (exec->hadException())
115 exec->clearException();
116}
117
118void JSContextSetException(JSContextRef context, JSValueRef value)
119{
120 ExecState* exec = toJS(context);
121 JSValue* jsValue = toJS(value);
122 exec->setException(jsValue);
123}
Note: See TracBrowser for help on using the repository browser.