[chuck-dev] fixed multi array accesses (PATCH)

Ge Wang ge at ccrma.Stanford.EDU
Tue Sep 4 22:41:23 EDT 2012


Hi Robin!

Based on your work and patch, we have a fix, and it should be make it
into this impending release.  Thank you *very* much.  Based on your code,
we took a slightly different approach -- the Array_Access_Multi
instruction is now aware of the nature of each index.  This change is
perhaps more localized in the emitter (I am more confident as related to
regression this close to release) and results in less instructions,
though I believe your approach is more aligned with the spirit of Chuck
VM instructions, and we may revisit this.  In any case, this has
been fixed, thanks to you -- really appreciate it.  Also added
examples/array/array_mmixed.ck based on your test code to help verify
this.

Thanks again!

Ge!

On Tue, 4 Sep 2012, Ge Wang wrote:

> Hi Robin!
>
>> Hope to contribute on a regular basis from now on. I do really want to
>> use ChucK for my "music" project and I need it stable and a lot faster...
>
> Dude - you are rockin' out!  Thanks for your initiative and contributions! 
> This helps to encourage us to keep on chuckin' on the development as well. 
> We will go through your latest patches immediately. We are just about ready 
> to release 1.3.1.0, so they might not make it until 1.3.1.1.
>
> Thanks again and keep on ChucKin'!
>
> Ge!
>
> On Wed, 5 Sep 2012, Robin Haberkorn wrote:
>
>> Hi again,
>> 
>> nice to see that ChucK development is moving on rapidly and will move to 
>> Github soon. Will send you pull requests then :-)
>> 
>> Here's a patch that fixes multi array accesses involving map accesses. 
>> Previously a Chuck_Instr_Array_Access_Multi was emitted for every multi 
>> array access even though the instruction cannot handle map keys.
>> 
>> Test case:
>> 
>> string a[0][2];
>> 
>> new string[2] @=> a["foo"];
>> new string[2] @=> a["bar"];
>> 
>> "23" => a["foo"][0];
>> "24" => a["foo"][1];
>> "32" => a["bar"][0];
>> "42" => a["bar"][1];
>> 
>> for (0 => int i; i < 2; i++)
>> 	<<< a["foo"][i], a["bar"][i] >>>;
>> 
>> will die with an ArrayOutofBounds error.
>> 
>> Workaround for version <= 1.3.0.2:
>> 
>> string a[0][2];
>> 
>> new string[2] @=> a["foo"];
>> new string[2] @=> a["bar"];
>> 
>> "23" => (a["foo"])[0];
>> "24" => (a["foo"])[1];
>> "32" => (a["bar"])[0];
>> "42" => (a["bar"])[1];
>> 
>> for (0 => int i; i < 2; i++)
>> 	<<< (a["foo"])[i], (a["bar"])[i] >>>;
>> 
>> will result in both a map access and normal (int) access instruction.
>> 
>> My patch revises the way access instructions are generated so the first
>> test case works flawlessly.
>> One can be applied on ChucK v1.3.0.2; the other one is an updated
>> version of my 64-bit array patch (still using it until next release) and
>> finally there's a version based on SVN trunk.
>> 
>> Hope to contribute on a regular basis from now on. I do really want to
>> use ChucK for my "music" project and I need it stable and a lot faster...
>> 
>> Best regards,
>> Robin
>> 
> _______________________________________________
> chuck-dev mailing list
> chuck-dev at lists.cs.princeton.edu
> https://lists.cs.princeton.edu/mailman/listinfo/chuck-dev
>


More information about the chuck-dev mailing list