[Omake] Map.foreach clobbers the scope?
Christopher L Conway
cconway at cs.nyu.edu
Thu May 29 09:45:49 PDT 2008
When I use Map.foreach in a static block, variables defined in the
block don't get exported. I.e.,
static. =
A = bar
M.foreach(x,val)
....
export
# A is not visible here
Just commenting out the foreach block makes A reappear (see below).
Oddly, if A is defined before the static block, the previous
definition of A will appear after the foreach block. I.e.,
A = foo
static. =
A = bar
M.foreach(x,val)
....
# A == foo
export
# A == foo
Putting the foreach inside a section block fixes the problem... It
seems like somehow M.foreach pops an extra export scope on exit?
Regards,
Chris
$ omake --version
OMake 0.9.8.5 (release 2):
build [Wed Aug 8 09:10:36 2007]
on wagstaff
Default library directory : /home/chris/tools/lib/omake
$ cat OMakefile
M. =
extends $(Map)
$|X| = 123
$|Y| = 456
$|Z| = 789
static. =
A = bar
println($"1. A=$(A)")
M.foreach(x,val)
println($"$(x)=$(val)")
println($"2. A=$(A)")
export
println($"3. A=$(A)")
chris at wagstaff:~/src/tests/omake/map$ omake --configure
make[0]: Entering directory `/home/chris/src/tests/omake/map'
*** omake: reading OMakefiles
1. A=bar
X=123
Y=456
Z=789
2. A=bar
*** omake error:
File OMakefile: line 16, characters 16-20
unbound variable: public.A
If I just comment out M.foreach call, A is visible outside the block.
chris at wagstaff:~/src/tests/omake/map$ cat OMakefile
M. =
extends $(Map)
$|X| = 123
$|Y| = 456
$|Z| = 789
static. =
A = bar
println($"1. A=$(A)")
# M.foreach(x,val)
# println($"$(x)=$(val)")
println($"2. A=$(A)")
export
println($"3. A=$(A)")
chris at wagstaff:~/src/tests/omake/map$ omake --configure
make[0]: Entering directory `/home/chris/src/tests/omake/map'
*** omake: reading OMakefiles
1. A=bar
2. A=bar
3. A=bar
*** omake: finished reading OMakefiles (0.02 sec)
*** omake: done (0.03 sec, 0/0 scans, 0/0 rules, 1/33 digests)
chris at wagstaff:~/src/tests/omake/map$ cat OMakefile
M. =
extends $(Map)
$|X| = 123
$|Y| = 456
$|Z| = 789
A = foo
println($"0. A=$(A)")
static. =
A = bar
println($"1. A=$(A)")
M.foreach(x,val)
println($"$(x)=$(val)")
println($"2. A=$(A)")
export
println($"3. A=$(A)")
chris at wagstaff:~/src/tests/omake/map$ omake --configure
make[0]: Entering directory `/home/chris/src/tests/omake/map'
*** omake: reading OMakefiles
0. A=foo
1. A=bar
X=123
Y=456
Z=789
2. A=foo
3. A=foo
*** omake: finished reading OMakefiles (0.01 sec)
*** omake: done (0.02 sec, 0/0 scans, 0/0 rules, 1/33 digests)
$ cat OMakefile
M. =
extends $(Map)
$|X| = 123
$|Y| = 456
$|Z| = 789
static. =
A = bar
println($"1. A=$(A)")
section
M.foreach(x,val)
println($"$(x)=$(val)")
println($"2. A=$(A)")
export
println($"3. A=$(A)")
chris at wagstaff:~/src/tests/omake/map$ omake
make[0]: Entering directory `/home/chris/src/tests/omake/map'
*** omake: reading OMakefiles
1. A=bar
X=123
Y=456
Z=789
2. A=bar
3. A=bar
*** omake: finished reading OMakefiles (0.02 sec)
*** omake: done (0.02 sec, 0/0 scans, 0/0 rules, 1/33 digests)
More information about the Omake
mailing list