diff --git a/src/nasal_vm.h b/src/nasal_vm.h index ac45233..a5f3855 100644 --- a/src/nasal_vm.h +++ b/src/nasal_vm.h @@ -322,6 +322,19 @@ inline void vm::o_sub() {op_calc(-);} inline void vm::o_mul() {op_calc(*);} inline void vm::o_div() {op_calc(/);} inline void vm::o_lnk() { + if (ctx.top[-1].type==vm_vec && ctx.top[0].type==vm_vec) { + ngc.temp = ngc.alloc(vm_vec); + for(auto i : ctx.top[-1].vec().elems) { + ngc.temp.vec().elems.push_back(i); + } + for(auto i : ctx.top[0].vec().elems) { + ngc.temp.vec().elems.push_back(i); + } + ctx.top[-1] = ngc.temp; + ngc.temp = nil; + --ctx.top; + return; + } ctx.top[-1] = ngc.newstr(ctx.top[-1].tostr()+ctx.top[0].tostr()); --ctx.top; } diff --git a/std/sort.nas b/std/sort.nas index 109d8bd..c6ce726 100644 --- a/std/sort.nas +++ b/std/sort.nas @@ -45,12 +45,12 @@ var var_sort=func(){ j-=1; } vec[i]=tmp; - quick_sort_core(vec,left,i-1,cmp); - quick_sort_core(vec,i+1,right,cmp); + quick_sort_core(vec,left,i-1); + quick_sort_core(vec,i+1,right); return nil; } return func(vec){ - quick_sort_core(vec,0,size(vec)-1,cmp); + quick_sort_core(vec,0,size(vec)-1); return nil; } }(); \ No newline at end of file diff --git a/test/quick_sort.nas b/test/quick_sort.nas index 21b6438..aefd196 100644 --- a/test/quick_sort.nas +++ b/test/quick_sort.nas @@ -1,9 +1,10 @@ import.std.sort; var vec=[]; +setsize(vec, 1e4); rand(time(0)); for(var i=0;i<1e4;i+=1) - append(vec,int(rand()*1e5)); + vec[i] = int(rand()*1e5); sort(vec); for(var i=1;i<1e4;i+=1) { if (vec[i] 0x",h[temp^=a]," temp&=0x"~h[a]~" -> 0x",h[temp&=a]," temp|=0x"~h[a]~" -> 0x",h[temp|=a]); } -} \ No newline at end of file +} + +print([0, 1, 2]~[3, 4, 5], "\n"); \ No newline at end of file