File tree Expand file tree Collapse file tree 1 file changed +14
-4
lines changed
Expand file tree Collapse file tree 1 file changed +14
-4
lines changed Original file line number Diff line number Diff line change @@ -1654,15 +1654,19 @@ impl exprCoder {
16541654 if m.Func.Decl.IsVoid() {
16551655 mut v, _ := m.Err.Model.(&sema::Var)
16561656 if v != nil && v.Name == "error" {
1657+ self.oc.write("return __jule_VoidExceptional{.error=")
16571658 if hasDefer {
1658- self.oc.write(deferStackName + ".call();\n")
1659- self.oc.indent()
1659+ self.oc.write("({ auto __result = ")
16601660 }
1661- self.oc.write("return __jule_VoidExceptional{.error= std::move(")
1661+ self.oc.write("std::move(")
16621662 // Handle error variable like ordinary variable.
16631663 // Because it may be captured, use captured variable handler.
16641664 self.var(v)
1665- self.oc.write(")}")
1665+ self.oc.write(")")
1666+ if hasDefer {
1667+ self.oc.write(";" + deferStackName + ".call(); __result; })")
1668+ }
1669+ self.oc.write("}")
16661670 ret
16671671 }
16681672 self.oc.write("return __jule_VoidExceptional{.error=")
@@ -1672,9 +1676,15 @@ impl exprCoder {
16721676 mut v, _ := m.Err.Model.(&sema::Var)
16731677 if v != nil && v.Name == "error" {
16741678 self.oc.write(">{.error=")
1679+ if hasDefer {
1680+ self.oc.write("({ auto __result = ")
1681+ }
16751682 // Handle error variable like ordinary variable.
16761683 // Because it may be captured, use captured variable handler.
16771684 self.var(v)
1685+ if hasDefer {
1686+ self.oc.write(";" + deferStackName + ".call(); __result; })")
1687+ }
16781688 self.oc.write("}")
16791689 ret
16801690 }
You can’t perform that action at this time.
0 commit comments