blob: 3832381192d263bed72b17b03e620461ef443c29 [file] [log] [blame]
/*
* Copyright (C) 2018 Igalia S.L.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#if !defined(__JSC_H_INSIDE__) && !defined(JSC_COMPILATION) && !defined(WEBKIT2_COMPILATION)
#error "Only <jsc/jsc.h> can be included directly."
#endif
#ifndef JSCValue_h
#define JSCValue_h
#include <glib-object.h>
#include <jsc/JSCDefines.h>
G_BEGIN_DECLS
#define JSC_TYPE_VALUE (jsc_value_get_type())
#define JSC_VALUE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), JSC_TYPE_VALUE, JSCValue))
#define JSC_IS_VALUE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), JSC_TYPE_VALUE))
#define JSC_VALUE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), JSC_TYPE_VALUE, JSCValueClass))
#define JSC_IS_VALUE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), JSC_TYPE_VALUE))
#define JSC_VALUE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), JSC_TYPE_VALUE, JSCValueClass))
typedef struct _JSCValue JSCValue;
typedef struct _JSCValueClass JSCValueClass;
typedef struct _JSCValuePrivate JSCValuePrivate;
typedef struct _JSCClass JSCClass;
typedef struct _JSCContext JSCContext;
typedef enum {
JSC_VALUE_PROPERTY_CONFIGURABLE = 1 << 0,
JSC_VALUE_PROPERTY_ENUMERABLE = 1 << 1,
JSC_VALUE_PROPERTY_WRITABLE = 1 << 2
} JSCValuePropertyFlags;
typedef enum {
JSC_TYPED_ARRAY_NONE = 0,
JSC_TYPED_ARRAY_INT8,
JSC_TYPED_ARRAY_INT16,
JSC_TYPED_ARRAY_INT32,
JSC_TYPED_ARRAY_INT64,
JSC_TYPED_ARRAY_UINT8,
JSC_TYPED_ARRAY_UINT8_CLAMPED,
JSC_TYPED_ARRAY_UINT16,
JSC_TYPED_ARRAY_UINT32,
JSC_TYPED_ARRAY_UINT64,
JSC_TYPED_ARRAY_FLOAT32,
JSC_TYPED_ARRAY_FLOAT64,
} JSCTypedArrayType;
struct _JSCValue {
GObject parent;
/*< private >*/
JSCValuePrivate *priv;
};
struct _JSCValueClass {
GObjectClass parent_class;
void (*_jsc_reserved0) (void);
void (*_jsc_reserved1) (void);
void (*_jsc_reserved2) (void);
void (*_jsc_reserved3) (void);
};
JSC_API GType
jsc_value_get_type (void);
JSC_API JSCContext *
jsc_value_get_context (JSCValue *value);
JSC_API JSCValue *
jsc_value_new_undefined (JSCContext *context);
JSC_API gboolean
jsc_value_is_undefined (JSCValue *value);
JSC_API JSCValue *
jsc_value_new_null (JSCContext *context);
JSC_API gboolean
jsc_value_is_null (JSCValue *value);
JSC_API JSCValue *
jsc_value_new_number (JSCContext *context,
double number);
JSC_API gboolean
jsc_value_is_number (JSCValue *value);
JSC_API double
jsc_value_to_double (JSCValue *value);
JSC_API gint32
jsc_value_to_int32 (JSCValue *value);
JSC_API JSCValue *
jsc_value_new_boolean (JSCContext *context,
gboolean value);
JSC_API gboolean
jsc_value_is_boolean (JSCValue *value);
JSC_API gboolean
jsc_value_to_boolean (JSCValue *value);
JSC_API JSCValue *
jsc_value_new_string (JSCContext *context,
const char *string);
JSC_API JSCValue *
jsc_value_new_string_from_bytes (JSCContext *context,
GBytes *bytes);
JSC_API gboolean
jsc_value_is_string (JSCValue *value);
JSC_API char *
jsc_value_to_string (JSCValue *value);
JSC_API GBytes *
jsc_value_to_string_as_bytes (JSCValue *value);
JSC_API JSCValue *
jsc_value_new_array (JSCContext *context,
GType first_item_type,
...);
JSC_API JSCValue *
jsc_value_new_array_from_garray (JSCContext *context,
GPtrArray *array);
JSC_API JSCValue *
jsc_value_new_array_from_strv (JSCContext *context,
const char *const *strv);
JSC_API gboolean
jsc_value_is_array (JSCValue *value);
JSC_API JSCValue *
jsc_value_new_object (JSCContext *context,
gpointer instance,
JSCClass *jsc_class);
JSC_API gboolean
jsc_value_is_object (JSCValue *value);
JSC_API gboolean
jsc_value_object_is_instance_of (JSCValue *value,
const char *name);
JSC_API void
jsc_value_object_set_property (JSCValue *value,
const char *name,
JSCValue *property);
JSC_API JSCValue *
jsc_value_object_get_property (JSCValue *value,
const char *name);
JSC_API void
jsc_value_object_set_property_at_index (JSCValue *value,
guint index,
JSCValue *property);
JSC_API JSCValue *
jsc_value_object_get_property_at_index (JSCValue *value,
guint index);
JSC_API gboolean
jsc_value_object_has_property (JSCValue *value,
const char *name);
JSC_API gboolean
jsc_value_object_delete_property (JSCValue *value,
const char *name);
JSC_API gchar **
jsc_value_object_enumerate_properties (JSCValue *value);
JSC_API JSCValue *
jsc_value_object_invoke_method (JSCValue *value,
const char *name,
GType first_parameter_type,
...) G_GNUC_WARN_UNUSED_RESULT;
JSC_API JSCValue *
jsc_value_object_invoke_methodv (JSCValue *value,
const char *name,
guint n_parameters,
JSCValue **parameters) G_GNUC_WARN_UNUSED_RESULT;
JSC_API void
jsc_value_object_define_property_data (JSCValue *value,
const char *property_name,
JSCValuePropertyFlags flags,
JSCValue *property_value);
JSC_API void
jsc_value_object_define_property_accessor (JSCValue *value,
const char *property_name,
JSCValuePropertyFlags flags,
GType property_type,
GCallback getter,
GCallback setter,
gpointer user_data,
GDestroyNotify destroy_notify);
JSC_API JSCValue *
jsc_value_new_function (JSCContext *context,
const char *name,
GCallback callback,
gpointer user_data,
GDestroyNotify destroy_notify,
GType return_type,
guint n_params,
...);
JSC_API JSCValue *
jsc_value_new_functionv (JSCContext *context,
const char *name,
GCallback callback,
gpointer user_data,
GDestroyNotify destroy_notify,
GType return_type,
guint n_parameters,
GType *parameter_types);
JSC_API JSCValue *
jsc_value_new_function_variadic (JSCContext *context,
const char *name,
GCallback callback,
gpointer user_data,
GDestroyNotify destroy_notify,
GType return_type);
JSC_API gboolean
jsc_value_is_function (JSCValue *value);
JSC_API JSCValue *
jsc_value_function_call (JSCValue *value,
GType first_parameter_type,
...) G_GNUC_WARN_UNUSED_RESULT;
JSC_API JSCValue *
jsc_value_function_callv (JSCValue *value,
guint n_parameters,
JSCValue **parameters) G_GNUC_WARN_UNUSED_RESULT;
JSC_API JSCValue *
jsc_value_new_array_buffer (JSCContext *context,
gpointer data,
gsize size,
GDestroyNotify destroy_notify,
gpointer user_data);
JSC_API gboolean
jsc_value_is_array_buffer (JSCValue *value);
JSC_API gpointer
jsc_value_array_buffer_get_data (JSCValue *value,
gsize *size);
JSC_API gsize
jsc_value_array_buffer_get_size (JSCValue *value);
JSC_API JSCValue *
jsc_value_new_typed_array (JSCContext *context,
JSCTypedArrayType type,
gsize length);
JSC_API JSCValue *
jsc_value_new_typed_array_with_buffer (JSCValue *array_buffer,
JSCTypedArrayType type,
gsize offset,
gssize length);
JSC_API gboolean
jsc_value_is_typed_array (JSCValue *value);
JSC_API JSCTypedArrayType
jsc_value_typed_array_get_type (JSCValue *value);
JSC_API gpointer
jsc_value_typed_array_get_data (JSCValue *value,
gsize *length);
JSC_API gsize
jsc_value_typed_array_get_length (JSCValue *value);
JSC_API gsize
jsc_value_typed_array_get_size (JSCValue *value);
JSC_API gsize
jsc_value_typed_array_get_offset (JSCValue *value);
JSC_API JSCValue *
jsc_value_typed_array_get_buffer (JSCValue *value);
JSC_API gboolean
jsc_value_is_constructor (JSCValue *value);
JSC_API JSCValue *
jsc_value_constructor_call (JSCValue *value,
GType first_parameter_type,
...);
JSC_API JSCValue *
jsc_value_constructor_callv (JSCValue *value,
guint n_parameters,
JSCValue **parameters);
JSC_API JSCValue *
jsc_value_new_from_json (JSCContext *context,
const char *json);
JSC_API char *
jsc_value_to_json (JSCValue *value,
guint indent);
G_END_DECLS
#endif /* JSCValue_h */