fix errorssome names

Former-commit-id: a0ceae3471aa3b16356588645eeca1f2159de356
This commit is contained in:
Jarred Sumner
2021-08-02 22:26:13 -07:00
parent dbda84ff87
commit 81f9e0b9e6
6 changed files with 122 additions and 12 deletions

View File

@@ -675,6 +675,11 @@ bool JSC__JSValue__isBigInt32(JSC__JSValue JSValue0) {
bool JSC__JSValue__isBoolean(JSC__JSValue JSValue0) {
return JSC::JSValue::decode(JSValue0).isBoolean();
}
bool JSC__JSValue__isClass(JSC__JSValue JSValue0, JSC__JSGlobalObject *arg1) {
JSC::JSValue value = JSC::JSValue::decode(JSValue0);
return value.isConstructor(arg1->vm());
}
bool JSC__JSValue__isCell(JSC__JSValue JSValue0) { return JSC::JSValue::decode(JSValue0).isCell(); }
bool JSC__JSValue__isCustomGetterSetter(JSC__JSValue JSValue0) {
return JSC::JSValue::decode(JSValue0).isCustomGetterSetter();
@@ -1114,6 +1119,71 @@ void exceptionFromString(ZigException *except, JSC::JSValue value, JSC::JSGlobal
ref->ref();
}
static WTF::StringView function_string_view = WTF::StringView("Function");
void JSC__JSValue__getClassName(JSC__JSValue JSValue0, JSC__JSGlobalObject *arg1, ZigString *arg2) {
JSC::JSCell *cell = JSC::JSValue::decode(JSValue0).asCell();
if (cell == nullptr) {
arg2->len = 0;
return;
}
const char *ptr = cell->className(arg1->vm());
auto view = WTF::StringView(ptr);
// Fallback to .name if className is empty
if (view.length() == 0 || view == function_string_view) {
JSC__JSValue__getNameProperty(JSValue0, arg1, arg2);
return;
} else {
*arg2 = Zig::toZigString(view);
return;
}
arg2->len = 0;
}
void JSC__JSValue__getNameProperty(JSC__JSValue JSValue0, JSC__JSGlobalObject *arg1,
ZigString *arg2) {
JSC::JSObject *obj = JSC::JSValue::decode(JSValue0).getObject();
if (obj == nullptr) {
arg2->len = 0;
return;
}
JSC::JSValue name = obj->getDirect(arg1->vm(), arg1->vm().propertyNames->name);
if (name && name.isString()) {
auto str = name.toWTFString(arg1);
if (!str.isEmpty()) {
*arg2 = Zig::toZigString(str);
return;
}
}
if (JSC::JSFunction *function = JSC::jsDynamicCast<JSC::JSFunction *>(arg1->vm(), obj)) {
WTF::String actualName = function->name(arg1->vm());
if (!actualName.isEmpty() || function->isHostOrBuiltinFunction()) {
*arg2 = Zig::toZigString(actualName);
return;
}
actualName = function->jsExecutable()->name().string();
*arg2 = Zig::toZigString(actualName);
return;
}
if (JSC::InternalFunction *function =
JSC::jsDynamicCast<JSC::InternalFunction *>(arg1->vm(), obj)) {
auto view = WTF::StringView(function->name());
*arg2 = Zig::toZigString(view);
return;
}
arg2->len = 0;
}
void JSC__JSValue__toZigException(JSC__JSValue JSValue0, JSC__JSGlobalObject *arg1,
ZigException *exception) {
JSC::JSValue value = JSC::JSValue::decode(JSValue0);

View File

@@ -1214,6 +1214,18 @@ pub const JSValue = enum(i64) {
return cppFn("isObject", .{this});
}
pub fn isClass(this: JSValue, global: *JSGlobalObject) bool {
return cppFn("isClass", .{ this, global });
}
pub fn getNameProperty(this: JSValue, global: *JSGlobalObject, ret: *ZigString) void {
cppFn("getNameProperty", .{ this, global, ret });
}
pub fn getClassName(this: JSValue, global: *JSGlobalObject, ret: *ZigString) void {
cppFn("getClassName", .{ this, global, ret });
}
pub fn isCell(this: JSValue) bool {
return cppFn("isCell", .{this});
}
@@ -1322,7 +1334,7 @@ pub const JSValue = enum(i64) {
return @intToPtr(*c_void, @intCast(usize, @enumToInt(this)));
}
pub const Extern = [_][]const u8{ "getErrorsProperty", "toInt32", "toBoolean", "isInt32", "isIterable", "forEach", "isAggregateError", "toZigException", "isException", "toWTFString", "hasProperty", "getPropertyNames", "getDirect", "putDirect", "get", "getIfExists", "asString", "asObject", "asNumber", "isError", "jsNull", "jsUndefined", "jsTDZValue", "jsBoolean", "jsDoubleNumber", "jsNumberFromDouble", "jsNumberFromChar", "jsNumberFromU16", "jsNumberFromInt32", "jsNumberFromInt64", "jsNumberFromUint64", "isUndefined", "isNull", "isUndefinedOrNull", "isBoolean", "isAnyInt", "isUInt32AsAnyInt", "isInt32AsAnyInt", "isNumber", "isString", "isBigInt", "isHeapBigInt", "isBigInt32", "isSymbol", "isPrimitive", "isGetterSetter", "isCustomGetterSetter", "isObject", "isCell", "asCell", "toString", "toStringOrNull", "toPropertyKey", "toPropertyKeyValue", "toObject", "toString", "getPrototype", "getPropertyByPropertyName", "eqlValue", "eqlCell", "isCallable" };
pub const Extern = [_][]const u8{ "isClass", "getNameProperty", "getClassName", "getErrorsProperty", "toInt32", "toBoolean", "isInt32", "isIterable", "forEach", "isAggregateError", "toZigException", "isException", "toWTFString", "hasProperty", "getPropertyNames", "getDirect", "putDirect", "get", "getIfExists", "asString", "asObject", "asNumber", "isError", "jsNull", "jsUndefined", "jsTDZValue", "jsBoolean", "jsDoubleNumber", "jsNumberFromDouble", "jsNumberFromChar", "jsNumberFromU16", "jsNumberFromInt32", "jsNumberFromInt64", "jsNumberFromUint64", "isUndefined", "isNull", "isUndefinedOrNull", "isBoolean", "isAnyInt", "isUInt32AsAnyInt", "isInt32AsAnyInt", "isNumber", "isString", "isBigInt", "isHeapBigInt", "isBigInt32", "isSymbol", "isPrimitive", "isGetterSetter", "isCustomGetterSetter", "isObject", "isCell", "asCell", "toString", "toStringOrNull", "toPropertyKey", "toPropertyKeyValue", "toObject", "toString", "getPrototype", "getPropertyByPropertyName", "eqlValue", "eqlCell", "isCallable" };
};
pub const PropertyName = extern struct {

View File

@@ -26,7 +26,7 @@ pub const ZigGlobalObject = extern struct {
if (!sigaction_installed) {
sigaction_installed = true;
sigaction = std.mem.zeroes(std.os.Sigaction);
sigaction = std.mem.zeroes(std.os.Sigaction);
sigaction.handler = .{ .sigaction = Handler.global_signal_handler_fn };
std.os.sigaction(std.os.SIGABRT, &sigaction, null);
@@ -548,9 +548,21 @@ pub const ZigConsoleClient = struct {
if (len == 1) {
if (Output.enable_ansi_colors) {
FormattableType.format(@TypeOf(buffered_writer.unbuffered_writer), buffered_writer.unbuffered_writer, vals[0], true) catch {};
FormattableType.format(
@TypeOf(buffered_writer.unbuffered_writer),
buffered_writer.unbuffered_writer,
vals[0],
global,
true,
) catch {};
} else {
FormattableType.format(@TypeOf(buffered_writer.unbuffered_writer), buffered_writer.unbuffered_writer, vals[0], false) catch {};
FormattableType.format(
@TypeOf(buffered_writer.unbuffered_writer),
buffered_writer.unbuffered_writer,
vals[0],
global,
false,
) catch {};
}
_ = buffered_writer.unbuffered_writer.write("\n") catch 0;
@@ -567,13 +579,13 @@ pub const ZigConsoleClient = struct {
while (i < len) : (i += 1) {
_ = if (i > 0) (writer.write(" ") catch 0);
FormattableType.format(@TypeOf(writer), writer, values[i], true) catch {};
FormattableType.format(@TypeOf(writer), writer, values[i], global, true) catch {};
}
} else {
while (i < len) : (i += 1) {
_ = if (i > 0) (writer.write(" ") catch 0);
FormattableType.format(@TypeOf(writer), writer, values[i], false) catch {};
FormattableType.format(@TypeOf(writer), writer, values[i], global, false) catch {};
}
}
@@ -589,8 +601,8 @@ pub const ZigConsoleClient = struct {
Null,
Boolean,
const CellType = CAPI.CellType;
pub fn format(comptime Writer: type, writer: Writer, value: JSValue, comptime enable_ansi_colors: bool) anyerror!void {
threadlocal var name_buf: [512]u8 = undefined;
pub fn format(comptime Writer: type, writer: Writer, value: JSValue, globalThis: *JSGlobalObject, comptime enable_ansi_colors: bool) anyerror!void {
if (value.isCell()) {
if (CAPI.JSObjectGetPrivate(value.asRef())) |private_data_ptr| {
const priv_data = JS.JSPrivateDataPtr.from(private_data_ptr);
@@ -633,10 +645,20 @@ pub const ZigConsoleClient = struct {
try writer.print(comptime Output.prettyFmt("<r><yellow>null<r>", enable_ansi_colors), .{});
} else if (value.isBoolean()) {
if (value.toBoolean()) {
try writer.print(comptime Output.prettyFmt("<r><blue>true<r>", enable_ansi_colors), .{});
try writer.print(comptime Output.prettyFmt("<r><yellow>true<r>", enable_ansi_colors), .{});
} else {
try writer.print(comptime Output.prettyFmt("<r><blue>false<r>", enable_ansi_colors), .{});
try writer.print(comptime Output.prettyFmt("<r><yellow>false<r>", enable_ansi_colors), .{});
}
// } else if (value.isSymbol()) {
// try writer.print(comptime Output.prettyFmt("<r><yellow>Symbol(\"{s}\")<r>", enable_ansi_colors), .{ value.getDescriptionProperty() });
} else if (value.isClass(globalThis)) {
var printable = ZigString.init(&name_buf);
value.getClassName(globalThis, &printable);
try writer.print("[class {s}]", .{printable.slice()});
} else if (value.isCallable(globalThis.vm())) {
var printable = ZigString.init(&name_buf);
value.getNameProperty(globalThis, &printable);
try writer.print("[Function {s}]", .{printable.slice()});
} else {
var str = value.toWTFString(JS.VirtualMachine.vm.global);
_ = try writer.write(str.slice());

View File

@@ -1,4 +1,4 @@
//-- AUTOGENERATED FILE -- 1627963169
//-- AUTOGENERATED FILE -- 1627967644
// clang-format off
#pragma once

View File

@@ -1,4 +1,4 @@
//-- AUTOGENERATED FILE -- 1627963169
//-- AUTOGENERATED FILE -- 1627967644
// clang-format: off
#pragma once
@@ -413,7 +413,9 @@ CPP_DECL JSC__JSString* JSC__JSValue__asString(JSC__JSValue JSValue0);
CPP_DECL bool JSC__JSValue__eqlCell(JSC__JSValue JSValue0, JSC__JSCell* arg1);
CPP_DECL bool JSC__JSValue__eqlValue(JSC__JSValue JSValue0, JSC__JSValue JSValue1);
CPP_DECL void JSC__JSValue__forEach(JSC__JSValue JSValue0, JSC__JSGlobalObject* arg1, void (* ArgFn2)(JSC__VM* arg0, JSC__JSGlobalObject* arg1, JSC__JSValue JSValue2));
CPP_DECL void JSC__JSValue__getClassName(JSC__JSValue JSValue0, JSC__JSGlobalObject* arg1, ZigString* arg2);
CPP_DECL JSC__JSValue JSC__JSValue__getErrorsProperty(JSC__JSValue JSValue0, JSC__JSGlobalObject* arg1);
CPP_DECL void JSC__JSValue__getNameProperty(JSC__JSValue JSValue0, JSC__JSGlobalObject* arg1, ZigString* arg2);
CPP_DECL JSC__JSValue JSC__JSValue__getPrototype(JSC__JSValue JSValue0, JSC__JSGlobalObject* arg1);
CPP_DECL bool JSC__JSValue__isAggregateError(JSC__JSValue JSValue0, JSC__JSGlobalObject* arg1);
CPP_DECL bool JSC__JSValue__isAnyInt(JSC__JSValue JSValue0);
@@ -422,6 +424,7 @@ CPP_DECL bool JSC__JSValue__isBigInt32(JSC__JSValue JSValue0);
CPP_DECL bool JSC__JSValue__isBoolean(JSC__JSValue JSValue0);
CPP_DECL bool JSC__JSValue__isCallable(JSC__JSValue JSValue0, JSC__VM* arg1);
CPP_DECL bool JSC__JSValue__isCell(JSC__JSValue JSValue0);
CPP_DECL bool JSC__JSValue__isClass(JSC__JSValue JSValue0, JSC__JSGlobalObject* arg1);
CPP_DECL bool JSC__JSValue__isCustomGetterSetter(JSC__JSValue JSValue0);
CPP_DECL bool JSC__JSValue__isError(JSC__JSValue JSValue0);
CPP_DECL bool JSC__JSValue__isException(JSC__JSValue JSValue0, JSC__VM* arg1);

View File

@@ -236,7 +236,9 @@ pub extern fn JSC__JSValue__asString(JSValue0: JSC__JSValue) [*c]JSC__JSString;
pub extern fn JSC__JSValue__eqlCell(JSValue0: JSC__JSValue, arg1: [*c]JSC__JSCell) bool;
pub extern fn JSC__JSValue__eqlValue(JSValue0: JSC__JSValue, JSValue1: JSC__JSValue) bool;
pub extern fn JSC__JSValue__forEach(JSValue0: JSC__JSValue, arg1: [*c]JSC__JSGlobalObject, ArgFn2: ?fn ([*c]JSC__VM, [*c]JSC__JSGlobalObject, JSC__JSValue) callconv(.C) void) void;
pub extern fn JSC__JSValue__getClassName(JSValue0: JSC__JSValue, arg1: [*c]JSC__JSGlobalObject, arg2: [*c]ZigString) void;
pub extern fn JSC__JSValue__getErrorsProperty(JSValue0: JSC__JSValue, arg1: [*c]JSC__JSGlobalObject) JSC__JSValue;
pub extern fn JSC__JSValue__getNameProperty(JSValue0: JSC__JSValue, arg1: [*c]JSC__JSGlobalObject, arg2: [*c]ZigString) void;
pub extern fn JSC__JSValue__getPrototype(JSValue0: JSC__JSValue, arg1: [*c]JSC__JSGlobalObject) JSC__JSValue;
pub extern fn JSC__JSValue__isAggregateError(JSValue0: JSC__JSValue, arg1: [*c]JSC__JSGlobalObject) bool;
pub extern fn JSC__JSValue__isAnyInt(JSValue0: JSC__JSValue) bool;
@@ -245,6 +247,7 @@ pub extern fn JSC__JSValue__isBigInt32(JSValue0: JSC__JSValue) bool;
pub extern fn JSC__JSValue__isBoolean(JSValue0: JSC__JSValue) bool;
pub extern fn JSC__JSValue__isCallable(JSValue0: JSC__JSValue, arg1: [*c]JSC__VM) bool;
pub extern fn JSC__JSValue__isCell(JSValue0: JSC__JSValue) bool;
pub extern fn JSC__JSValue__isClass(JSValue0: JSC__JSValue, arg1: [*c]JSC__JSGlobalObject) bool;
pub extern fn JSC__JSValue__isCustomGetterSetter(JSValue0: JSC__JSValue) bool;
pub extern fn JSC__JSValue__isError(JSValue0: JSC__JSValue) bool;
pub extern fn JSC__JSValue__isException(JSValue0: JSC__JSValue, arg1: [*c]JSC__VM) bool;