- (*Array.blit a_param 0 a_param1 0 (i+1); (* Pass parameters before id2 *) *)
- (* Array.blit is too slow *)
- for k = 0 to i do
- a_param1.(k) <- a_param.(k);
- done;
- a_param1.(i+1) <- Grammar.Node(id2, a_param2); (* id2( ... ) *)
- (*Array.blit a_param (i + nparam2 + 1) a_param1 (i+2) (nparam1 - i - 2); (* Pass parameters after id2 *) *)
- for k = 0 to nparam1 - i -3 do
- a_param1.(i+2+k) <- a_param.(i + nparam2 + 1 + k);
- done;
- (*Array.blit a_param (i + 1) a_param2 0 nparam2; (* parameters below id2 *) *)
- for k = 0 to nparam2 - 1 do
- a_param2.(k) <- a_param.(i+1+k)
- done;
- for i = 0 to nparam1 do
- a_param.(i) <- a_param1.(i)
- done;
+ let ip1 = i + 1 in
+ let offset2d = i+2 in
+ let offset2s = i+nparam2 + 1 in
+ blit a_param 0 parameters_tmp 0 (i+1);
+ parameters_tmp.(ip1) <- Grammar.Node(id2, a_param2); (* id2( ... ) *)
+ blit a_param offset2s parameters_tmp offset2d (nparam1 - i - 2);
+ blit a_param ip1 a_param2 0 nparam2;
+
+ blit parameters_tmp 0 parameters 0 nparam1;