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