libgir/chunk/
chunk.rs
1use super::{conversion_from_glib, parameter_ffi_call_out};
2use crate::analysis::{
3 function_parameters::TransformationType, return_value,
4 safety_assertion_mode::SafetyAssertionMode,
5};
6
7#[derive(Clone, Debug)]
8pub enum Chunk {
9 Comment(Vec<Chunk>),
10 Chunks(Vec<Chunk>),
11 BlockHalf(Vec<Chunk>), UnsafeSmart(Vec<Chunk>), Unsafe(Vec<Chunk>),
14 #[allow(clippy::upper_case_acronyms)]
15 FfiCallTODO(String),
16 FfiCall {
17 name: String,
18 params: Vec<Chunk>,
19 ignore_return: bool,
20 },
21 FfiCallParameter {
22 transformation_type: TransformationType,
23 },
24 FfiCallOutParameter {
25 par: parameter_ffi_call_out::Parameter,
26 },
27 FfiCallConversion {
29 ret: return_value::Info,
30 array_length_name: Option<String>,
31 call: Box<Chunk>,
32 },
33 Let {
34 name: String,
35 is_mut: bool,
36 value: Box<Chunk>,
37 type_: Option<Box<Chunk>>,
38 },
39 Uninitialized,
40 UninitializedNamed {
41 name: String,
42 },
43 NullPtr,
44 NullMutPtr,
45 Custom(String),
46 Tuple(Vec<Chunk>, TupleMode),
47 FromGlibConversion {
48 mode: conversion_from_glib::Mode,
49 array_length_name: Option<String>,
50 value: Box<Chunk>,
51 },
52 OptionalReturn {
53 condition: String,
54 value: Box<Chunk>,
55 },
56 AssertErrorSanity,
57 ErrorResultReturn {
58 ret: Option<Box<Chunk>>,
59 value: Box<Chunk>,
60 },
61 AssertInit(SafetyAssertionMode),
62 Connect {
63 signal: String,
64 trampoline: String,
65 in_trait: bool,
66 is_detailed: bool,
67 },
68 Name(String),
69 ExternCFunc {
70 name: String,
71 parameters: Vec<Param>,
72 body: Box<Chunk>,
73 return_value: Option<String>,
74 bounds: String,
75 },
76 Cast {
77 name: String,
78 type_: String,
79 },
80 Call {
81 func_name: String,
82 arguments: Vec<Chunk>,
83 },
84}
85
86impl Chunk {
87 pub fn is_uninitialized(&self) -> bool {
88 matches!(*self, Self::Uninitialized)
89 }
90}
91
92#[derive(Clone, Debug)]
93pub struct Param {
94 pub name: String,
95 pub typ: String,
96}
97
98pub fn chunks(ch: Chunk) -> Vec<Chunk> {
99 vec![ch]
100}
101
102#[derive(Clone, Copy, Debug, Eq, PartialEq)]
103pub enum TupleMode {
104 Auto, WithUnit, #[deprecated]
107 #[allow(dead_code)]
108 Simple, }