25 lines
1.1 KiB
Zig
25 lines
1.1 KiB
Zig
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.?;
|
|
}
|
|
|