mirror of
https://github.com/microsoft/regorus.git
synced 2026-08-05 02:16:11 +00:00
Statement Scheduler Implementation
Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com>
This commit is contained in:
committed by
Anand Krishnamoorthi
parent
6738eeed3c
commit
7789de41b6
@@ -349,6 +349,7 @@ cases:
|
||||
- |
|
||||
package t
|
||||
import future.keywords
|
||||
x = true
|
||||
default a = [5 | not x]
|
||||
query: data.t.a
|
||||
want_result: []
|
||||
|
||||
@@ -26,10 +26,10 @@ cases:
|
||||
every key, x in [1, 2, 3] {
|
||||
x == key + 1
|
||||
}
|
||||
|
||||
|
||||
y = x + key
|
||||
}
|
||||
|
||||
|
||||
# Set
|
||||
x2 = y {
|
||||
# Only value
|
||||
@@ -48,7 +48,7 @@ cases:
|
||||
every key, x in {1, 2, 3} {
|
||||
x == key
|
||||
}
|
||||
|
||||
|
||||
y = x + key
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ cases:
|
||||
every key, x in {1:2, 3:4} {
|
||||
x == key + 1
|
||||
}
|
||||
|
||||
|
||||
y = x + key
|
||||
}
|
||||
|
||||
@@ -91,9 +91,11 @@ cases:
|
||||
}
|
||||
every _ in `abc` {
|
||||
undefined_var
|
||||
}
|
||||
}
|
||||
y = 100
|
||||
}
|
||||
|
||||
undefined_var { false }
|
||||
query: data.test
|
||||
want_result:
|
||||
x1: 100
|
||||
@@ -114,10 +116,13 @@ cases:
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
p { false }
|
||||
|
||||
x2 = y {
|
||||
y = 100
|
||||
every _ in [1] {
|
||||
# TODO: if p is an undefined var, raise error.
|
||||
p
|
||||
}
|
||||
}
|
||||
@@ -126,5 +131,3 @@ cases:
|
||||
|
||||
#TODO:
|
||||
# every vars must be used
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
# Copyright (c) Microsoft Corporation.
|
||||
# Licensed under the MIT License.
|
||||
cases:
|
||||
- note: basic
|
||||
data: {}
|
||||
modules:
|
||||
- |
|
||||
package test
|
||||
import future.keywords
|
||||
|
||||
r1 = value {
|
||||
value = p + a[0] # p and a are defined later
|
||||
q = p # q depends on p; p depends on q
|
||||
q = t[0] # t is defined at end
|
||||
a = [ t[i] | # a uses a compr which depends on t
|
||||
i := 1
|
||||
]
|
||||
t = [8, 4]
|
||||
}
|
||||
|
||||
query: data.test
|
||||
want_result:
|
||||
r1: 12
|
||||
@@ -198,9 +198,12 @@ pub fn eval_file(
|
||||
modules_ref.push(m);
|
||||
}
|
||||
|
||||
let analyzer = Analyzer::new();
|
||||
let schedule = analyzer.analyze(&modules)?;
|
||||
|
||||
// First eval the modules.
|
||||
let mut interpreter = interpreter::Interpreter::new(modules_ref)?;
|
||||
interpreter.eval(&data, &input, enable_tracing)?;
|
||||
interpreter.eval(&data, &input, enable_tracing, Some(&schedule))?;
|
||||
|
||||
// Now eval the query.
|
||||
let source = Source {
|
||||
@@ -242,9 +245,18 @@ fn one_file() -> Result<()> {
|
||||
lines: contents.split('\n').collect(),
|
||||
};
|
||||
let mut parser = Parser::new(&source)?;
|
||||
let tree = parser.parse()?;
|
||||
let mut interpreter = interpreter::Interpreter::new(vec![&tree])?;
|
||||
let results = interpreter.eval(&None, &input, true)?;
|
||||
let modules = vec![parser.parse()?];
|
||||
|
||||
let analyzer = Analyzer::new();
|
||||
let schedule = analyzer.analyze(&modules)?;
|
||||
|
||||
let mut modules_ref = vec![];
|
||||
for m in &modules {
|
||||
modules_ref.push(m);
|
||||
}
|
||||
|
||||
let mut interpreter = interpreter::Interpreter::new(modules_ref)?;
|
||||
let results = interpreter.eval(&None, &input, true, Some(&schedule))?;
|
||||
println!("eval results:\n{}", serde_json::to_string_pretty(&results)?);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user