Unmodularize slightly
This commit is contained in:
parent
eacf0381c9
commit
5f23482b1b
11 changed files with 170 additions and 217 deletions
176
src/Class.zig
176
src/Class.zig
|
|
@ -361,11 +361,92 @@ pub const ConstantPoolInfo = union(ConstantPoolInfo.Tag) {
|
||||||
invoke_dynamic = 18,
|
invoke_dynamic = 18,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const Class = @import("Class/ConstantPoolInfo/Class.zig");
|
pub const Class = struct {
|
||||||
pub const FieldRef = @import("Class/ConstantPoolInfo/FieldRef.zig");
|
name_index: u16,
|
||||||
pub const MethodRef = @import("Class/ConstantPoolInfo/MethodRef.zig");
|
|
||||||
pub const InterfaceMethodRef = @import("Class/ConstantPoolInfo/InterfaceMethodRef.zig");
|
pub fn name(self: *const Class, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
||||||
pub const String = @import("Class/ConstantPoolInfo/String.zig");
|
const name_index = self.name_index - 1;
|
||||||
|
if (name_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
||||||
|
const cp_info = constant_pool[name_index];
|
||||||
|
if (cp_info == null or @as(Tag, cp_info.?) != .utf8) return ResolveError.InvalidConstantType;
|
||||||
|
return cp_info.?;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
pub const FieldRef = struct {
|
||||||
|
class_index: u16,
|
||||||
|
name_and_type_index: u16,
|
||||||
|
|
||||||
|
pub fn class(self: *const FieldRef, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
||||||
|
const class_index = self.class_index - 1;
|
||||||
|
if (class_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
||||||
|
const cp_info = constant_pool[class_index];
|
||||||
|
if (cp_info == null or @as(Tag, cp_info.?) != .class) return ResolveError.InvalidConstantType;
|
||||||
|
return cp_info.?;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn nameAndType(self: *const FieldRef, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
||||||
|
const name_and_type_index = self.name_and_type_index - 1;
|
||||||
|
if (name_and_type_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
||||||
|
const cp_info = constant_pool[name_and_type_index];
|
||||||
|
if (cp_info == null or @as(Tag, cp_info.?) != .name_and_type) return ResolveError.InvalidConstantType;
|
||||||
|
return cp_info.?;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
pub const MethodRef = struct {
|
||||||
|
class_index: u16,
|
||||||
|
name_and_type_index: u16,
|
||||||
|
|
||||||
|
pub fn class(self: *const MethodRef, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
||||||
|
const class_index = self.class_index - 1;
|
||||||
|
if (class_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
||||||
|
const cp_info = constant_pool[class_index];
|
||||||
|
if (cp_info == null or @as(Tag, cp_info.?) != .class) return ResolveError.InvalidConstantType;
|
||||||
|
return cp_info.?;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn nameAndType(self: *const MethodRef, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
||||||
|
const name_and_type_index = self.name_and_type_index - 1;
|
||||||
|
if (name_and_type_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
||||||
|
const cp_info = constant_pool[name_and_type_index];
|
||||||
|
if (cp_info == null or @as(Tag, cp_info.?) != .name_and_type) return ResolveError.InvalidConstantType;
|
||||||
|
return cp_info.?;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
pub const InterfaceMethodRef = struct {
|
||||||
|
class_index: u16,
|
||||||
|
name_and_type_index: u16,
|
||||||
|
|
||||||
|
pub fn class(self: *const InterfaceMethodRef, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
||||||
|
const class_index = self.class_index - 1;
|
||||||
|
if (class_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
||||||
|
const cp_info = constant_pool[class_index];
|
||||||
|
if (cp_info == null or @as(Tag, cp_info.?) != .class) return ResolveError.InvalidConstantType;
|
||||||
|
return cp_info.?;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn nameAndType(self: *const InterfaceMethodRef, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
||||||
|
const name_and_type_index = self.name_and_type_index - 1;
|
||||||
|
if (name_and_type_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
||||||
|
const cp_info = constant_pool[name_and_type_index];
|
||||||
|
if (cp_info == null or @as(Tag, cp_info.?) != .name_and_type) return ResolveError.InvalidConstantType;
|
||||||
|
return cp_info.?;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
pub const String = struct {
|
||||||
|
string_index: u16,
|
||||||
|
|
||||||
|
pub fn string(self: *const String, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
||||||
|
const string_index = self.string_index - 1;
|
||||||
|
if (string_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
||||||
|
const cp_info = constant_pool[string_index];
|
||||||
|
if (cp_info == null or @as(Tag, cp_info.?) != .utf8) return ResolveError.InvalidConstantType;
|
||||||
|
return cp_info.?;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
pub const Integer = struct {
|
pub const Integer = struct {
|
||||||
bytes: u32,
|
bytes: u32,
|
||||||
|
|
@ -385,15 +466,92 @@ pub const ConstantPoolInfo = union(ConstantPoolInfo.Tag) {
|
||||||
low_bytes: u32,
|
low_bytes: u32,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const NameAndType = @import("Class/ConstantPoolInfo/NameAndType.zig");
|
pub const NameAndType = struct {
|
||||||
|
name_index: u16,
|
||||||
|
descriptor_index: u16,
|
||||||
|
|
||||||
|
pub fn name(self: *const NameAndType, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
||||||
|
const name_index = self.name_index - 1;
|
||||||
|
if (name_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
||||||
|
const cp_info = constant_pool[name_index];
|
||||||
|
if (cp_info == null or @as(Tag, cp_info.?) != .utf8) return ResolveError.InvalidConstantType;
|
||||||
|
return cp_info.?;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn descriptor(self: *const NameAndType, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
||||||
|
const descriptor_index = self.descriptor_index - 1;
|
||||||
|
if (descriptor_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
||||||
|
const cp_info = constant_pool[descriptor_index];
|
||||||
|
if (cp_info == null or @as(Tag, cp_info.?) != .utf8) return ResolveError.InvalidConstantType;
|
||||||
|
return cp_info.?;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
pub const Utf8 = struct {
|
pub const Utf8 = struct {
|
||||||
bytes: []const u8,
|
bytes: []const u8,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const MethodHandle = @import("Class/ConstantPoolInfo/MethodHandle.zig");
|
pub const MethodHandle = struct {
|
||||||
pub const MethodType = @import("Class/ConstantPoolInfo/MethodType.zig");
|
reference_kind: Kind,
|
||||||
pub const InvokeDynamic = @import("Class/ConstantPoolInfo/InvokeDynamic.zig");
|
reference_index: u16,
|
||||||
|
|
||||||
|
pub const Kind = enum(u8) {
|
||||||
|
get_field = 1,
|
||||||
|
get_static = 2,
|
||||||
|
put_field = 3,
|
||||||
|
put_static = 4,
|
||||||
|
invoke_virtual = 5,
|
||||||
|
invoke_static = 6,
|
||||||
|
invoke_special = 7,
|
||||||
|
new_invoke_special = 8,
|
||||||
|
invoke_interface = 9,
|
||||||
|
};
|
||||||
|
|
||||||
|
pub fn reference(self: *const MethodHandle, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
||||||
|
const reference_index = self.reference_index - 1;
|
||||||
|
if (reference_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
||||||
|
const cp_info = constant_pool[reference_index];
|
||||||
|
return switch (self.reference_kind) {
|
||||||
|
.get_field, .get_static, .put_field, .put_static => blk: {
|
||||||
|
if (cp_info == null or @as(Tag, cp_info.?) != .field_ref) break :blk ResolveError.InvalidConstantType;
|
||||||
|
break :blk cp_info.?;
|
||||||
|
},
|
||||||
|
.invoke_virtual, .invoke_static, .invoke_special, .new_invoke_special => blk: {
|
||||||
|
if (cp_info == null or @as(Tag, cp_info.?) != .method_ref) break :blk ResolveError.InvalidConstantType;
|
||||||
|
break :blk cp_info.?;
|
||||||
|
},
|
||||||
|
.invoke_interface => blk: {
|
||||||
|
if (cp_info == null or @as(Tag, cp_info.?) != .interface_method_ref) break :blk ResolveError.InvalidConstantType;
|
||||||
|
break :blk cp_info.?;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
pub const MethodType = struct {
|
||||||
|
descriptor_index: u16,
|
||||||
|
|
||||||
|
pub fn descriptor(self: *const MethodType, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
||||||
|
const descriptor_index = self.descriptor_index - 1;
|
||||||
|
if (descriptor_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
||||||
|
const cp_info = constant_pool[descriptor_index];
|
||||||
|
if (cp_info == null or @as(Tag, cp_info.?) != .utf8) return ResolveError.InvalidConstantType;
|
||||||
|
return cp_info.?;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
pub const InvokeDynamic = struct {
|
||||||
|
bootstrap_method_attr_index: u16,
|
||||||
|
name_and_type_index: u16,
|
||||||
|
|
||||||
|
pub fn nameAndType(self: *const InvokeDynamic, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
||||||
|
const name_and_type_index = self.name_and_type_index - 1;
|
||||||
|
if (name_and_type_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
||||||
|
const cp_info = constant_pool[name_and_type_index];
|
||||||
|
if (cp_info == null or @as(Tag, cp_info.?) != .name_and_type) return ResolveError.InvalidConstantType;
|
||||||
|
return cp_info.?;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
pub fn parse(input: *std.Io.Reader, allocator: std.mem.Allocator) ParseError!ConstantPoolInfo {
|
pub fn parse(input: *std.Io.Reader, allocator: std.mem.Allocator) ParseError!ConstantPoolInfo {
|
||||||
const tag_byte = try input.takeByte();
|
const tag_byte = try input.takeByte();
|
||||||
|
|
|
||||||
|
|
@ -219,13 +219,13 @@ pub const Predefined = union(enum) {
|
||||||
.object = .{
|
.object = .{
|
||||||
.cpool_index = try input.takeInt(u16, .big),
|
.cpool_index = try input.takeInt(u16, .big),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
.uninitialized => .{
|
.uninitialized => .{
|
||||||
.uninitialized = .{
|
.uninitialized = .{
|
||||||
.cpool_index = try input.takeInt(u16, .big),
|
.cpool_index = try input.takeInt(u16, .big),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
const Class = @import("../../Class.zig");
|
|
||||||
const ConstantPoolInfo = Class.ConstantPoolInfo;
|
|
||||||
const ResolveError = Class.ResolveError;
|
|
||||||
|
|
||||||
name_index: u16,
|
|
||||||
|
|
||||||
const Self = @This();
|
|
||||||
|
|
||||||
pub fn name(self: *const Self, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
|
||||||
const name_index = self.name_index - 1;
|
|
||||||
if (name_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
|
||||||
const cp_info = constant_pool[name_index];
|
|
||||||
if (cp_info == null or @as(ConstantPoolInfo.Tag, cp_info.?) != .utf8) return ResolveError.InvalidConstantType;
|
|
||||||
return cp_info.?;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
const Class = @import("../../Class.zig");
|
|
||||||
const ConstantPoolInfo = Class.ConstantPoolInfo;
|
|
||||||
const ResolveError = Class.ResolveError;
|
|
||||||
|
|
||||||
class_index: u16,
|
|
||||||
name_and_type_index: u16,
|
|
||||||
|
|
||||||
const Self = @This();
|
|
||||||
|
|
||||||
pub fn class(self: *const Self, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
|
||||||
const class_index = self.class_index - 1;
|
|
||||||
if (class_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
|
||||||
const cp_info = constant_pool[class_index];
|
|
||||||
if (cp_info == null or @as(ConstantPoolInfo.Tag, cp_info.?) != .class) return ResolveError.InvalidConstantType;
|
|
||||||
return cp_info.?;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn nameAndType(self: *const Self, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
|
||||||
const name_and_type_index = self.name_and_type_index - 1;
|
|
||||||
if (name_and_type_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
|
||||||
const cp_info = constant_pool[name_and_type_index];
|
|
||||||
if (cp_info == null or @as(ConstantPoolInfo.Tag, cp_info.?) != .name_and_type) return ResolveError.InvalidConstantType;
|
|
||||||
return cp_info.?;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
const Class = @import("../../Class.zig");
|
|
||||||
const ConstantPoolInfo = Class.ConstantPoolInfo;
|
|
||||||
const ResolveError = Class.ResolveError;
|
|
||||||
|
|
||||||
class_index: u16,
|
|
||||||
name_and_type_index: u16,
|
|
||||||
|
|
||||||
const Self = @This();
|
|
||||||
|
|
||||||
pub fn class(self: *const Self, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
|
||||||
const class_index = self.class_index - 1;
|
|
||||||
if (class_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
|
||||||
const cp_info = constant_pool[class_index];
|
|
||||||
if (cp_info == null or @as(ConstantPoolInfo.Tag, cp_info.?) != .class) return ResolveError.InvalidConstantType;
|
|
||||||
return cp_info.?;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn nameAndType(self: *const Self, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
|
||||||
const name_and_type_index = self.name_and_type_index - 1;
|
|
||||||
if (name_and_type_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
|
||||||
const cp_info = constant_pool[name_and_type_index];
|
|
||||||
if (cp_info == null or @as(ConstantPoolInfo.Tag, cp_info.?) != .name_and_type) return ResolveError.InvalidConstantType;
|
|
||||||
return cp_info.?;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
const Class = @import("../../Class.zig");
|
|
||||||
const ConstantPoolInfo = Class.ConstantPoolInfo;
|
|
||||||
const ResolveError = Class.ResolveError;
|
|
||||||
|
|
||||||
bootstrap_method_attr_index: u16,
|
|
||||||
name_and_type_index: u16,
|
|
||||||
|
|
||||||
const Self = @This();
|
|
||||||
|
|
||||||
pub fn nameAndType(self: *const Self, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
|
||||||
const name_and_type_index = self.name_and_type_index - 1;
|
|
||||||
if (name_and_type_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
|
||||||
const cp_info = constant_pool[name_and_type_index];
|
|
||||||
if (cp_info == null or @as(ConstantPoolInfo.Tag, cp_info.?) != .name_and_type) return ResolveError.InvalidConstantType;
|
|
||||||
return cp_info.?;
|
|
||||||
}
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
||||||
const Class = @import("../../Class.zig");
|
|
||||||
const ConstantPoolInfo = Class.ConstantPoolInfo;
|
|
||||||
const ResolveError = Class.ResolveError;
|
|
||||||
|
|
||||||
reference_kind: Kind,
|
|
||||||
reference_index: u16,
|
|
||||||
|
|
||||||
const Self = @This();
|
|
||||||
|
|
||||||
pub const Kind = enum(u8) {
|
|
||||||
get_field = 1,
|
|
||||||
get_static = 2,
|
|
||||||
put_field = 3,
|
|
||||||
put_static = 4,
|
|
||||||
invoke_virtual = 5,
|
|
||||||
invoke_static = 6,
|
|
||||||
invoke_special = 7,
|
|
||||||
new_invoke_special = 8,
|
|
||||||
invoke_interface = 9,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub fn reference(self: *const Self, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
|
||||||
const reference_index = self.reference_index - 1;
|
|
||||||
if (reference_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
|
||||||
const cp_info = constant_pool[reference_index];
|
|
||||||
return switch (self.reference_kind) {
|
|
||||||
.get_field, .get_static, .put_field, .put_static => blk: {
|
|
||||||
if (cp_info == null or @as(ConstantPoolInfo.Tag, cp_info.?) != .field_ref) break :blk ResolveError.InvalidConstantType;
|
|
||||||
break :blk cp_info.?;
|
|
||||||
},
|
|
||||||
.invoke_virtual, .invoke_static, .invoke_special, .new_invoke_special => blk: {
|
|
||||||
if (cp_info == null or @as(ConstantPoolInfo.Tag, cp_info.?) != .method_ref) break :blk ResolveError.InvalidConstantType;
|
|
||||||
break :blk cp_info.?;
|
|
||||||
},
|
|
||||||
.invoke_interface => blk: {
|
|
||||||
if (cp_info == null or @as(ConstantPoolInfo.Tag, cp_info.?) != .interface_method_ref) break :blk ResolveError.InvalidConstantType;
|
|
||||||
break :blk cp_info.?;
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
const Class = @import("../../Class.zig");
|
|
||||||
const ConstantPoolInfo = Class.ConstantPoolInfo;
|
|
||||||
const ResolveError = Class.ResolveError;
|
|
||||||
|
|
||||||
class_index: u16,
|
|
||||||
name_and_type_index: u16,
|
|
||||||
|
|
||||||
const Self = @This();
|
|
||||||
|
|
||||||
pub fn class(self: *const Self, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
|
||||||
const class_index = self.class_index - 1;
|
|
||||||
if (class_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
|
||||||
const cp_info = constant_pool[class_index];
|
|
||||||
if (cp_info == null or @as(ConstantPoolInfo.Tag, cp_info.?) != .class) return ResolveError.InvalidConstantType;
|
|
||||||
return cp_info.?;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn nameAndType(self: *const Self, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
|
||||||
const name_and_type_index = self.name_and_type_index - 1;
|
|
||||||
if (name_and_type_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
|
||||||
const cp_info = constant_pool[name_and_type_index];
|
|
||||||
if (cp_info == null or @as(ConstantPoolInfo.Tag, cp_info.?) != .name_and_type) return ResolveError.InvalidConstantType;
|
|
||||||
return cp_info.?;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
const Class = @import("../../Class.zig");
|
|
||||||
const ConstantPoolInfo = Class.ConstantPoolInfo;
|
|
||||||
const ResolveError = Class.ResolveError;
|
|
||||||
|
|
||||||
descriptor_index: u16,
|
|
||||||
|
|
||||||
const Self = @This();
|
|
||||||
|
|
||||||
pub fn descriptor(self: *const Self, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
|
||||||
const descriptor_index = self.descriptor_index - 1;
|
|
||||||
if (descriptor_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
|
||||||
const cp_info = constant_pool[descriptor_index];
|
|
||||||
if (cp_info == null or @as(ConstantPoolInfo.Tag, cp_info.?) != .utf8) return ResolveError.InvalidConstantType;
|
|
||||||
return cp_info.?;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
const Class = @import("../../Class.zig");
|
|
||||||
const ConstantPoolInfo = Class.ConstantPoolInfo;
|
|
||||||
const ResolveError = Class.ResolveError;
|
|
||||||
|
|
||||||
name_index: u16,
|
|
||||||
descriptor_index: u16,
|
|
||||||
|
|
||||||
const Self = @This();
|
|
||||||
|
|
||||||
pub fn name(self: *const Self, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
|
||||||
const name_index = self.name_index - 1;
|
|
||||||
if (name_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
|
||||||
const cp_info = constant_pool[name_index];
|
|
||||||
if (cp_info == null or @as(ConstantPoolInfo.Tag, cp_info.?) != .utf8) return ResolveError.InvalidConstantType;
|
|
||||||
return cp_info.?;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn descriptor(self: *const Self, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
|
||||||
const descriptor_index = self.descriptor_index - 1;
|
|
||||||
if (descriptor_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
|
||||||
const cp_info = constant_pool[descriptor_index];
|
|
||||||
if (cp_info == null or @as(ConstantPoolInfo.Tag, cp_info.?) != .utf8) return ResolveError.InvalidConstantType;
|
|
||||||
return cp_info.?;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
const Class = @import("../../Class.zig");
|
|
||||||
const ConstantPoolInfo = Class.ConstantPoolInfo;
|
|
||||||
const ResolveError = Class.ResolveError;
|
|
||||||
|
|
||||||
string_index: u16,
|
|
||||||
|
|
||||||
const Self = @This();
|
|
||||||
|
|
||||||
pub fn string(self: *const Self, constant_pool: []const ?ConstantPoolInfo) ResolveError!ConstantPoolInfo {
|
|
||||||
const string_index = self.string_index - 1;
|
|
||||||
if (string_index >= constant_pool.len) return ResolveError.InvalidConstantPoolIndex;
|
|
||||||
const cp_info = constant_pool[string_index];
|
|
||||||
if (cp_info == null or @as(ConstantPoolInfo.Tag, cp_info.?) != .utf8) return ResolveError.InvalidConstantType;
|
|
||||||
return cp_info.?;
|
|
||||||
}
|
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue