blob: 01c1b286ebd6c70bbf2d604d00af5d608f1dc363 [file] [log] [blame]
ggaren2593cdc2006-06-21 21:09:19 +00001/*
mjs@apple.com92047332014-03-15 04:08:27 +00002 * Copyright (C) 2006 Apple Inc. All rights reserved.
ggaren2593cdc2006-06-21 21:09:19 +00003 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
mjs@apple.com92047332014-03-15 04:08:27 +000013 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
ggaren2593cdc2006-06-21 21:09:19 +000014 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
mjs@apple.com92047332014-03-15 04:08:27 +000016 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
ggaren2593cdc2006-06-21 21:09:19 +000017 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
joepeck@webkit.org92564972014-01-28 07:29:57 +000023 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
ggaren2593cdc2006-06-21 21:09:19 +000024 */
25
26#ifndef JSBase_h
27#define JSBase_h
28
hausmann@webkit.org030c82a2008-06-16 21:21:41 +000029#ifndef __cplusplus
ggaren6105a722006-07-14 17:41:10 +000030#include <stdbool.h>
hausmann@webkit.org030c82a2008-06-16 21:21:41 +000031#endif
ggaren6105a722006-07-14 17:41:10 +000032
barraclough@apple.comfc381882013-01-02 03:51:15 +000033#ifdef __OBJC__
34#import <Foundation/Foundation.h>
oliver@apple.comacd36902014-09-30 17:27:10 +000035#endif
barraclough@apple.comfc381882013-01-02 03:51:15 +000036
ggarenab28d0b2006-07-07 20:38:16 +000037/* JavaScript engine interface */
38
ap@webkit.org17b9b2c2008-07-30 06:05:11 +000039/*! @typedef JSContextGroupRef A group that associates JavaScript contexts with one another. Contexts in the same group may share and exchange JavaScript objects. */
40typedef const struct OpaqueJSContextGroup* JSContextGroupRef;
41
ggarenab28d0b2006-07-07 20:38:16 +000042/*! @typedef JSContextRef A JavaScript execution context. Holds the global object and other execution state. */
ggarendd0d0e12006-07-17 04:41:01 +000043typedef const struct OpaqueJSContext* JSContextRef;
ggaren41694b62006-07-14 22:39:58 +000044
45/*! @typedef JSGlobalContextRef A global JavaScript execution context. A JSGlobalContext is a JSContext. */
ggarendd0d0e12006-07-17 04:41:01 +000046typedef struct OpaqueJSContext* JSGlobalContextRef;
ggaren41694b62006-07-14 22:39:58 +000047
ggaren@apple.com38e14992008-01-16 05:23:06 +000048/*! @typedef JSStringRef A UTF16 character buffer. The fundamental string representation in JavaScript. */
ggarendd0d0e12006-07-17 04:41:01 +000049typedef struct OpaqueJSString* JSStringRef;
ggaren41694b62006-07-14 22:39:58 +000050
ggarenab28d0b2006-07-07 20:38:16 +000051/*! @typedef JSClassRef A JavaScript class. Used with JSObjectMake to construct objects with custom behavior. */
ggarendd0d0e12006-07-17 04:41:01 +000052typedef struct OpaqueJSClass* JSClassRef;
ggaren41694b62006-07-14 22:39:58 +000053
mjsb3598b82006-07-16 21:06:28 +000054/*! @typedef JSPropertyNameArrayRef An array of JavaScript property names. */
ggarendd0d0e12006-07-17 04:41:01 +000055typedef struct OpaqueJSPropertyNameArray* JSPropertyNameArrayRef;
ggaren41694b62006-07-14 22:39:58 +000056
ggaren0503a4b2006-07-18 04:33:46 +000057/*! @typedef JSPropertyNameAccumulatorRef An ordered set used to collect the names of a JavaScript object's properties. */
ggarendd0d0e12006-07-17 04:41:01 +000058typedef struct OpaqueJSPropertyNameAccumulator* JSPropertyNameAccumulatorRef;
ggaren2593cdc2006-06-21 21:09:19 +000059
keith_miller@apple.com9eced152016-03-11 02:46:03 +000060/*! @typedef JSTypedArrayBytesDeallocator A function used to deallocate bytes passed to a Typed Array constructor. The function should take two arguments. The first is a pointer to the bytes that were originally passed to the Typed Array constructor. The second is a pointer to additional information desired at the time the bytes are to be freed. */
61typedef void (*JSTypedArrayBytesDeallocator)(void* bytes, void* deallocatorContext);
ggarenab28d0b2006-07-07 20:38:16 +000062
63/* JavaScript data types */
64
65/*! @typedef JSValueRef A JavaScript value. The base type for all JavaScript values, and polymorphic functions on them. */
ggarendd0d0e12006-07-17 04:41:01 +000066typedef const struct OpaqueJSValue* JSValueRef;
ggaren41694b62006-07-14 22:39:58 +000067
ggarenab28d0b2006-07-07 20:38:16 +000068/*! @typedef JSObjectRef A JavaScript object. A JSObject is a JSValue. */
ggarendd0d0e12006-07-17 04:41:01 +000069typedef struct OpaqueJSValue* JSObjectRef;
ggaren2593cdc2006-06-21 21:09:19 +000070
don.olmstead@sony.com628a15e2017-11-21 02:48:14 +000071/* Clang's __has_declspec_attribute emulation */
72/* https://clang.llvm.org/docs/LanguageExtensions.html#has-declspec-attribute */
73
74#ifndef __has_declspec_attribute
75#define __has_declspec_attribute(x) 0
76#endif
77
alp@webkit.orgd8bfe3d2007-11-28 04:31:51 +000078/* JavaScript symbol exports */
mcatanzaro@igalia.comadd9a252018-01-15 23:49:02 +000079/* These rules should stay the same as in WebKit/Shared/API/c/WKDeclarationSpecifiers.h */
alp@webkit.orgd8bfe3d2007-11-28 04:31:51 +000080
81#undef JS_EXPORT
eric@webkit.orgcf622b92009-12-28 16:58:28 +000082#if defined(JS_NO_EXPORT)
laszlo.1.gombos@nokia.comd104ad82011-01-14 19:50:47 +000083#define JS_EXPORT
don.olmstead@sony.com628a15e2017-11-21 02:48:14 +000084#elif defined(WIN32) || defined(_WIN32) || defined(__CC_ARM) || defined(__ARMCC__) || (__has_declspec_attribute(dllimport) && __has_declspec_attribute(dllexport))
commit-queue@webkit.org337179a2012-07-03 13:43:13 +000085#if defined(BUILDING_JavaScriptCore) || defined(STATICALLY_LINKED_WITH_JavaScriptCore)
laszlo.1.gombos@nokia.comd104ad82011-01-14 19:50:47 +000086#define JS_EXPORT __declspec(dllexport)
alp@webkit.orgd8bfe3d2007-11-28 04:31:51 +000087#else
laszlo.1.gombos@nokia.comd104ad82011-01-14 19:50:47 +000088#define JS_EXPORT __declspec(dllimport)
alp@webkit.orgd8bfe3d2007-11-28 04:31:51 +000089#endif
don.olmstead@sony.com628a15e2017-11-21 02:48:14 +000090#elif defined(__GNUC__)
91#define JS_EXPORT __attribute__((visibility("default")))
laszlo.1.gombos@nokia.comd104ad82011-01-14 19:50:47 +000092#else /* !defined(JS_NO_EXPORT) */
93#define JS_EXPORT
94#endif /* defined(JS_NO_EXPORT) */
alp@webkit.orgd8bfe3d2007-11-28 04:31:51 +000095
ggaren6105a722006-07-14 17:41:10 +000096#ifdef __cplusplus
97extern "C" {
98#endif
99
100/* Script Evaluation */
101
102/*!
ggaren@apple.com688249b2008-09-24 20:13:05 +0000103@function JSEvaluateScript
darin91eab012006-07-17 15:19:46 +0000104@abstract Evaluates a string of JavaScript.
105@param ctx The execution context to use.
106@param script A JSString containing the script to evaluate.
107@param thisObject The object to use as "this," or NULL to use the global object as "this."
joepeck@webkit.org824b7472014-03-11 02:39:40 +0000108@param sourceURL A JSString containing a URL for the script's source file. This is used by debuggers and when reporting exceptions. Pass NULL if you do not care to include source file information.
joepeck@webkit.org92564972014-01-28 07:29:57 +0000109@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. The value is one-based, so the first line is line 1 and invalid values are clamped to 1.
darin91eab012006-07-17 15:19:46 +0000110@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.
111@result The JSValue that results from evaluating script, or NULL if an exception is thrown.
ggaren6105a722006-07-14 17:41:10 +0000112*/
alp@webkit.orgd8bfe3d2007-11-28 04:31:51 +0000113JS_EXPORT JSValueRef JSEvaluateScript(JSContextRef ctx, JSStringRef script, JSObjectRef thisObject, JSStringRef sourceURL, int startingLineNumber, JSValueRef* exception);
ggaren6105a722006-07-14 17:41:10 +0000114
115/*!
116@function JSCheckScriptSyntax
darin91eab012006-07-17 15:19:46 +0000117@abstract Checks for syntax errors in a string of JavaScript.
118@param ctx The execution context to use.
119@param script A JSString containing the script to check for syntax errors.
120@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.
joepeck@webkit.org92564972014-01-28 07:29:57 +0000121@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. The value is one-based, so the first line is line 1 and invalid values are clamped to 1.
darin91eab012006-07-17 15:19:46 +0000122@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.
123@result true if the script is syntactically correct, otherwise false.
ggaren6105a722006-07-14 17:41:10 +0000124*/
alp@webkit.orgd8bfe3d2007-11-28 04:31:51 +0000125JS_EXPORT bool JSCheckScriptSyntax(JSContextRef ctx, JSStringRef script, JSStringRef sourceURL, int startingLineNumber, JSValueRef* exception);
ggaren6105a722006-07-14 17:41:10 +0000126
127/*!
ggaren@apple.com688249b2008-09-24 20:13:05 +0000128@function JSGarbageCollect
joepeck@webkit.org92564972014-01-28 07:29:57 +0000129@abstract Performs a JavaScript garbage collection.
ap@webkit.org17b9b2c2008-07-30 06:05:11 +0000130@param ctx The execution context to use.
joepeck@webkit.org92564972014-01-28 07:29:57 +0000131@discussion JavaScript values that are on the machine stack, in a register,
132 protected by JSValueProtect, set as the global object of an execution context,
ap@webkit.org17b9b2c2008-07-30 06:05:11 +0000133 or reachable from any such value will not be collected.
134
joepeck@webkit.org92564972014-01-28 07:29:57 +0000135 During JavaScript execution, you are not required to call this function; the
ap@webkit.org17b9b2c2008-07-30 06:05:11 +0000136 JavaScript engine will garbage collect as needed. JavaScript values created
137 within a context group are automatically destroyed when the last reference
138 to the context group is released.
ggaren6105a722006-07-14 17:41:10 +0000139*/
alp@webkit.orgd8bfe3d2007-11-28 04:31:51 +0000140JS_EXPORT void JSGarbageCollect(JSContextRef ctx);
ggaren6105a722006-07-14 17:41:10 +0000141
142#ifdef __cplusplus
143}
144#endif
145
fpizlo@apple.comdcb592d2018-04-19 19:33:03 +0000146/* Enable the Objective-C API for platforms with a modern runtime. NOTE: This is duplicated in VM.h. */
mhahnenberg@apple.comf0712f92013-02-21 20:00:33 +0000147#if !defined(JSC_OBJC_API_ENABLED)
commit-queue@webkit.org2eb68352016-12-21 04:29:44 +0000148#if (defined(__clang__) && defined(__APPLE__) && ((defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && !defined(__i386__)) || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE)))
149#define JSC_OBJC_API_ENABLED 1
150#else
151#define JSC_OBJC_API_ENABLED 0
152#endif
mhahnenberg@apple.comf0712f92013-02-21 20:00:33 +0000153#endif
barraclough@apple.comfc381882013-01-02 03:51:15 +0000154
mrowe@apple.comeef17d72008-03-19 07:48:37 +0000155#endif /* JSBase_h */