mirror of
https://github.com/rkd77/elinks.git
synced 2025-02-02 15:09:23 -05:00
[spidermonkey] console.assert
This commit is contained in:
parent
7545b8093d
commit
4190613ed2
@ -53,15 +53,52 @@ const JSClass console_class = {
|
|||||||
&console_ops
|
&console_ops
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static bool console_assert(JSContext *ctx, unsigned int argc, JS::Value *vp);
|
||||||
static bool console_error(JSContext *ctx, unsigned int argc, JS::Value *vp);
|
static bool console_error(JSContext *ctx, unsigned int argc, JS::Value *vp);
|
||||||
static bool console_log(JSContext *ctx, unsigned int argc, JS::Value *vp);
|
static bool console_log(JSContext *ctx, unsigned int argc, JS::Value *vp);
|
||||||
|
|
||||||
const spidermonkeyFunctionSpec console_funcs[] = {
|
const spidermonkeyFunctionSpec console_funcs[] = {
|
||||||
|
{ "assert", console_assert, 2 },
|
||||||
{ "log", console_log, 1 },
|
{ "log", console_log, 1 },
|
||||||
{ "error", console_error, 1 },
|
{ "error", console_error, 1 },
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static bool
|
||||||
|
console_assert(JSContext *ctx, unsigned int argc, JS::Value *vp)
|
||||||
|
{
|
||||||
|
JS::CallArgs args = CallArgsFromVp(argc, vp);
|
||||||
|
args.rval().setUndefined();
|
||||||
|
|
||||||
|
if (argc < 1 || !get_opt_bool("ecmascript.enable_console_log", NULL)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool res = jsval_to_boolean(ctx, args[0]);
|
||||||
|
|
||||||
|
if (res) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
FILE *log = fopen(console_error_filename, "a");
|
||||||
|
|
||||||
|
if (!log) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
fprintf(log, "Assertion failed:");
|
||||||
|
|
||||||
|
for (int i = 1; i < argc; i++) {
|
||||||
|
char *val = jsval_to_string(ctx, args[i]);
|
||||||
|
|
||||||
|
if (val) {
|
||||||
|
fprintf(log, " %s", val);
|
||||||
|
mem_free(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fprintf(log, "\n");
|
||||||
|
fclose(log);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
console_log_common(JSContext *ctx, unsigned int argc, JS::Value *vp, const char *log_filename)
|
console_log_common(JSContext *ctx, unsigned int argc, JS::Value *vp, const char *log_filename)
|
||||||
{
|
{
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
static void string_to_jsval(JSContext *ctx, JS::Value *vp, char *string);
|
static void string_to_jsval(JSContext *ctx, JS::Value *vp, char *string);
|
||||||
static void astring_to_jsval(JSContext *ctx, JS::Value *vp, char *string);
|
static void astring_to_jsval(JSContext *ctx, JS::Value *vp, char *string);
|
||||||
|
|
||||||
static int jsval_to_boolean(JSContext *ctx, JS::Value *vp);
|
static bool jsval_to_boolean(JSContext *ctx, JS::HandleValue hvp);
|
||||||
|
|
||||||
/** Inline functions */
|
/** Inline functions */
|
||||||
|
|
||||||
@ -28,13 +28,12 @@ astring_to_jsval(JSContext *ctx, JS::Value *vp, char *string)
|
|||||||
mem_free_if(string);
|
mem_free_if(string);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
|
||||||
jsval_to_boolean(JSContext *ctx, JS::Value *vp)
|
|
||||||
{
|
|
||||||
JS::RootedValue r_vp(ctx, *vp);
|
|
||||||
return (int)r_vp.toBoolean();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
static inline bool
|
||||||
|
jsval_to_boolean(JSContext *ctx, JS::HandleValue hvp)
|
||||||
|
{
|
||||||
|
return hvp.toBoolean();
|
||||||
|
}
|
||||||
|
|
||||||
/* Since SpiderMonkey 52 the Mutable Handle Object
|
/* Since SpiderMonkey 52 the Mutable Handle Object
|
||||||
* is different for String and Number and must be
|
* is different for String and Number and must be
|
||||||
|
4
test/ecmascript/console.assert.html
Normal file
4
test/ecmascript/console.assert.html
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<script>
|
||||||
|
console.assert(0 % 2 === 0, "O is not even");
|
||||||
|
console.assert(1 % 2 === 0, "1 is not even");
|
||||||
|
</script>
|
Loading…
x
Reference in New Issue
Block a user