Bläddra i källkod

codegen: print the require error string for target substrate (#927)

Since we have now debug prints working in substrate, error strings from require assertions can be appended the debug message buffer. This should make debugging during contract development much easier.
Cyrill Leutwiler 3 år sedan
förälder
incheckning
2ff8ddc2de
1 ändrade filer med 8 tillägg och 7 borttagningar
  1. 8 7
      src/codegen/expression.rs

+ 8 - 7
src/codegen/expression.rs

@@ -1118,14 +1118,15 @@ fn require(
     let expr = args
         .get(1)
         .map(|s| expression(s, cfg, contract_no, func, ns, vartab, opt));
-    if ns.target == Target::Solana {
-        // On Solana, print the reason, do not abi encoding it
-        if let Some(expr) = expr {
-            cfg.add(vartab, Instr::Print { expr });
+    match ns.target {
+        // On Solana and Substrate, print the reason, do not abi encoding it
+        Target::Solana | Target::Substrate { .. } => {
+            if let Some(expr) = expr {
+                cfg.add(vartab, Instr::Print { expr });
+            }
+            cfg.add(vartab, Instr::AssertFailure { expr: None });
         }
-        cfg.add(vartab, Instr::AssertFailure { expr: None });
-    } else {
-        cfg.add(vartab, Instr::AssertFailure { expr });
+        _ => cfg.add(vartab, Instr::AssertFailure { expr }),
     }
     cfg.set_basic_block(true_);
     Expression::Poison