18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef JSBase_h 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define JSBase_h 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef __cplusplus 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <stdbool.h> 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* JavaScript engine interface */ 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*! @typedef JSContextGroupRef A group that associates JavaScript contexts with one another. Contexts in the same group may share and exchange JavaScript objects. */ 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef const struct OpaqueJSContextGroup* JSContextGroupRef; 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*! @typedef JSContextRef A JavaScript execution context. Holds the global object and other execution state. */ 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef const struct OpaqueJSContext* JSContextRef; 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*! @typedef JSGlobalContextRef A global JavaScript execution context. A JSGlobalContext is a JSContext. */ 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef struct OpaqueJSContext* JSGlobalContextRef; 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*! @typedef JSStringRef A UTF16 character buffer. The fundamental string representation in JavaScript. */ 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef struct OpaqueJSString* JSStringRef; 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*! @typedef JSClassRef A JavaScript class. Used with JSObjectMake to construct objects with custom behavior. */ 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef struct OpaqueJSClass* JSClassRef; 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*! @typedef JSPropertyNameArrayRef An array of JavaScript property names. */ 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef struct OpaqueJSPropertyNameArray* JSPropertyNameArrayRef; 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*! @typedef JSPropertyNameAccumulatorRef An ordered set used to collect the names of a JavaScript object's properties. */ 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef struct OpaqueJSPropertyNameAccumulator* JSPropertyNameAccumulatorRef; 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* JavaScript data types */ 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*! @typedef JSValueRef A JavaScript value. The base type for all JavaScript values, and polymorphic functions on them. */ 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef const struct OpaqueJSValue* JSValueRef; 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*! @typedef JSObjectRef A JavaScript object. A JSObject is a JSValue. */ 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef struct OpaqueJSValue* JSObjectRef; 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* JavaScript symbol exports */ 6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch/* These rules should stay the same as in WebKit2/Shared/API/c/WKBase.h */ 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#undef JS_EXPORT 69d0825bca7fe65beaee391d30da42e937db621564Steve Block#if defined(JS_NO_EXPORT) 7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#define JS_EXPORT 71231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#elif defined(__GNUC__) && !defined(__CC_ARM) && !defined(__ARMCC__) 7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#define JS_EXPORT __attribute__((visibility("default"))) 7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#elif defined(WIN32) || defined(_WIN32) || defined(_WIN32_WCE) || defined(__CC_ARM) || defined(__ARMCC__) 7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if defined(BUILDING_JavaScriptCore) || defined(BUILDING_WTF) 7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#define JS_EXPORT __declspec(dllexport) 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#define JS_EXPORT __declspec(dllimport) 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 7965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#else /* !defined(JS_NO_EXPORT) */ 8065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#define JS_EXPORT 8165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif /* defined(JS_NO_EXPORT) */ 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 832bde8e466a4451c7319e3a072d118917957d6554Steve Block/* JS tests uses WTF but has no config.h, so we need to set the export defines here. */ 842bde8e466a4451c7319e3a072d118917957d6554Steve Block#ifndef WTF_EXPORT_PRIVATE 852bde8e466a4451c7319e3a072d118917957d6554Steve Block#define WTF_EXPORT_PRIVATE JS_EXPORT 862bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 872bde8e466a4451c7319e3a072d118917957d6554Steve Block 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef __cplusplus 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectextern "C" { 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* Script Evaluation */ 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*! 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@function JSEvaluateScript 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@abstract Evaluates a string of JavaScript. 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@param ctx The execution context to use. 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@param script A JSString containing the script to evaluate. 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@param thisObject The object to use as "this," or NULL to use the global object as "this." 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@param sourceURL A JSString containing a URL for the script's source file. This is only used when reporting exceptions. Pass NULL if you do not care to include source file information in exceptions. 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@param startingLineNumber An integer value specifying the script's starting line number in the file located at sourceURL. This is only used when reporting exceptions. 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@param exception A pointer to a JSValueRef in which to store an exception, if any. Pass NULL if you do not care to store an exception. 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@result The JSValue that results from evaluating script, or NULL if an exception is thrown. 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/ 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectJS_EXPORT JSValueRef JSEvaluateScript(JSContextRef ctx, JSStringRef script, JSObjectRef thisObject, JSStringRef sourceURL, int startingLineNumber, JSValueRef* exception); 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*! 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@function JSCheckScriptSyntax 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@abstract Checks for syntax errors in a string of JavaScript. 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@param ctx The execution context to use. 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@param script A JSString containing the script to check for syntax errors. 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@param sourceURL A JSString containing a URL for the script's source file. This is only used when reporting exceptions. Pass NULL if you do not care to include source file information in exceptions. 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@param startingLineNumber An integer value specifying the script's starting line number in the file located at sourceURL. This is only used when reporting exceptions. 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@param exception A pointer to a JSValueRef in which to store a syntax error exception, if any. Pass NULL if you do not care to store a syntax error exception. 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@result true if the script is syntactically correct, otherwise false. 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/ 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectJS_EXPORT bool JSCheckScriptSyntax(JSContextRef ctx, JSStringRef script, JSStringRef sourceURL, int startingLineNumber, JSValueRef* exception); 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*! 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@function JSGarbageCollect 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@abstract Performs a JavaScript garbage collection. 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@param ctx The execution context to use. 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@discussion JavaScript values that are on the machine stack, in a register, 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project protected by JSValueProtect, set as the global object of an execution context, 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project or reachable from any such value will not be collected. 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project During JavaScript execution, you are not required to call this function; the 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project JavaScript engine will garbage collect as needed. JavaScript values created 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project within a context group are automatically destroyed when the last reference 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project to the context group is released. 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/ 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectJS_EXPORT void JSGarbageCollect(JSContextRef ctx); 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef __cplusplus 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif /* JSBase_h */ 139