1use super::{DebugId, IntExpr, SymId, XmlRegister};
4use crate::storage::Kind;
5use crate::{codec_enum, codec_struct};
6
7#[derive(Clone, Debug, PartialEq, Eq)]
8pub struct Place {
9 pub base: Base,
10 pub offset: u32,
11 pub len: u32,
13 pub kind: Kind,
14 pub scaling: u32,
16 pub subscripts: Vec<Subscript>,
18 pub odo: Option<Odo>,
19 pub refmod: Option<RefMod>,
20 pub name: SymId,
21 pub at: DebugId,
22}
23
24#[derive(Clone, Copy, Debug, PartialEq, Eq)]
25pub enum Base {
26 Program,
27 Local,
28 Linkage(u16),
29 ReturnCode,
31 Eib,
32 SelfRef,
33 JniEnv,
34 Xml(XmlRegister),
38}
39
40#[derive(Clone, Debug, PartialEq, Eq)]
42pub struct Subscript {
43 pub stride: u32,
44 pub value: IntExpr,
45 pub check: Option<u32>,
46}
47
48#[derive(Clone, Debug, PartialEq, Eq)]
49pub struct Odo {
50 pub object: IntExpr,
51 pub max: u32,
52 pub element: u32,
53 pub check: bool,
54}
55
56#[derive(Clone, Debug, PartialEq, Eq)]
58pub struct RefMod {
59 pub start: IntExpr,
60 pub length: Option<IntExpr>,
61 pub check: bool,
62}
63
64codec_struct!(Place { base, offset, len, kind, scaling, subscripts, odo, refmod, name, at });
65codec_enum!(Base {
66 Program = 0,
67 Local = 1,
68 Linkage(record) = 2,
69 ReturnCode = 3,
70 Eib = 4,
71 SelfRef = 5,
72 JniEnv = 6,
73 Xml(register) = 7,
74});
75codec_struct!(Subscript { stride, value, check });
76codec_struct!(Odo { object, max, element, check });
77codec_struct!(RefMod { start, length, check });