|
@@ -33,10 +33,26 @@ where
|
|
|
comment_scope(
|
|
|
DebugVerbosity::AllScopes,
|
|
|
"Type1Opcode",
|
|
|
- choice!(def_breakpoint(), def_fatal(), def_if_else(), def_noop(), def_return(), def_while()),
|
|
|
+ choice!(def_break(), def_breakpoint(), def_fatal(), def_if_else(), def_noop(), def_return(), def_while()),
|
|
|
)
|
|
|
}
|
|
|
|
|
|
+fn def_break<'a, 'c>() -> impl Parser<'a, 'c, ()>
|
|
|
+where
|
|
|
+ 'c: 'a,
|
|
|
+{
|
|
|
+ /*
|
|
|
+ * DefBreak := 0xa5
|
|
|
+ */
|
|
|
+ opcode(opcode::DEF_BREAK_OP)
|
|
|
+ .then(comment_scope(
|
|
|
+ DebugVerbosity::AllScopes,
|
|
|
+ "DefBreak",
|
|
|
+ id().map(|()| -> Result<(), Propagate> { Err(Propagate::Break) }),
|
|
|
+ ))
|
|
|
+ .discard_result()
|
|
|
+}
|
|
|
+
|
|
|
fn def_breakpoint<'a, 'c>() -> impl Parser<'a, 'c, ()>
|
|
|
where
|
|
|
'c: 'a,
|
|
@@ -197,6 +213,10 @@ where
|
|
|
context = new_context;
|
|
|
}
|
|
|
// TODO: differentiate real errors and special Propagates (e.g. break, continue, etc.)
|
|
|
+ Err((_, new_context, Propagate::Break)) => {
|
|
|
+ context = new_context;
|
|
|
+ break;
|
|
|
+ }
|
|
|
Err((_, context, err)) => return (Err(err), context),
|
|
|
}
|
|
|
|