[gjs] coverage: Use global bootstrap to add JS coverage code
- From: Philip Chimento <pchimento src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gjs] coverage: Use global bootstrap to add JS coverage code
- Date: Sat, 23 Sep 2017 04:13:31 +0000 (UTC)
commit 9b0beff7f6d31127ca9c9a622a0ffe6754a19deb
Author: Philip Chimento <philip chimento gmail com>
Date: Sat Sep 9 17:17:09 2017 -0700
coverage: Use global bootstrap to add JS coverage code
This takes advantage of the new bootstrap stage of
gjs_define_global_properties() to run the JS coverage code in the
coverage compartment.
This moves imports.coverage to imports._bootstrap.coverage, which makes
sense because the code in imports.coverage was not useful for GJS
scripts.
https://bugzilla.gnome.org/show_bug.cgi?id=777724
gjs/coverage.cpp | 84 ++-------------------------------
installed-tests/js/testCoverage.js | 2 +-
modules/{ => _bootstrap}/coverage.js | 0
modules/modules.gresource.xml | 2 +-
4 files changed, 8 insertions(+), 80 deletions(-)
---
diff --git a/gjs/coverage.cpp b/gjs/coverage.cpp
index 4f9c7f2..d79fad3 100644
--- a/gjs/coverage.cpp
+++ b/gjs/coverage.cpp
@@ -1268,59 +1268,6 @@ gjs_coverage_init(GjsCoverage *self)
}
static bool
-gjs_context_eval_file_in_compartment(GjsContext *context,
- const char *filename,
- JS::HandleObject compartment_object,
- GError **error)
-{
- char *script = NULL;
- gsize script_len = 0;
-
- GFile *file = g_file_new_for_commandline_arg(filename);
-
- if (!g_file_load_contents(file,
- NULL,
- &script,
- &script_len,
- NULL,
- error)) {
- g_object_unref(file);
- return false;
- }
-
- g_object_unref(file);
-
- int start_line_number = 1;
- const char *stripped_script = gjs_strip_unix_shebang(script, &script_len,
- &start_line_number);
-
- JSContext *js_context = (JSContext *) gjs_context_get_native_context(context);
-
- JSAutoCompartment compartment(js_context, compartment_object);
-
- JS::CompileOptions options(js_context);
- options.setUTF8(true)
- .setFileAndLine(filename, start_line_number)
- .setSourceIsLazy(true);
- JS::RootedScript compiled_script(js_context);
- if (!JS::Compile(js_context, options, stripped_script, script_len,
- &compiled_script))
- return false;
-
- JS::RootedValue dummy_rval(js_context);
- if (!JS::CloneAndExecuteScript(js_context, compiled_script, &dummy_rval)) {
- g_free(script);
- gjs_log_exception(js_context);
- g_set_error(error, GJS_ERROR, GJS_ERROR_FAILED, "Failed to evaluate %s", filename);
- return false;
- }
-
- g_free(script);
-
- return true;
-}
-
-static bool
coverage_log(JSContext *context,
unsigned argc,
JS::Value *vp)
@@ -1546,10 +1493,8 @@ gjs_inject_value_into_coverage_compartment(GjsCoverage *coverage,
static bool
bootstrap_coverage(GjsCoverage *coverage)
{
- static const char *coverage_script = "resource:///org/gnome/gjs/modules/coverage.js";
GjsCoveragePrivate *priv = (GjsCoveragePrivate *) gjs_coverage_get_instance_private(coverage);
GBytes *cache_bytes = NULL;
- GError *error = NULL;
JSContext *context = (JSContext *) gjs_context_get_native_context(priv->context);
JSAutoRequest ar(context);
@@ -1562,33 +1507,16 @@ bootstrap_coverage(GjsCoverage *coverage)
{
JSAutoCompartment compartment(context, debugger_compartment);
JS::RootedObject debuggeeWrapper(context, debuggee);
- if (!JS_WrapObject(context, &debuggeeWrapper)) {
- gjs_throw(context, "Failed to wrap debugeee");
+ if (!JS_WrapObject(context, &debuggeeWrapper))
return false;
- }
JS::RootedValue debuggeeWrapperValue(context, JS::ObjectValue(*debuggeeWrapper));
if (!JS_SetProperty(context, debugger_compartment, "debuggee",
- debuggeeWrapperValue)) {
- gjs_throw(context, "Failed to set debuggee property");
+ debuggeeWrapperValue) ||
+ !JS_DefineFunctions(context, debugger_compartment, coverage_funcs) ||
+ !gjs_define_global_properties(context, debugger_compartment,
+ "coverage"))
return false;
- }
-
- if (!gjs_define_global_properties(context, debugger_compartment,
- "default")) {
- gjs_throw(context, "Failed to define global properties on debugger "
- "compartment");
- return false;
- }
-
- if (!JS_DefineFunctions(context, debugger_compartment, &coverage_funcs[0]))
- g_error("Failed to init coverage");
-
- if (!gjs_context_eval_file_in_compartment(priv->context,
- coverage_script,
- debugger_compartment,
- &error))
- g_error("Failed to eval coverage script: %s\n", error->message);
JS::RootedObject coverage_statistics_constructor(context);
JS::RootedId coverage_statistics_name(context,
@@ -1629,7 +1557,7 @@ bootstrap_coverage(GjsCoverage *coverage)
coverage_statistics_constructor_args);
if (!coverage_statistics) {
- gjs_throw(context, "Failed to create coverage_statitiscs object");
+ gjs_throw(context, "Failed to create coverage_statistics object");
return false;
}
diff --git a/installed-tests/js/testCoverage.js b/installed-tests/js/testCoverage.js
index 049f60a..f0b4d39 100644
--- a/installed-tests/js/testCoverage.js
+++ b/installed-tests/js/testCoverage.js
@@ -1,4 +1,4 @@
-const Coverage = imports.coverage;
+const Coverage = imports._bootstrap.coverage;
describe('Coverage.expressionLinesForAST', function () {
let testTable = {
diff --git a/modules/coverage.js b/modules/_bootstrap/coverage.js
similarity index 100%
rename from modules/coverage.js
rename to modules/_bootstrap/coverage.js
diff --git a/modules/modules.gresource.xml b/modules/modules.gresource.xml
index 9ffa492..724adb4 100644
--- a/modules/modules.gresource.xml
+++ b/modules/modules.gresource.xml
@@ -2,6 +2,7 @@
<gresources>
<gresource prefix="/org/gnome/gjs">
<file>modules/_bootstrap/default.js</file>
+ <file>modules/_bootstrap/coverage.js</file>
<file>modules/tweener/equations.js</file>
<file>modules/tweener/tweener.js</file>
@@ -13,7 +14,6 @@
<file>modules/overrides/Gtk.js</file>
<file>modules/cairo.js</file>
- <file>modules/coverage.js</file>
<file>modules/gettext.js</file>
<file>modules/lang.js</file>
<file>modules/_legacy.js</file>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]