Skip to content

Commit f5414dd

Browse files
committed
Refactor evaluator for stackless execution
1 parent 8b3eff0 commit f5414dd

File tree

15 files changed

+1485
-1448
lines changed

15 files changed

+1485
-1448
lines changed

compiler/qsc/src/compile.rs

+4-14
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
use crate::error::WithSource;
55
use miette::{Diagnostic, Report};
66
use qsc_frontend::compile::{CompileUnit, PackageStore, SourceMap};
7-
use qsc_hir::{global, hir::PackageId};
8-
use qsc_passes::run_default_passes;
7+
use qsc_hir::hir::PackageId;
8+
use qsc_passes::{run_core_passes, run_default_passes};
99
use thiserror::Error;
1010

1111
#[derive(Clone, Debug, Diagnostic, Error)]
@@ -45,18 +45,8 @@ pub fn compile(
4545
#[must_use]
4646
pub fn core() -> CompileUnit {
4747
let mut unit = qsc_frontend::compile::core();
48-
let table = global::iter_package(None, &unit.package).collect();
49-
let pass_errors = run_default_passes(&table, &mut unit);
50-
if pass_errors.is_empty() {
51-
unit
52-
} else {
53-
for error in pass_errors {
54-
let report = Report::new(WithSource::from_map(&unit.sources, error, None));
55-
eprintln!("{report:?}");
56-
}
57-
58-
panic!("could not compile core library")
59-
}
48+
run_core_passes(&mut unit);
49+
unit
6050
}
6151

6252
/// Compiles the standard library.

compiler/qsc/src/interpret/stateful/tests.rs

+17
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,23 @@ mod given_interpreter {
222222
);
223223
is_unit_with_output(&result, &output, "before\nafter");
224224
}
225+
226+
#[test]
227+
fn global_qubits() {
228+
let mut interpreter = get_interpreter();
229+
let (result, output) = line(&mut interpreter, "open Microsoft.Quantum.Diagnostics;");
230+
is_only_value(&result, &output, &Value::unit());
231+
let (result, output) = line(&mut interpreter, "DumpMachine()");
232+
is_unit_with_output(&result, &output, "STATE:\n|0⟩: 1+0i");
233+
let (result, output) = line(&mut interpreter, "use (q0, qs) = (Qubit(), Qubit[3]);");
234+
is_only_value(&result, &output, &Value::unit());
235+
let (result, output) = line(&mut interpreter, "DumpMachine()");
236+
is_unit_with_output(&result, &output, "STATE:\n|0000⟩: 1+0i");
237+
let (result, output) = line(&mut interpreter, "X(q0); X(qs[1]);");
238+
is_only_value(&result, &output, &Value::unit());
239+
let (result, output) = line(&mut interpreter, "DumpMachine()");
240+
is_unit_with_output(&result, &output, "STATE:\n|0101⟩: 1+0i");
241+
}
225242
}
226243

227244
#[cfg(test)]

0 commit comments

Comments
 (0)