neo_solidity/ir/statements/
events.rs1fn lower_emit(expr: &Expression, ctx: &mut LoweringContext, instructions: &mut Vec<Instruction>) {
2 if let Expression::FunctionCall(_, func, args) = expr {
3 if let Expression::Variable(identifier) = func.as_ref() {
4 let original_len = instructions.len();
5 instructions.push(Instruction::PushLiteral(LiteralValue::String(
6 identifier.name.as_bytes().to_vec(),
7 )));
8 let mut success = true;
9 for arg in args {
10 if !lower_expression(arg, ctx, instructions) {
11 success = false;
12 }
13 }
14
15 if success {
16 if let Some(index) = ctx.event_index_map.get(&identifier.name) {
17 instructions.push(Instruction::EmitEvent {
18 event_index: *index,
19 arg_count: args.len(),
20 });
21 } else {
22 instructions.push(Instruction::EmitEventByName {
23 name: identifier.name.clone(),
24 arg_count: args.len(),
25 });
26 }
27 return;
28 }
29
30 instructions.truncate(original_len);
31 }
32 }
33}