@@ -43,73 +43,110 @@ bool tns::ConvertJavaScriptArray(
43
43
44
44
JEnv env;
45
45
switch (elementTypePrefix) {
46
- case ' Z' :
46
+ case ' Z' : {
47
47
arr = env.NewBooleanArray (arrLength);
48
+ jboolean bools[arrLength];
48
49
for (jsize i = 0 ; i < arrLength; i++) {
49
- jboolean value = jsArr->Get (context, i).ToLocalChecked ()->BooleanValue (isolate);
50
- env.SetBooleanArrayRegion ((jbooleanArray) arr, i, 1 , &value);
50
+ bools[i] = jsArr
51
+ ->Get (context, i)
52
+ .ToLocalChecked ()
53
+ ->BooleanValue (isolate);
51
54
}
55
+ env.SetBooleanArrayRegion ((jbooleanArray) arr, 0 , arrLength, bools);
52
56
break ;
53
- case ' B' :
57
+ }
58
+ case ' B' : {
54
59
arr = env.NewByteArray (arrLength);
60
+ jbyte bytes[arrLength];
55
61
for (jsize i = 0 ; i < arrLength; i++) {
56
- jbyte value = jsArr->Get (context, i).ToLocalChecked ()->Int32Value (
57
- context).ToChecked ();
58
- env.SetByteArrayRegion ((jbyteArray) arr, i, 1 , &value);
62
+ bytes[i] = jsArr
63
+ ->Get (context, i)
64
+ .ToLocalChecked ()
65
+ ->Int32Value (context)
66
+ .ToChecked ();
59
67
}
68
+ env.SetByteArrayRegion ((jbyteArray) arr, 0 , arrLength, bytes);
60
69
break ;
61
- case ' C' :
70
+ }
71
+ case ' C' : {
62
72
arr = env.NewCharArray (arrLength);
73
+ jchar chars[arrLength];
63
74
for (jsize i = 0 ; i < arrLength; i++) {
64
75
String::Utf8Value utf8 (isolate, jsArr->Get (context, i).ToLocalChecked ()->ToString (
65
76
context).ToLocalChecked ());
66
77
JniLocalRef s (env.NewString ((jchar *) *utf8, 1 ));
67
78
const char *singleChar = env.GetStringUTFChars (s, nullptr );
68
- jchar value = *singleChar;
79
+ chars[i] = *singleChar;
69
80
env.ReleaseStringUTFChars (s, singleChar);
70
- env.SetCharArrayRegion ((jcharArray) arr, i, 1 , &value);
71
81
}
82
+ env.SetCharArrayRegion ((jcharArray) arr, 0 , arrLength, chars);
72
83
break ;
73
- case ' S' :
84
+ }
85
+ case ' S' : {
74
86
arr = env.NewShortArray (arrLength);
87
+ jshort shorts[arrLength];
75
88
for (jsize i = 0 ; i < arrLength; i++) {
76
- jshort value = jsArr->Get (context, i).ToLocalChecked ()->Int32Value (
77
- context).ToChecked ();
78
- env.SetShortArrayRegion ((jshortArray) arr, i, 1 , &value);
89
+ shorts[i] = jsArr
90
+ ->Get (context, i)
91
+ .ToLocalChecked ()
92
+ ->Int32Value (context)
93
+ .ToChecked ();
79
94
}
95
+ env.SetShortArrayRegion ((jshortArray) arr, 0 , arrLength, shorts);
80
96
break ;
81
- case ' I' :
97
+ }
98
+ case ' I' : {
82
99
arr = env.NewIntArray (arrLength);
100
+ jint ints[arrLength];
83
101
for (jsize i = 0 ; i < arrLength; i++) {
84
- jint value = jsArr->Get (context, i).ToLocalChecked ()->Int32Value (
85
- context).ToChecked ();
86
- env.SetIntArrayRegion ((jintArray) arr, i, 1 , &value);
102
+ ints[i] = jsArr
103
+ ->Get (context, i)
104
+ .ToLocalChecked ()
105
+ ->Int32Value (context)
106
+ .ToChecked ();
87
107
}
108
+ env.SetIntArrayRegion ((jintArray) arr, 0 , arrLength, ints);
88
109
break ;
89
- case ' J' :
110
+ }
111
+ case ' J' : {
90
112
arr = env.NewLongArray (arrLength);
113
+ jlong longs[arrLength];
91
114
for (jsize i = 0 ; i < arrLength; i++) {
92
- jlong value = jsArr->Get (context, i).ToLocalChecked ()->NumberValue (
93
- context).ToChecked ();
94
- env.SetLongArrayRegion ((jlongArray) arr, i, 1 , &value);
115
+ longs[i] = jsArr
116
+ ->Get (context, i)
117
+ .ToLocalChecked ()
118
+ ->NumberValue (context)
119
+ .ToChecked ();
95
120
}
121
+ env.SetLongArrayRegion ((jlongArray) arr, 0 , arrLength, longs);
96
122
break ;
97
- case ' F' :
123
+ }
124
+ case ' F' : {
98
125
arr = env.NewFloatArray (arrLength);
126
+ jfloat floats[arrLength];
99
127
for (jsize i = 0 ; i < arrLength; i++) {
100
- jfloat value = jsArr->Get (context, i).ToLocalChecked ()->NumberValue (
101
- context).ToChecked ();
102
- env.SetFloatArrayRegion ((jfloatArray) arr, i, 1 , &value);
128
+ floats[i] = jsArr
129
+ ->Get (context, i)
130
+ .ToLocalChecked ()
131
+ ->NumberValue (context)
132
+ .ToChecked ();
103
133
}
134
+ env.SetFloatArrayRegion ((jfloatArray) arr, 0 , arrLength, floats);
104
135
break ;
105
- case ' D' :
136
+ }
137
+ case ' D' : {
106
138
arr = env.NewDoubleArray (arrLength);
139
+ jdouble doubles[arrLength];
107
140
for (jsize i = 0 ; i < arrLength; i++) {
108
- jdouble value = jsArr->Get (context, i).ToLocalChecked ()->NumberValue (
109
- context).ToChecked ();
110
- env.SetDoubleArrayRegion ((jdoubleArray) arr, i, 1 , &value);
141
+ doubles[i] = jsArr
142
+ ->Get (context, i)
143
+ .ToLocalChecked ()
144
+ ->NumberValue (context)
145
+ .ToChecked ();
111
146
}
147
+ env.SetDoubleArrayRegion ((jdoubleArray) arr, 0 , arrLength, doubles);
112
148
break ;
149
+ }
113
150
case ' L' :
114
151
strippedClassName = elementType.substr (1 , elementType.length () - 2 );
115
152
elementClass = env.FindClass (strippedClassName);
0 commit comments