MCPcopy Create free account
hub / github.com/cretz/stackparam / read_constant

Method read_constant

src/bytecode/io/reader.rs:92–139  ·  view source on GitHub ↗
(reader: &mut BlockReader)

Source from the content-addressed store, hash-verified

90 }
91
92 fn read_constant(reader: &mut BlockReader) -> Result<Constant, Error> {
93 let tag = reader.read_u8();
94
95 match tag {
96 Ok(1) => match reader.read_u16() {
97 Ok(str_len) => match reader.read_n(str_len as usize) {
98 Ok(bytes) => {
99 Ok(Constant::Utf8(bytes))
100 },
101 Err(err) => Err(err)
102 },
103 Err(err) => Err(err)
104 },
105 Ok(3) => reader.read_u32().map(|value| Constant::Integer(value)),
106 Ok(4) => reader.read_u32().map(|value| Constant::Float(value)),
107 Ok(5) => reader.read_u64().map(|value| Constant::Long(value)),
108 Ok(6) => reader.read_u64().map(|value| Constant::Double(value)),
109 Ok(7) => reader.read_u16().map(|idx| Constant::Class(ConstantPoolIndex::new(idx as usize))),
110 Ok(8) => reader.read_u16().map(|idx| Constant::String(ConstantPoolIndex::new(idx as usize))),
111 Ok(9) => ClassReader::require_n(reader, 4, |mut r| Constant::FieldRef {
112 class_index: ConstantPoolIndex::new(r.get_u16() as usize),
113 name_and_type_index: ConstantPoolIndex::new(r.get_u16() as usize)
114 }),
115 Ok(10) => ClassReader::require_n(reader, 4, |mut r| Constant::MethodRef {
116 class_index: ConstantPoolIndex::new(r.get_u16() as usize),
117 name_and_type_index: ConstantPoolIndex::new(r.get_u16() as usize)
118 }),
119 Ok(11) => ClassReader::require_n(reader, 4, |mut r| Constant::InterfaceMethodRef {
120 class_index: ConstantPoolIndex::new(r.get_u16() as usize),
121 name_and_type_index: ConstantPoolIndex::new(r.get_u16() as usize)
122 }),
123 Ok(12) => ClassReader::require_n(reader, 4, |mut r| Constant::NameAndType {
124 name_index: ConstantPoolIndex::new(r.get_u16() as usize),
125 descriptor_index: ConstantPoolIndex::new(r.get_u16() as usize)
126 }),
127 Ok(15) => ClassReader::require_n(reader, 3, |mut r| Constant::MethodHandle {
128 reference_kind: ReferenceKind::from_u8(r.get_u8()),
129 reference_index: ConstantPoolIndex::new(r.get_u16() as usize)
130 }),
131 Ok(16) => reader.read_u16().map(|idx| Constant::MethodType(ConstantPoolIndex::new(idx as usize))),
132 Ok(18) => ClassReader::require_n(reader, 4, |mut r| Constant::InvokeDynamic {
133 bootstrap_method_attr_index: ConstantPoolIndex::new(r.get_u16() as usize),
134 name_and_type_index: ConstantPoolIndex::new(r.get_u16() as usize)
135 }),
136 Ok(tag) => Ok(Constant::Unknown(tag)),
137 Err(err) => Err(err)
138 }
139 }
140
141 fn read_access_flags(reader: &mut BlockReader, _: &ClassFragment) -> Result<ClassFragment, Error> {
142 match reader.read_u16() {

Callers

nothing calls this directly

Calls 7

read_u8Method · 0.80
read_u16Method · 0.80
read_nMethod · 0.80
read_u32Method · 0.80
read_u64Method · 0.80
get_u16Method · 0.80
get_u8Method · 0.80

Tested by

no test coverage detected