kcl-lang / kcl

KCL Programming Language (CNCF Sandbox Project). https://kcl-lang.io
https://kcl-lang.io
Apache License 2.0
1.41k stars 110 forks source link

[Bug] The variable scope issue (KCL_FAST_EVAL=1) bug evaluator #1455

Closed bozaro closed 5 days ago

bozaro commented 5 days ago

Bug Report

1. Minimal reproduce step (Required)

Run configuration with KCL_FAST_EVAL=1 (KCL_FAST_EVAL=1 kclvm_cli run .)

schema Config:
    name: str

makeCopy = lambda p: Config -> Config {
    Config {name = p.name + "-copy"}
}
configs = {
    "foo": Config {name = "foo"}
    "bar": Config {name = "bar"}
}
copies = {"${name}-copy": makeCopy(config) for name, config in configs}

2. What did you expect to see? (Required)

Same result as without KCL_FAST_EVAL=1:

configs:
  foo:
    name: foo
  bar:
    name: bar
copies:
  foo-copy:
    name: foo-copy
  bar-copy:
    name: bar-copy

3. What did you see instead (Required)

error[E3M38]: EvaluationError
 --> /home/bozaro/joom/config-state/kcl/data/deploy/20_charts.k:2:1
  |
2 |     name: str
  |  No attribute named 'foo' in the schema 'Config'
  |

Looks like there are internally some name variable name collision between lines:

4. What is your KCL components version? (Required)

➜  kclvm_cli version
Version: 0.9.0-c020ab3eb4b9179219d6837a57f5d323
Platform: x86_64-unknown-linux-gnu
GitCommit: 11dffcb46314f5cf326b7aec6c30c1889f3d29ac
Peefy commented 5 days ago

Thanks for the feedback and fixed in https://github.com/kcl-lang/kcl/pull/1456