## JSCContext JSCContext — JavaScript execution context |

## Functions

void | (*JSCExceptionHandler) ()
JSCContext * | jsc_context_new ()
JSCContext * | jsc_context_new_with_virtual_machine ()
JSCVirtualMachine * | jsc_context_get_virtual_machine ()
JSCException * | jsc_context_get_exception ()
void | jsc_context_throw ()
void | jsc_context_throw_exception ()
void | jsc_context_clear_exception ()
void | jsc_context_push_exception_handler ()
void | jsc_context_pop_exception_handler ()
JSCContext * | jsc_context_get_current ()
JSCValue * | jsc_context_evaluate ()
JSCValue * | jsc_context_evaluate_with_source_uri ()
void | jsc_context_set_value ()
JSCValue * | jsc_context_get_value ()
JSCClass * | jsc_context_register_class ()

## Properties

JSCVirtualMachine * | virtual-machine | Read / Write / Construct Only

## Types and Values

| JSCContext

## Object Hierarchy

        GObject
        ╰── JSCContext

## Description

JSCContext represents a JavaScript execution context, where all operations take place and where the values will be associated.

When a new context is created, a global object is allocated and the built-in JavaScript objects (Object, Function, String, Array) are populated. You can execute JavaScript in the context by using `jsc_context_evaluate()` or `jsc_context_evaluate_with_source_uri()`. It's also possible to register custom objects in the context with `jsc_context_register_class()`.

## Functions

### JSCExceptionHandler ()

    void
    (*JSCExceptionHandler) (JSCContext *context,
                            JSCException *exception,
                            gpointer user_data);

Function used to handle JavaScript exceptions in a JSCContext.

#### Parameters

context | a JSCContext |
exception | a JSCException |
user_data | user data |

### jsc_context_new ()

    JSCContext *
    jsc_context_new (void);

Create a new JSCContext. The context is created in a new JSCVirtualMachine. Use `jsc_context_new_with_virtual_machine()` to create a new JSCContext in an existing JSCVirtualMachine.

#### Returns

the newly created JSCContext.

[transfer full]

### jsc_context_new_with_virtual_machine ()

    JSCContext *
    jsc_context_new_with_virtual_machine (JSCVirtualMachine *vm);

Create a new JSCContext in `virtual_machine` .

#### Parameters

vm | a JSCVirtualMachine |

#### Returns

the newly created JSCContext.

[transfer full]

### jsc_context_get_virtual_machine ()

    JSCVirtualMachine *
    jsc_context_get_virtual_machine (JSCContext *context);

Get the JSCVirtualMachine where `context` was created.

#### Parameters

context | a JSCContext |

#### Returns

the JSCVirtualMachine where the JSCContext was created.

[transfer none]

### jsc_context_get_exception ()

    JSCException *
    jsc_context_get_exception (JSCContext *context);

Get the last unhandled exception thrown in `context` by API functions calls.

#### Parameters

context | a JSCContext |

#### Returns

a JSCException or `NULL` if there isn't any unhandled exception in the JSCContext.

[transfer none][nullable]

### jsc_context_throw ()

    void
    jsc_context_throw (JSCContext *context,
                       const char *error_message);

Throw an exception to `context` using the given error message. The created JSCException can be retrieved with `jsc_context_get_exception()`.

#### Parameters

context | a JSCContext |
error_message | an error message |

### jsc_context_throw_exception ()

    void
    jsc_context_throw_exception (JSCContext *context,
                                 JSCException *exception);

Throw `exception` to `context` .

#### Parameters

context | a JSCContext |
exception | a JSCException |

### jsc_context_clear_exception ()

    void
    jsc_context_clear_exception (JSCContext *context);

Clear the uncaught exception in `context` if any.

#### Parameters

context | a JSCContext |

### jsc_context_push_exception_handler ()

    void
    jsc_context_push_exception_handler (JSCContext *context,
                                        JSCExceptionHandler handler,
                                        gpointer user_data,
                                        GDestroyNotify destroy_notify);

Push an exception handler in `context` . Whenever a JavaScript exception happens in the JSCContext, the given `handler` will be called. The default JSCExceptionHandler simply calls `jsc_context_throw_exception()` to throw the exception to the JSCContext. If you don't want to catch the exception, but only get notified about it, call `jsc_context_throw_exception()` in `handler` like the default one does. The last exception handler pushed is the only one used by the JSCContext, use `jsc_context_pop_exception_handler()` to remove it and set the previous one. When `handler` is removed from the context, `destroy_notify` i called with `user_data` as parameter.

#### Parameters

context | a JSCContext |
handler | a JSCExceptionHandler |
user_data | user data to pass to `handler` . | [closure]
destroy_notify | destroy notifier for `user_data` . | [nullable]

### jsc_context_pop_exception_handler ()

    void
    jsc_context_pop_exception_handler (JSCContext *context);

Remove the last JSCExceptionHandler previously pushed to `context` with `jsc_context_push_exception_handler()`.

#### Parameters

context | a JSCContext |

### jsc_context_get_current ()

    JSCContext *
    jsc_context_get_current (void);

Get the JSCContext that is currently executing a function. This should only be called within a function or method callback, otherwise `NULL` will be returned.

#### Returns

the JSCContext that is currently executing.

[transfer none][nullable]

### jsc_context_evaluate ()

    JSCValue *
    jsc_context_evaluate (JSCContext *context,
                          const char *code,
                          gssize length);

Evaluate `code` in `context` .

#### Parameters

context | a JSCContext |
code | a JavaScript script to evaluate |
length | length of `code` , or -1 if `code` is a nul-terminated string |

#### Returns

a JSCValue representing the last value generated by the script.

[transfer full]

### jsc_context_evaluate_with_source_uri ()

    JSCValue *
    jsc_context_evaluate_with_source_uri (JSCContext *context,
                                          const char *code,
                                          gssize length,
                                          const char *uri);

Evaluate `code` in `context` using `uri` as the source URI. This is exactly the same as `jsc_context_evaluate()` but `uri` will be shown in exceptions. The source `uri` doesn't affect the behavior of the script.

#### Parameters

context | a JSCContext |
code | a JavaScript script to evaluate |
length | length of `code` , or -1 if `code` is a nul-terminated string |
uri | the source URI |

#### Returns

a JSCValue representing the last value generated by the script.

[transfer full]

### jsc_context_set_value ()

    void
    jsc_context_set_value (JSCContext *context,
                           const char *name,
                           JSCValue *value);

Set a property of `context` global object with `name` and `value` .

#### Parameters

context | a JSCContext |
name | the value name |
value | a JSCValue |

### jsc_context_get_value ()

    JSCValue *
    jsc_context_get_value (JSCContext *context,
                           const char *name);

Get a property of `context` global object with `name` .

#### Parameters

context | a JSCContext |
name | the value name |

#### Returns

a JSCValue.

[transfer full]

### jsc_context_register_class ()

    JSCClass *
    jsc_context_register_class (JSCContext *context,
                                const char *name,
                                JSCClass *parent_class,
                                JSCClassVTable *vtable,
                                GDestroyNotify destroy_notify);

Register a custom class in `context` using the given `name` . If the new class inherits from another JSCClass, the parent should be passed as `parent_class` , otherwise `NULL` should be used. The optional `vtable` parameter allows to provide a custom implementation for handling the class, for example, to handle external properties not added to the prototype. When an instance of the JSCClass is cleared in the context, `destroy_notify` is called with the instance as parameter.

#### Parameters

context | a JSCContext |
name | the class name |
parent_class | a JSCClass or `NULL`. | [nullable]
vtable | an optional JSCClassVTable or `NULL`. | [nullable]
destroy_notify | a destroy notifier for class instances. | [nullable]

#### Returns

a JSCClass.

[transfer none]

## Types and Values

### JSCContext

    typedef struct _JSCContext JSCContext;

## Property Details

### The `“virtual-machine”` property

      “virtual-machine”          JSCVirtualMachine *

The JSCVirtualMachine in which the context was created.

Flags: Read / Write / Construct Only