Skip to content

Commit 334c28b

Browse files
author
Guy Bedford
authored
builtins: refactor shared console implementation (#432)
1 parent 7a74d76 commit 334c28b

File tree

3 files changed

+41
-14
lines changed

3 files changed

+41
-14
lines changed

c-dependencies/js-compute-runtime/builtins/shared/console.cpp

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ JS::Result<mozilla::Ok> ToSource(JSContext *cx, std::string &sourceOut, JS::Hand
400400

401401
namespace builtins {
402402

403-
template <const char *prefix, uint8_t prefix_len>
403+
template <Console::LogType log_ty>
404404
static bool console_out(JSContext *cx, unsigned argc, JS::Value *vp) {
405405
JS::CallArgs args = CallArgsFromVp(argc, vp);
406406
std::string fullLogLine = "";
@@ -425,25 +425,18 @@ static bool console_out(JSContext *cx, unsigned argc, JS::Value *vp) {
425425
}
426426
}
427427

428-
printf("%s: %s\n", prefix, fullLogLine.c_str());
429-
fflush(stdout);
428+
builtin_impl_console_log(log_ty, fullLogLine.c_str());
430429

431430
args.rval().setUndefined();
432431
return true;
433432
}
434433

435-
static constexpr char PREFIX_LOG[] = "Log";
436-
static constexpr char PREFIX_DEBUG[] = "Debug";
437-
static constexpr char PREFIX_INFO[] = "Info";
438-
static constexpr char PREFIX_WARN[] = "Warn";
439-
static constexpr char PREFIX_ERROR[] = "Error";
440-
441434
const JSFunctionSpec Console::methods[] = {
442-
JS_FN("log", (console_out<PREFIX_LOG, 3>), 1, JSPROP_ENUMERATE),
443-
JS_FN("debug", (console_out<PREFIX_DEBUG, 5>), 1, JSPROP_ENUMERATE),
444-
JS_FN("info", (console_out<PREFIX_INFO, 4>), 1, JSPROP_ENUMERATE),
445-
JS_FN("warn", (console_out<PREFIX_WARN, 4>), 1, JSPROP_ENUMERATE),
446-
JS_FN("error", (console_out<PREFIX_ERROR, 5>), 1, JSPROP_ENUMERATE),
435+
JS_FN("log", (console_out<Console::LogType::Log>), 1, JSPROP_ENUMERATE),
436+
JS_FN("debug", (console_out<Console::LogType::Debug>), 1, JSPROP_ENUMERATE),
437+
JS_FN("info", (console_out<Console::LogType::Info>), 1, JSPROP_ENUMERATE),
438+
JS_FN("warn", (console_out<Console::LogType::Warn>), 1, JSPROP_ENUMERATE),
439+
JS_FN("error", (console_out<Console::LogType::Error>), 1, JSPROP_ENUMERATE),
447440
JS_FS_END};
448441

449442
const JSPropertySpec Console::properties[] = {JS_PS_END};

c-dependencies/js-compute-runtime/builtins/shared/console.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@ class Console : public BuiltinNoConstructor<Console> {
99
private:
1010
public:
1111
static constexpr const char *class_name = "Console";
12+
enum LogType {
13+
Log,
14+
Info,
15+
Debug,
16+
Warn,
17+
Error,
18+
};
1219
enum Slots { Count };
1320
static const JSFunctionSpec methods[];
1421
static const JSPropertySpec properties[];
@@ -18,4 +25,6 @@ class Console : public BuiltinNoConstructor<Console> {
1825

1926
} // namespace builtins
2027

28+
void builtin_impl_console_log(builtins::Console::LogType log_ty, const char *msg);
29+
2130
#endif

c-dependencies/js-compute-runtime/js-compute-builtins.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ using std::chrono::ceil;
6868
using std::chrono::milliseconds;
6969
using std::chrono::system_clock;
7070

71+
using builtins::Console;
72+
7173
using JS::CallArgs;
7274
using JS::CallArgsFromVp;
7375
using JS::UniqueChars;
@@ -5318,6 +5320,29 @@ UniqueChars stringify_value(JSContext *cx, JS::HandleValue value) {
53185320

53195321
bool debug_logging_enabled() { return builtins::Fastly::debug_logging_enabled; }
53205322

5323+
void builtin_impl_console_log(Console::LogType log_ty, const char *msg) {
5324+
const char *prefix = "";
5325+
switch (log_ty) {
5326+
case Console::LogType::Log:
5327+
prefix = "Log";
5328+
break;
5329+
case Console::LogType::Debug:
5330+
prefix = "Debug";
5331+
break;
5332+
case Console::LogType::Info:
5333+
prefix = "Info";
5334+
break;
5335+
case Console::LogType::Warn:
5336+
prefix = "Warn";
5337+
break;
5338+
case Console::LogType::Error:
5339+
prefix = "Error";
5340+
break;
5341+
}
5342+
fprintf(stdout, "%s: %s\n", prefix, msg);
5343+
fflush(stdout);
5344+
}
5345+
53215346
bool dump_value(JSContext *cx, JS::Value val, FILE *fp) {
53225347
RootedValue value(cx, val);
53235348
UniqueChars utf8chars = stringify_value(cx, value);

0 commit comments

Comments
 (0)