@@ -938,11 +938,11 @@ function compile_call(ctx::JSCompilationContext, expr::Expr)
938938 end
939939 return " $(call_args[1 ]) [($(call_args[2 ]) ) - 1]"
940940 elseif length (call_args) == 3
941- # A[i,j] → column-major flat index: (j-1)*nrows + (i-1)
942- return " $(call_args[1 ]) [(( $(call_args[3 ]) )-1)* $(call_args[ 1 ]) ._size[0]+(( $(call_args[2 ]) )-1) ]"
941+ # A[i,j] → nested: A[i-1][j-1]
942+ return " $(call_args[1 ]) [($(call_args[2 ]) )-1][( $(call_args[3 ]) )-1]"
943943 elseif length (call_args) == 4
944- # A[i,j,k] → column-major: (k-1)*m*n + ( j-1)*m + (i-1)
945- return " $(call_args[1 ]) [(( $(call_args[4 ]) )-1)* $(call_args[ 1 ]) ._size[0]* $(call_args[ 1 ]) ._size[1]+(( $(call_args[3 ]) )-1)* $(call_args[ 1 ]) ._size[0]+(( $(call_args[2 ]) )-1) ]"
944+ # A[i,j,k] → nested: A[i-1][ j-1][k-1]
945+ return " $(call_args[1 ]) [($(call_args[2 ]) )-1][( $(call_args[3 ]) )-1][( $(call_args[4 ]) )-1]"
946946 end
947947 return " []"
948948 end
@@ -1108,15 +1108,15 @@ function compile_call(ctx::JSCompilationContext, expr::Expr)
11081108 end
11091109 if fn_name == " setindex!" && length (call_args) >= 3
11101110 if length (call_args) == 4
1111- # A[i,j] = val → column-major
1112- return " ($(call_args[1 ]) [(( $(call_args[4 ]) )-1)* $(call_args[ 1 ]) ._size[0]+(( $(call_args[3 ]) )-1) ] = $(call_args[2 ]) )"
1111+ # A[i,j] = val → nested: A[i-1][j-1] = val
1112+ return " ($(call_args[1 ]) [($(call_args[3 ]) )-1][( $(call_args[4 ]) )-1] = $(call_args[2 ]) )"
11131113 else
11141114 return " ($(call_args[1 ]) [($(call_args[3 ]) )-1] = $(call_args[2 ]) )"
11151115 end
11161116 end
11171117 if fn_name == " getindex" && length (call_args) == 3
1118- # A[i,j] → column-major
1119- return " $(call_args[1 ]) [(( $(call_args[3 ]) )-1)* $(call_args[ 1 ]) ._size[0]+(( $(call_args[2 ]) )-1) ]"
1118+ # A[i,j] → nested: A[i-1][j-1]
1119+ return " $(call_args[1 ]) [($(call_args[2 ]) )-1][( $(call_args[3 ]) )-1]"
11201120 end
11211121 if fn_name == " copy" && length (call_args) >= 1
11221122 return " $(call_args[1 ]) .slice()"
@@ -1174,9 +1174,11 @@ function compile_call(ctx::JSCompilationContext, expr::Expr)
11741174 # ─── Size (by name) ───
11751175 if fn_name == " size"
11761176 if length (call_args) == 1
1177- return " ($(call_args[1 ]) ._size||[$(call_args[1 ]) .length]).slice()"
1177+ # size(A) → [A.length, A[0].length, ...] for nested arrays
1178+ return " (Array.isArray($(call_args[1 ]) [0])?[$(call_args[1 ]) .length,$(call_args[1 ]) [0].length]:[$(call_args[1 ]) .length])"
11781179 elseif length (call_args) == 2
1179- return " ($(call_args[1 ]) ._size?$(call_args[1 ]) ._size[($(call_args[2 ]) )-1]:$(call_args[1 ]) .length)"
1180+ # size(A, d) → walk d-1 levels of [0] then .length
1181+ return " (($(call_args[2 ]) )===1?$(call_args[1 ]) .length:$(call_args[1 ]) [0].length)"
11801182 end
11811183 end
11821184
@@ -1388,17 +1390,17 @@ function compile_call(ctx::JSCompilationContext, expr::Expr)
13881390 if length (call_args_gr) == 2
13891391 return " $(call_args_gr[1 ]) [($(call_args_gr[2 ]) ) - 1]"
13901392 elseif length (call_args_gr) == 3
1391- # A[i,j] → column-major
1392- return " $(call_args_gr[1 ]) [(( $(call_args_gr[3 ]) )-1)* $(call_args_gr[ 1 ]) ._size[0]+(( $(call_args_gr[2 ]) )-1) ]"
1393+ # A[i,j] → nested: A[i-1][j-1]
1394+ return " $(call_args_gr[1 ]) [($(call_args_gr[2 ]) )-1][( $(call_args_gr[3 ]) )-1]"
13931395 end
13941396 end
13951397
13961398 # Base.setindex! — array assignment (1D and ND)
13971399 if bname === :setindex! && callee. mod === Base
13981400 call_args_gr = [compile_value (ctx, a) for a in args[2 : end ]]
13991401 if length (call_args_gr) == 4
1400- # A[i,j] = val → column-major
1401- return " ($(call_args_gr[1 ]) [(( $(call_args_gr[4 ]) )-1)* $(call_args_gr[ 1 ]) ._size[0]+(( $(call_args_gr[3 ]) )-1) ] = $(call_args_gr[2 ]) )"
1402+ # A[i,j] = val → nested: A[i-1][j-1] = val
1403+ return " ($(call_args_gr[1 ]) [($(call_args_gr[3 ]) )-1][( $(call_args_gr[4 ]) )-1] = $(call_args_gr[2 ]) )"
14021404 elseif length (call_args_gr) == 3
14031405 return " ($(call_args_gr[1 ]) [($(call_args_gr[3 ]) )-1] = $(call_args_gr[2 ]) )"
14041406 end
@@ -1865,10 +1867,10 @@ function compile_invoke(ctx::JSCompilationContext, expr::Expr)
18651867 arr_val = compile_value (ctx, expr. args[3 ])
18661868 val_val = compile_value (ctx, expr. args[4 ])
18671869 if length (expr. args) == 6
1868- # A[i,j] = val → column-major
1870+ # A[i,j] = val → nested: A[i-1][j-1] = val
18691871 i_val = compile_value (ctx, expr. args[5 ])
18701872 j_val = compile_value (ctx, expr. args[6 ])
1871- return " ($(arr_val) [(( $(j_val ) )-1)* $(arr_val) ._size[0]+(( $(i_val ) )-1) ] = $(val_val) )"
1873+ return " ($(arr_val) [($(i_val ) )-1][( $(j_val ) )-1] = $(val_val) )"
18721874 else
18731875 idx_val = compile_value (ctx, expr. args[5 ])
18741876 return " ($(arr_val) [($(idx_val) )-1] = $(val_val) )"
@@ -2019,12 +2021,12 @@ function compile_invoke(ctx::JSCompilationContext, expr::Expr)
20192021 return " $(call_args[1 ]) .length === 0"
20202022 end
20212023
2022- # size(A) → shape tuple, size(A, d) → dimension size
2024+ # size(A) → shape tuple, size(A, d) → dimension size (nested arrays)
20232025 if func_name == " size"
20242026 if length (call_args) == 1
2025- return " ($(call_args[1 ]) ._size||[ $(call_args[1 ]) .length]).slice( )"
2027+ return " (Array.isArray( $(call_args[1 ]) [0])?[ $(call_args[1 ]) .length, $(call_args[ 1 ]) [0].length]:[ $(call_args[ 1 ]) .length] )"
20262028 elseif length (call_args) == 2
2027- return " ($(call_args[1 ]) ._size ?$(call_args[1 ]) ._size[( $(call_args[ 2 ]) )-1] :$(call_args[1 ]) .length)"
2029+ return " (( $(call_args[2 ]) )===1 ?$(call_args[1 ]) .length :$(call_args[1 ]) [0] .length)"
20282030 end
20292031 end
20302032
0 commit comments