Skip to content

Commit dbfd3e2

Browse files
committed
Add unstable features flag. Changed testing flow to verify unstable features
1 parent c006ff8 commit dbfd3e2

13 files changed

Lines changed: 1034 additions & 238 deletions

File tree

fuzz/fuzz_targets/compile_text.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@ fn do_test(data: &[u8]) -> libfuzzer_sys::Corpus {
3939
if slow_input(&program_text) {
4040
return Corpus::Reject;
4141
}
42-
let template = match simplicityhl::TemplateProgram::new(program_text) {
42+
let template = match simplicityhl::TemplateProgram::new(
43+
program_text,
44+
&crate::unstable::UnstableFeatureManager::default(),
45+
) {
4346
Ok(x) => x,
4447
Err(..) => return Corpus::Keep,
4548
};

src/ast.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1658,7 +1658,8 @@ mod alias_scope_regression_tests {
16581658
use crate::error::ErrorCollector;
16591659

16601660
fn analyze_multifile(files: Vec<(&str, &str)>) -> Result<(), String> {
1661-
let (graph, _ids, _dir) = setup_graph(files);
1661+
let (graph, _ids, _dir) =
1662+
setup_graph(files, [crate::unstable::UnstableFeature::UseKeyword]);
16621663

16631664
let mut error_handler = ErrorCollector::new();
16641665
let driver_program = graph

src/compile/builtins.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ mod tests {
8181

8282
#[test]
8383
fn array_fold() {
84-
TestCase::program_file("./examples/array_fold.simf")
84+
TestCase::program_file("./examples/array_fold.simf", [])
8585
.with_witness_values(WitnessValues::default())
8686
.assert_run_success();
8787
}

src/driver/linearization.rs

Lines changed: 51 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -88,15 +88,23 @@ impl fmt::Display for LinearizationError {
8888
#[cfg(test)]
8989
mod tests {
9090
use crate::driver::tests::setup_graph;
91+
use crate::unstable::UnstableFeature;
9192

9293
use super::*;
9394

9495
#[test]
9596
fn test_linearize_simple_import() {
96-
let (graph, ids, _dir) = setup_graph(vec![
97-
("main.simf", "use lib::math::some_func;"),
98-
("libs/lib/math.simf", ""),
99-
]);
97+
let (graph, ids, _dir) = setup_graph(
98+
vec![
99+
("main.simf", "use lib::math::some_func;"),
100+
("libs/lib/math.simf", ""),
101+
],
102+
[
103+
UnstableFeature::UseKeyword,
104+
UnstableFeature::CrateKeyword,
105+
UnstableFeature::AsKeyword,
106+
],
107+
);
100108

101109
let order = graph.linearize().unwrap();
102110

@@ -114,12 +122,19 @@ mod tests {
114122
// B -> imports Common
115123
// Expected: Common loaded ONLY ONCE.
116124

117-
let (graph, ids, _dir) = setup_graph(vec![
118-
("main.simf", "use lib::A::foo; use lib::B::bar;"),
119-
("libs/lib/A.simf", "use crate::Common::dummy1;"),
120-
("libs/lib/B.simf", "use crate::Common::dummy2;"),
121-
("libs/lib/Common.simf", ""),
122-
]);
125+
let (graph, ids, _dir) = setup_graph(
126+
vec![
127+
("main.simf", "use lib::A::foo; use lib::B::bar;"),
128+
("libs/lib/A.simf", "use crate::Common::dummy1;"),
129+
("libs/lib/B.simf", "use crate::Common::dummy2;"),
130+
("libs/lib/Common.simf", ""),
131+
],
132+
[
133+
UnstableFeature::UseKeyword,
134+
UnstableFeature::CrateKeyword,
135+
UnstableFeature::AsKeyword,
136+
],
137+
);
123138

124139
let order = graph.linearize().unwrap();
125140

@@ -137,11 +152,18 @@ mod tests {
137152

138153
#[test]
139154
fn test_linearize_detects_cycle() {
140-
let (graph, _, _dir) = setup_graph(vec![
141-
("main.simf", "use lib::A::entry;"),
142-
("libs/lib/A.simf", "use crate::B::func;"),
143-
("libs/lib/B.simf", "use crate::A::func;"),
144-
]);
155+
let (graph, _, _dir) = setup_graph(
156+
vec![
157+
("main.simf", "use lib::A::entry;"),
158+
("libs/lib/A.simf", "use crate::B::func;"),
159+
("libs/lib/B.simf", "use crate::A::func;"),
160+
],
161+
[
162+
UnstableFeature::UseKeyword,
163+
UnstableFeature::CrateKeyword,
164+
UnstableFeature::AsKeyword,
165+
],
166+
);
145167

146168
let order = graph.linearize();
147169
assert!(matches!(
@@ -154,13 +176,20 @@ mod tests {
154176
fn test_linearize_allows_conflicting_nested_import_order() {
155177
// A imports X then Y, while B imports Y then X.
156178
// This DAG is still valid because neither X nor Y depends on the other.
157-
let (graph, ids, _dir) = setup_graph(vec![
158-
("main.simf", "use lib::A::foo; use lib::B::bar;"),
159-
("libs/lib/A.simf", "use crate::X::foo; use crate::Y::bar;"),
160-
("libs/lib/B.simf", "use crate::Y::baz; use crate::X::qux;"),
161-
("libs/lib/X.simf", ""),
162-
("libs/lib/Y.simf", ""),
163-
]);
179+
let (graph, ids, _dir) = setup_graph(
180+
vec![
181+
("main.simf", "use lib::A::foo; use lib::B::bar;"),
182+
("libs/lib/A.simf", "use crate::X::foo; use crate::Y::bar;"),
183+
("libs/lib/B.simf", "use crate::Y::baz; use crate::X::qux;"),
184+
("libs/lib/X.simf", ""),
185+
("libs/lib/Y.simf", ""),
186+
],
187+
[
188+
UnstableFeature::UseKeyword,
189+
UnstableFeature::CrateKeyword,
190+
UnstableFeature::AsKeyword,
191+
],
192+
);
164193

165194
let order = graph
166195
.linearize()

0 commit comments

Comments
 (0)