1use super::{DebugId, IntExpr, PlaceNumcheck, 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 moved: Vec<Odo>,
19 pub subscripts: Vec<Subscript>,
21 pub odo: Vec<Odo>,
24 pub refmod: Option<RefMod>,
25 pub name: SymId,
26 pub at: DebugId,
27 pub numcheck: PlaceNumcheck,
28}
29
30#[derive(Clone, Copy, Debug, PartialEq, Eq)]
31pub enum Base {
32 Program,
33 Local,
34 Linkage(u16),
35 ReturnCode,
37 Eib,
38 SelfRef,
39 JniEnv,
40 Xml(XmlRegister),
44}
45
46#[derive(Clone, Debug, PartialEq, Eq)]
48pub struct Subscript {
49 pub stride: u32,
50 pub value: IntExpr,
51 pub check: Option<u32>,
52}
53
54#[derive(Clone, Debug, PartialEq, Eq)]
55pub struct Odo {
56 pub object: IntExpr,
57 pub max: u32,
58 pub element: u32,
59 pub check: bool,
60}
61
62#[derive(Clone, Debug, PartialEq, Eq)]
64pub struct RefMod {
65 pub start: IntExpr,
66 pub length: Option<IntExpr>,
67 pub check: bool,
68}
69
70codec_struct!(Place { base, offset, len, kind, scaling, moved, subscripts, odo, refmod, name, at, numcheck });
71codec_enum!(Base {
72 Program = 0,
73 Local = 1,
74 Linkage(record) = 2,
75 ReturnCode = 3,
76 Eib = 4,
77 SelfRef = 5,
78 JniEnv = 6,
79 Xml(register) = 7,
80});
81codec_struct!(Subscript { stride, value, check });
82codec_struct!(Odo { object, max, element, check });
83codec_struct!(RefMod { start, length, check });