fix aml index evaluation Reference: /n/atom/patch/applied2013/amlidx Date: Thu Jul 18 23:01:35 CES 2013 Signed-off-by: quanstro@quanstro.net --- /sys/src/libaml/aml.c Thu Jul 18 23:01:27 2013 +++ /sys/src/libaml/aml.c Thu Jul 18 23:01:27 2013 @@ -1560,7 +1560,7 @@ int x; x = ival(FP->arg[1]); - if(p = FP->arg[0]) switch(TAG(p)){ + if(p = deref(FP->arg[0])) switch(TAG(p)){ case 's': if(x >= strlen((char*)p)) break; @@ -1577,7 +1577,10 @@ case 'p': if(x < 0 || x >= ((Package*)p)->n) break; - r = mk('R', sizeof(Ref)); + if(TAG(FP->arg[0]) == 'A' || TAG(FP->arg[0]) == 'L') + r = mk(TAG(FP->arg[0]), sizeof(Ref)); + else + r = mk('R', sizeof(Ref)); r->ref = p; r->ptr = &((Package*)p)->a[x]; store(r, FP->arg[2]); @@ -1821,7 +1824,7 @@ [Ocall] "Call", "", evalcall, [Ostore] "Store", "*@", evalstore, - [Oindex] "Index", "*i@", evalindex, + [Oindex] "Index", "@i@", evalindex, [Osize] "SizeOf", "*", evalsize, [Oref] "RefOf", "@", evaliarg0, [Ocref] "CondRefOf", "@@", evalcondref,