pub enum Statement {
Show 18 variants
VariableDeclaration {
name: String,
var_type: Type,
initializer: Option<Expression>,
},
Return(Option<Expression>),
Assignment {
target: String,
value: Expression,
},
If {
condition: Expression,
then_block: Vec<Statement>,
else_block: Option<Vec<Statement>>,
},
For {
init: Option<Box<Statement>>,
condition: Option<Expression>,
increment: Option<Box<Statement>>,
body: Vec<Statement>,
},
While {
condition: Expression,
body: Vec<Statement>,
},
DerefAssignment {
target: Expression,
value: Expression,
},
ArrayIndexAssignment {
array: Box<Expression>,
index: Box<Expression>,
value: Expression,
},
FieldAssignment {
object: Expression,
field: String,
value: Expression,
},
Break,
Continue,
Switch {
condition: Expression,
cases: Vec<SwitchCase>,
default_case: Option<Vec<Statement>>,
},
PostIncrement {
target: String,
},
PreIncrement {
target: String,
},
PostDecrement {
target: String,
},
PreDecrement {
target: String,
},
CompoundAssignment {
target: String,
op: BinaryOperator,
value: Expression,
},
FunctionCall {
function: String,
arguments: Vec<Expression>,
},
}Expand description
Represents a C statement.
Variants§
VariableDeclaration
Variable declaration: int* ptr = malloc(4);
Fields
initializer: Option<Expression>Optional initializer expression
Return(Option<Expression>)
Return statement: return expr;
Assignment
Assignment statement: x = 42;
If
If statement: if (cond) { ... } else { ... }
Fields
condition: ExpressionCondition expression
For
For loop: for (init; cond; inc) { ... }
Fields
condition: Option<Expression>Optional condition expression
While
While loop: while (cond) { ... }
DerefAssignment
Pointer dereference assignment: *ptr = value;
Fields
target: ExpressionTarget expression to dereference
value: ExpressionValue expression to assign
ArrayIndexAssignment
Array index assignment: arr[i] = value;
Fields
array: Box<Expression>Array expression
index: Box<Expression>Index expression
value: ExpressionValue expression to assign
FieldAssignment
Field assignment: ptr->field = value; or obj.field = value;
Break
Break statement: break;
Continue
Continue statement: continue;
Switch
Switch statement: switch (expr) { case 1: ...; default: ...; }
Fields
condition: ExpressionCondition expression to switch on
cases: Vec<SwitchCase>List of case statements
PostIncrement
Post-increment statement: ptr++;
PreIncrement
Pre-increment statement: ++ptr;
PostDecrement
Post-decrement statement: ptr--;
PreDecrement
Pre-decrement statement: --ptr;
CompoundAssignment
Compound assignment: ptr += offset;, x *= 2;, etc.
FunctionCall
Function call statement: strlen(s);, strcpy(dst, src);
Implementations§
Source§impl Statement
impl Statement
Sourcepub fn is_string_function_call(&self) -> bool
pub fn is_string_function_call(&self) -> bool
Check if this statement is a string function call.
Sourcepub fn is_function_call(&self) -> bool
pub fn is_function_call(&self) -> bool
Check if this statement is a function call.
Sourcepub fn as_function_call(&self) -> Option<&Expression>
pub fn as_function_call(&self) -> Option<&Expression>
Convert this statement to a function call expression if it is one.
§Implementation Status
Stub implementation - always returns None.
The Statement::FunctionCall variant doesn’t store the call as an Expression,
so conversion would require reconstructing an Expression::FunctionCall from
the statement’s fields.