Merge pull request #24 from jntrnr/concrete_var_assign

Concrete var assign
This commit is contained in:
JT 2021-09-07 06:15:54 +12:00 committed by GitHub
commit c027a14b9b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 34 additions and 0 deletions

View File

@ -14,12 +14,15 @@
- [x] parsing tables
- [x] Block params
- [x] Ranges
- [ ] Iteration (`each`) over tables
- [ ] ctrl-c support
- [ ] Column path
- [ ] ...rest without calling it rest
- [ ] operator overflow
- [ ] finish operator type-checking
- [ ] Source
- [ ] Autoenv
- [ ] Externals
- [ ] let [first, rest] = [1, 2, 3]
## Maybe:

View File

@ -22,6 +22,29 @@ impl EvaluationContext {
}
pub fn add_var(&self, var_id: VarId, value: Value) {
// We need to make values concreate before we assign them to variables, as stream values
// will drain and remain drained.
//
// TODO: find a good home for this
// TODO: add ctrl-c support
let value = match value {
Value::RowStream {
headers,
stream,
span,
} => Value::Table {
headers,
val: stream.collect(),
span,
},
Value::ValueStream { stream, span } => Value::List {
val: stream.collect(),
span,
},
x => x,
};
self.stack.add_var(var_id, value);
}

View File

@ -229,6 +229,14 @@ fn simple_value_iteration() -> TestResult {
run_test("4 | each { $it + 10 }", "14")
}
#[test]
fn concrete_variable_assignment() -> TestResult {
run_test(
"let x = (1..100 | each { |y| $y + 100 }); $x | length; $x | length",
"100",
)
}
#[test]
fn build_string1() -> TestResult {
run_test("build-string 'nu' 'shell'", "nushell")