def env_set(env; $key; $value):
(if $value.kind == "function" or $value.kind == "atom" then
# inform the function/atom of its names
- $value | (.names += [$key]) | (.names |= unique) |
- if $value.kind == "atom" then
- # check if the one we have is newer
- env_req(env; $key) as $ours |
- if $ours.last_modified > $value.last_modified then
- $ours
- else
- # update modification timestamp
- $value | .last_modified |= now
- end
- else
- .
- end
+ $value | (.names += [$key]) | (.names |= unique)
else
$value
end) as $value | {
($value[2] | find_free_references($currentEnv | env_dump_keys + $binds)) as $free_referencess | {
kind: "function",
binds: $binds,
- env: (env | env_remove_references($free_referencess)),
+ env: ($_menv | env_remove_references($free_referencess)),
body: $value[2],
names: [], # we can't do that circular reference thing
free_referencess: $free_referencess # for dynamically scoped variables
($value[2] | find_free_references($currentEnv | env_dump_keys + $binds)) as $free_referencess | {
kind: "function",
binds: $binds,
- env: (env | env_remove_references($free_referencess)),
+ env: ($_menv | env_remove_references($free_referencess)),
body: $value[2],
names: [], # we can't do that circular reference thing
free_referencess: $free_referencess # for dynamically scoped variables
($value[2] | find_free_references($currentEnv | env_dump_keys + $binds)) as $free_referencess | {
kind: "function",
binds: $binds,
- env: (env | env_remove_references($free_referencess)),
+ env: ($_menv | env_remove_references($free_referencess)),
body: $value[2],
names: [], # we can't do that circular reference thing
free_referencess: $free_referencess, # for dynamically scoped variables
($value[2] | find_free_references($currentEnv | env_dump_keys + $binds)) as $free_referencess | {
kind: "function",
binds: $binds,
- env: (env | env_remove_references($free_referencess)),
+ env: ($_menv | env_remove_references($free_referencess)),
body: $value[2],
names: [], # we can't do that circular reference thing
free_referencess: $free_referencess, # for dynamically scoped variables
($value[2] | find_free_references($currentEnv | env_dump_keys + $binds)) as $free_referencess | {
kind: "function",
binds: $binds,
- env: $_menv,
+ env: ($_menv | env_remove_references($free_referencess)),
body: $value[2],
names: [], # we can't do that circular reference thing
free_referencess: $free_referencess, # for dynamically scoped variables