Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 12 additions & 12 deletions src/braket/default_simulator/openqasm/interpreter.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,9 +115,9 @@
from .parser.openqasm_parser import parse
from .program_context import (
AbstractProgramContext,
BreakSignal,
ContinueSignal,
ProgramContext,
_BreakSignal,
_ContinueSignal,
)

_EVALUABLE = (
Expand Down Expand Up @@ -666,11 +666,11 @@ def _(self, node: ForInLoop) -> None:
for _ in gen:
try:
self.visit(deepcopy(node.block))
except _BreakSignal:
except BreakSignal:
self.context.handle_loop_break()
gen.close()
break
except _ContinueSignal:
except ContinueSignal:
self.context.handle_loop_continue()
continue
else:
Expand All @@ -687,10 +687,10 @@ def _(self, node: ForInLoop) -> None:
self.context.declare_variable(loop_var_name, node.type, i)
try:
self.visit(deepcopy(node.block))
except _BreakSignal:
except BreakSignal:
self.context.handle_loop_break()
break
except _ContinueSignal:
except ContinueSignal:
self.context.handle_loop_continue()
continue

Expand All @@ -704,31 +704,31 @@ def _(self, node: WhileLoop) -> None:
for _ in gen:
try:
self.visit(deepcopy(node.block))
except _BreakSignal:
except BreakSignal:
self.context.handle_loop_break()
gen.close()
break
except _ContinueSignal:
except ContinueSignal:
self.context.handle_loop_continue()
continue
else:
while cast_to(BooleanLiteral, self.visit(node.while_condition)).value:
try:
self.visit(deepcopy(node.block))
except _BreakSignal:
except BreakSignal:
self.context.handle_loop_break()
break
except _ContinueSignal:
except ContinueSignal:
self.context.handle_loop_continue()
continue

@visit.register
def _(self, node: BreakStatement) -> None:
raise _BreakSignal()
raise BreakSignal()

@visit.register
def _(self, node: ContinueStatement) -> None:
raise _ContinueSignal()
raise ContinueSignal()

@visit.register
def _(self, node: AliasStatement) -> None:
Expand Down
6 changes: 6 additions & 0 deletions src/braket/default_simulator/openqasm/program_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -1132,10 +1132,16 @@ class _BreakSignal(Exception):
"""Internal signal raised when a BreakStatement is encountered during branched execution."""


BreakSignal = _BreakSignal


class _ContinueSignal(Exception):
"""Internal signal raised when a ContinueStatement is encountered during branched execution."""


ContinueSignal = _ContinueSignal


class ProgramContext(AbstractProgramContext):
def __init__(self, circuit: Circuit | None = None, simulator: BaseLocalSimulator | None = None):
"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2482,7 +2482,7 @@ def test_if_else_branch():


def test_for_loop_break():
# exercises _BreakSignal / BreakStatement
# exercises BreakSignal / BreakStatement
qasm = """
int[8] x = 0;
for int[8] i in [0:4] {
Expand All @@ -2497,7 +2497,7 @@ def test_for_loop_break():


def test_for_loop_continue():
# exercises _ContinueSignal / ContinueStatement
# exercises ContinueSignal / ContinueStatement
qasm = """
int[8] x = 0;
for int[8] i in [0:4] {
Expand Down
2 changes: 1 addition & 1 deletion test/unit_tests/braket/default_simulator/test_mcm.py
Original file line number Diff line number Diff line change
Expand Up @@ -4202,7 +4202,7 @@ def conditional_flip(int[32] flag, qubit target) {


class TestMCMWhileLoopBreak:
"""Cover _BreakSignal in branched while loop."""
"""Cover BreakSignal in branched while loop."""

def test_break_in_branched_while_loop(self, simulator):
"""Break inside a while loop after MCM."""
Expand Down
Loading