kcl-lang / kcl

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

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

Closed bozaro closed 3 months ago

bozaro commented 3 months ago

Bug Report

1. Minimal reproduce step (Required)

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

schema User:
    id: str

schema Users:
    [str]: User

schema DB:
    users: Users = {}

    check:
        all user in users {
            user == users[user].id
        }

schema DBs:
    [str]: DB

dbs_user: DBs = {
    user = DB {
        users = {
            app = User {id = "app"}
        }
    }
}
db_user = dbs_user.user

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

Same result as without KCL_FAST_EVAL=1:

dbs_user:
  user:
    users:
      app:
        id: app
db_user:
  users:
    app:
      id: app

3. What did you see instead (Required)

error[E3M38]: EvaluationError
  --> /home/bozaro/joom/config-state/kcl/data/mongodb/joomproduction/user.k:25:1
   |
25 | db_user = dbs_user.user
   |  schema 'DBs' attribute 'user' not found
   |

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

➜  kclvm_cli version
Version: 0.9.0-c020ab3eb4b9179219d6837a57f5d323
Platform: x86_64-unknown-linux-gnu
GitCommit: 11dffcb46314f5cf326b7aec6c30c1889f3d29ac
bozaro commented 3 months ago

There are internally some user variable name collision between lines:

Peefy commented 3 months ago

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