Make two files:
---- test.ck ----
SinOsc s => dac;
public class NoiseMaker
{
public void tick() {
beep(72);
}
public void beep(float note)
{
Math.mtof(note) => s.freq;
1 => s.gain;
20::ms => now;
0 => s.gain;
}
}
while (1) { 1::second => now; }
---- test2.ck ----
NoiseMaker nm[];
new NoiseMaker[1] @=> nm;
while (1) {
for (0=>int i; i now;
}
--------------
Now run "chuck test.ck test2.ck".
I get,
$ chuck test.ck test2.ck
chuck: chuck_instr.cpp:4475: virtual void
Chuck_Instr_Dot_Member_Func::execute(Chuck_VM*, Chuck_VM_Shred*):
Assertion `m_offset < obj->vtable->funcs.size()' failed.
Aborted
If I remove the line, "Math.mtof(note) => s.freq;", then I get:
$ chuck test.ck test2.ck
[chuck](VM): NullPointerException: shred[id=2:test2.ck], PC=[32]
If the code from test2.ck is moved into test.ck, then everything works fine.
Also, if the declaration "SinOsc s => dac" is moved into the
NoiseMaker class, everything works fine.
Maybe it's because tick() is being called in the context of test2.ck,
whereas "s" belongs to test.ck's shred? I dunno.
Steve