Ver Fonte

Dedup code in sema (#1286)

Signed-off-by: Tarek <tareknaser360@gmail.com>
Tarek Nasser há 2 anos atrás
pai
commit
fd563c822b
1 ficheiros alterados com 14 adições e 20 exclusões
  1. 14 20
      src/sema/statements.rs

+ 14 - 20
src/sema/statements.rs

@@ -1191,6 +1191,18 @@ fn emit_event(
     diagnostics: &mut Diagnostics,
 ) -> Result<Statement, ()> {
     let function_no = context.function_no.unwrap();
+    let to_stmt =
+        |ns: &mut Namespace, event_no: usize, event_loc: pt::Loc, cast_args: Vec<Expression>| {
+            if !ns.functions[function_no].emits_events.contains(&event_no) {
+                ns.functions[function_no].emits_events.push(event_no);
+            }
+            Statement::Emit {
+                loc: *loc,
+                event_no,
+                event_loc,
+                args: cast_args,
+            }
+        };
 
     match ty {
         pt::Expression::FunctionCall(_, ty, args) => {
@@ -1271,16 +1283,7 @@ fn emit_event(
                 }
 
                 if matches {
-                    if !ns.functions[function_no].emits_events.contains(event_no) {
-                        ns.functions[function_no].emits_events.push(*event_no);
-                    }
-
-                    return Ok(Statement::Emit {
-                        loc: *loc,
-                        event_no: *event_no,
-                        event_loc,
-                        args: cast_args,
-                    });
+                    return Ok(to_stmt(ns, *event_no, event_loc, cast_args));
                 } else if event_nos.len() > 1 && diagnostics.extend_non_casting(&errors) {
                     return Err(());
                 }
@@ -1423,16 +1426,7 @@ fn emit_event(
                 }
 
                 if matches {
-                    if !ns.functions[function_no].emits_events.contains(event_no) {
-                        ns.functions[function_no].emits_events.push(*event_no);
-                    }
-
-                    return Ok(Statement::Emit {
-                        loc: *loc,
-                        event_no: *event_no,
-                        event_loc,
-                        args: cast_args,
-                    });
+                    return Ok(to_stmt(ns, *event_no, event_loc, cast_args));
                 } else if event_nos.len() > 1 && diagnostics.extend_non_casting(&temp_diagnostics) {
                     return Err(());
                 }