4
4
* SPDX-FileContributor: Authored By: Gustav Hartvigsson
7
[CCode (cheader_filename = "gjs/gjs.h", cprefix = "Gjs", lower_case_cprefix = "gjs_")]
8
* All comments are copid from the GJS source code, but changed to work with
13
* JavaScript bindings for GNOME
15
* Use the GNOME platform libraries in your JavaScript programs.
16
* GJS powers GNOME Shell, Polari, GNOME Documents, and many other apps.
17
* Under the hood it uses SpiderMonkey, Mozilla's JavaScript engine
18
* originally developed for Firefox.
20
[CCode (cheader_filename = "gjs/gjs.h",
22
lower_case_cprefix = "gjs_")]
11
[CCode (cheader_filename = "gjs/error-types.h", cname = "GjsError", prefix = "GJS_ERROR_", lower_case_cprefix = "gjs_error_")]
12
public errordomain GjsError {
26
[CCode (cname = "GjsError",
27
cprefix = "GJS_ERROR_",
28
lower_case_cprefix = "gjs_error_")]
29
public errordomain Error {
17
[CCode (cheader_filename = "gjs/error-types.h", cname = "GjsJSError", prefix = "GJS_JS_ERROR_", lower_case_cprefix = "gjs_js_error_")]
18
public errordomain GjsJSError {
34
[CCode (cname = "GjsJSError",
35
cprefix = "GJS_JS_ERROR_",
36
lower_case_cprefix = "gjs_js_error_")]
37
public errordomain JSError {
32
* Gjs.Context is an opaque datastructure with no outward visible
35
[CCode (cheader_filename = "gjs/context.h", cname = "GjsContext", type_id = "GJS_TYPE_CONTEXT")]
36
public class Context {
49
[CCode (cname = "GjsContext",
50
type_id = "GJS_TYPE_CONTEXT")]
51
public class Context : GLib.Object {
54
* The properties here are based on what I can read from the C++ source
59
* Path where modules to import should reside.
62
public string[] search_path {construct;}
65
* The filename of the launched JS program
67
public string program_name {get {
68
unowned string ret_val = null;
69
this.@get ("program-name", ref ret_val);
74
* The full path of the launched file or NULL if GJS was launched from
75
* the C API or interactive console.
77
public string program_path {get {
78
unowned string ret_val = null;
79
this.@get ("program-path", ref ret_val);
83
* Set this property to profile any JS code run by this context. By
84
* default, the profiler is started and stopped when you call
85
* {@link Gjs.Context.eval}.
87
* The value of this property is superseded by the GJS_ENABLE_PROFILER
88
* environment variable.
90
* You may only have one context with the profiler enabled at a time.
93
public bool profiler_enabled {construct;}
96
* Set this property to install a SIGUSR2 signal handler that starts and
97
* stops the profiler. This property also implies that
98
* {@link Gjs.Context.profiler_enabled} is set.
101
public bool profiler_sigusr2 {construct;}
104
* Whether to execute the file as a module
107
public bool exec_as_module {construct;}
38
110
[CCode (cname = "gjs_context_new")]
39
111
public Context ();
41
113
[CCode (cname = "gjs_context_new_with_search_path")]
42
public bool Context.with_search_path (string[] search_path);
114
public Context.with_search_path ([CCode (array_length = false)]
115
string[] search_path);
44
[CCode (cname = "gjs_context_file")]
45
public bool eval_file (const string filename,
117
[CCode (cname = "gjs_context_eval_file")]
118
public bool eval_file (string filename,
46
119
out int exit_status_p)
47
120
throws GLib.Error;
49
122
[CCode (cname = "gjs_context_eval_module_file")]
50
public bool eval_module_file (const string filename,
123
public bool eval_module_file (string filename,
51
124
out uint8 exit_status_p)
52
125
throws GLib.Error;
55
128
[CCode (cname = "gjs_context_eval")]
56
public bool eval (const string script,
57
const string filename,
129
public bool eval (string script,
131
out int exit_status_p)
59
132
throws GLib.Error;
61
134
[CCode (cname = "gjs_context_register_module")]
62
public bool register_module (const string identifier,
135
public bool register_module (string identifier,
64
137
throws GLib.Error;
66
139
[CCode (cname = "gjs_context_eval_module")]
67
public bool eval_module (const string identifier,
140
public bool eval_module (string identifier,
68
141
out uint8 exit_code)
69
142
throws GLib.Error;
71
144
[CCode (cname = "gjs_context_define_string_array")]
72
public bool define_string_array (const string array_name,
73
[CCode array_length_pos = 1.1]
74
const string[] array_values)
145
public bool define_string_array (string array_name,
146
[CCode (array_length_pos = 1.1)]
147
string[] array_values)
75
148
throws GLib.Error;
77
150
[CCode (cname = "gjs_context_set_argv")]
78
public void set_argv ([CCode array_length_pos = 0.1]
151
public void set_argv ([CCode (array_length_pos = 0.1,
152
type = "const char**")]
79
153
string[] array_values);
156
* Returns a newly-allocated list containing all known instances of
157
* {@link Gjs.Context}. This is useful for operating on the contexts from a
158
* process-global situation such as a debugger.
160
* @return Known {@link Gjs.Context} instances
81
162
[CCode (cname = "gjs_context_get_all")]
82
public GLib.List get_all ();
163
public GLib.List<Context> get_all ();
84
165
[CCode (cname = "gjs_context_get_current")]
85
166
public static Context get_current ();
87
168
[CCode (cname = "gjs_context_make_current")]
88
169
public void make_current ();
172
* Returns a pointer to the underlying native context. For SpiderMonkey,
173
* this is a JSContext *
90
175
[CCode (cname = "gjs_context_get_native_context")]
91
public pointer get_native_context ();
176
public GLib.pointer get_native_context ();
93
178
[CCode (cname = "gjs_context_print_stack_stderr")]
94
179
public void print_stack_stderr ();
182
* Similar to the Spidermonkey JS_MaybeGC() call which
183
* heuristically looks at JS runtime memory usage and
184
* may initiate a garbage collection.
186
* This function always unconditionally invokes JS_MaybeGC(), but
187
* additionally looks at memory usage from the system malloc()
188
* when available, and if the delta has grown since the last run
189
* significantly, also initiates a full JavaScript garbage
190
* collection. The idea is that since GJS is a bridge between
191
* JavaScript and system libraries, and JS objects act as proxies
192
* for these system memory objects, GJS consumers need a way to
193
* hint to the runtime that it may be a good idea to try a
196
* A good time to call this function is when your application
197
* transitions to an idle state.
96
199
[CCode (cname = "gjs_context_maybe_gc")]
97
200
public void maybe_gc ();
203
* Initiate a full GC; may or may not block until complete. This
204
* function just calls Spidermonkey JS_GC().
99
206
[CCode (cname = "gjs_context_gc")]
100
207
public void gc ();
210
* Returns the profiler's internal instance of {@link Gjs.Profiler}
211
* for you to customize, or %NULL if profiling is not enabled on this
212
* {@link Gjs.Context}.
214
* @returns {@link Gjs.Profiler}
102
216
[CCode (cname = "gjs_context_get_profiler")]
103
217
public Profiler get_profiler ();
105
[CCode (cname = "gjs_profiler_chain_sgnal")]
106
public bool profiler_chain_signal (Posix.siginfo_t info)
108
219
[CCode (cname = "gjs_context_setup_debugger_console")]
109
220
public void setup_debugger_console ();
112
[CCode (cheader_filename = "gjs/context.h", cname = "gjs_dump_stack")]
223
[CCode (cheader_filename = "gjs/context.h",
224
cname = "gjs_dumpstack")]
113
225
public void dump_stack ();
115
[CCode (cheader_filename = "gjs/context.h", cname = "gjs_get_js_version")]
116
public const string get_js_version ();
228
* Returns the underlying version of the JS engine.
232
[CCode (cheader_filename = "gjs/context.h",
233
cname = "gjs_get_js_version")]
234
public string get_js_version ();
119
237
* This class has no visible _new function, can only be created from
122
[CCode (cheader_filename = "gjs/profiler.h", cname = "GjsProfiler", type_id = "GJS_TYPE_PROFILER")]
123
public class Profiler {
240
[CCode (cheader_filename = "gjs/profiler.h",
241
cname = "GjsProfiler",
242
type_id = "GJS_TYPE_PROFILER")]
243
public class Profiler : GLib.Object {
245
* Set the capture writer to which profiling data is written when the
246
* ''this'' is stopped.
248
* @param capture A {SysprofCaptureWriter}
125
250
[CCode (cname = "gjs_profiler_set_capture_writer")]
126
set_capture_writer (pointer capture);
251
public void set_capture_writer (GLib.pointer capture);
254
* Set the file to which profiling data is written when the ''this'' is
255
* stopped. By default, this is `gjs-$PID.syscap` in the current directory.
128
257
[CCode (cname = "gjs_profiler_set_filename")]
129
set_filename (const string filename);
258
public void set_filename (string filename);
131
261
[CCode (cname = "gjs_profiler_set_fd")]
262
public void set_fd (int fd);
265
* As expected, this starts the {@link Gjs.Profiler}.
267
* This will enable the underlying JS profiler and register a POSIX timer to
268
* deliver SIGPROF on the configured sampling frequency.
270
* To reduce sampling overhead, Gjs.Profiler stashes information
271
* about the profile to be calculated once the profiler has been disabled.
272
* Calling Gjs.Profiler.stop() will result in that delayed work to be
275
* You should call Gjs.Profiler.stop() when the profiler is no longer
134
278
[CCode (cname = "gjs_profiler_start")]
279
public void start ();
282
* Stops a currently running {@link Gjs.Profiler}. If the profiler is not
283
* running, this function will do nothing.
285
* Some work may be delayed until the end of the capture. Such delayed work
286
* includes flushing the resulting samples and file location information to
289
* This may block while writing to disk. Generally, the writes are delivered
290
* to a tmpfs device, and are therefore negligible.
137
292
[CCode (cname = "gjs_profiler_stop")]
296
* Use this to pass a signal info caught by another signal handler to a
297
* {@link Gjs.Profiler}. This might be needed if you have your own complex
298
* signal handling system for which Gjs.Profiler cannot simply add a SIGUSR2
301
* This function should only be called from the JS thread.
303
* @return true if the signal was handled.
305
[CCode (cname = "gjs_profiler_chain_signal")]
306
public static bool chain_signal (Context ctx,
307
Posix.siginfo_t info);
141
[CCode (cheader_filename = "gjs/mem.h", cname = "gjs_memory_report")]
142
memory_report (const string where,
310
[CCode (cheader_filename = "gjs/mem.h",
311
cname = "gjs_memory_report")]
312
public void memory_report (string where,
143
313
bool die_if_fail);
145
[CCode (cheader_filename = "gjs/coverage.h", cname = "GjsProfiler", type_id = "GJS_TYPE_COVERAGE")]
146
public class Coverage {
315
[CCode (cheader_filename = "gjs/coverage.h",
316
cname = "GjsProfiler",
317
type_id = "GJS_TYPE_COVERAGE")]
318
public class Coverage : GLib.Object {
321
* Prefixes of files on which to perform coverage analysis
323
public string prefixes {construct;}
326
* A context to gather coverage stats for
328
public Context context {construct;}
331
* Directory handle at which to output coverage statistics
333
public GLib.File output_directory {construct;}
336
* Creates a new {@link Gjs.Coverage} object that collects coverage
337
* information for any scripts run in context.
339
* Scripts which were provided as part of {@link prefixes} will be written
340
* out to {@link output_dir}, in the same directory structure relative to
341
* the source dir where the tests were run.
343
* @param coverage_prefixes A null-terminated strv of prefixes of files on
344
* which to record code coverage
346
* @param coverage_context A {@link Gjs.Context} object
348
* @param output_dir A {@link GLib.File} handle to a directory in which to
349
* write coverage information
148
351
[CCode (cname = "gjs_coverage_new")]
149
public Coverage (const string coverage_prefixes
352
public Coverage (string coverage_prefixes,
150
353
Context coverage_context,
151
354
GLib.File output_dir);
357
* Scripts which were provided as part of the {@link Gjs.Coverage.prefixes}
358
* construction property will be written out to {output_directory}, in the
359
* same directory structure relative to the source dir where the tests were
362
* This function takes all available statistics and writes them out to
363
* either the file provided or to files of the pattern (filename).info in
364
* the same directory as the scanned files. It will provide coverage data
365
* for all files ending with ".js" in the coverage directories.
153
367
[CCode (cname = "gjs_coverage_write_statistics")]
154
368
public void write_statistics ();
371
* This function must be called before creating any {@link Gjs.Context},
372
* if you intend to use any {@link Gjs.Coverage} APIs.
156
374
[CCode (cname = "gjs_coverage_enable")]
157
public static enable ();
375
public static void enable ();