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

Method write_constant

src/bytecode/io/writer.rs:44–63  ·  view source on GitHub ↗
(&mut self, constant: &Constant)

Source from the content-addressed store, hash-verified

42 }
43
44 fn write_constant(&mut self, constant: &Constant) -> Result<usize, Error> {
45 match constant {
46 &Constant::Utf8(ref bytes) => self.write_u8(1).and(self.write_u16(bytes.len() as u16)).and(self.write_n(bytes)),
47 &Constant::Integer(ref value) => self.write_u8(3).and(self.write_u32(*value)),
48 &Constant::Float(ref value) => self.write_u8(4).and(self.write_u32(*value)),
49 &Constant::Long(ref value) => self.write_u8(5).and(self.write_u64(*value)),
50 &Constant::Double(ref value) => self.write_u8(6).and(self.write_u64(*value)),
51 &Constant::Class(ref idx) => self.write_u8(7).and(self.write_u16(idx.idx as u16)),
52 &Constant::String(ref idx) => self.write_u8(8).and(self.write_u16(idx.idx as u16)),
53 &Constant::MethodType(ref idx) => self.write_u8(16).and(self.write_u16(idx.idx as u16)),
54 &Constant::FieldRef { class_index: ref c_idx, name_and_type_index: ref n_idx } => self.write_u8(9).and(self.write_u16(c_idx.idx as u16)).and(self.write_u16(n_idx.idx as u16)),
55 &Constant::MethodRef { class_index: ref c_idx, name_and_type_index: ref n_idx } => self.write_u8(10).and(self.write_u16(c_idx.idx as u16)).and(self.write_u16(n_idx.idx as u16)),
56 &Constant::InterfaceMethodRef { class_index: ref c_idx, name_and_type_index: ref n_idx } => self.write_u8(11).and(self.write_u16(c_idx.idx as u16)).and(self.write_u16(n_idx.idx as u16)),
57 &Constant::NameAndType { name_index: ref n_idx, descriptor_index: ref d_idx } => self.write_u8(12).and(self.write_u16(n_idx.idx as u16)).and(self.write_u16(d_idx.idx as u16)),
58 &Constant::MethodHandle { reference_kind: ref kind, reference_index: ref r_idx } => self.write_u8(15).and(self.write_u8(kind.to_u8())).and(self.write_u16(r_idx.idx as u16)),
59 &Constant::InvokeDynamic { bootstrap_method_attr_index: ref m_idx, name_and_type_index: ref n_idx } => self.write_u8(18).and(self.write_u16(m_idx.idx as u16)).and(self.write_u16(n_idx.idx as u16)),
60 &Constant::Placeholder => Ok(0),
61 _ => Err(Error::new(ErrorKind::InvalidData, "Unknown constant detected"))
62 }
63 }
64
65 fn write_access_flags(&mut self, flags: &AccessFlags) -> Result<usize, Error> {
66 self.write_u16(flags.flags)

Callers 1

write_constant_poolMethod · 0.80

Calls 7

write_u8Method · 0.80
write_u16Method · 0.80
lenMethod · 0.80
write_nMethod · 0.80
write_u32Method · 0.80
write_u64Method · 0.80
to_u8Method · 0.80

Tested by

no test coverage detected