Skip to content

Commit eab3813

Browse files
committed
[[ Script ]] Tweaks to iterators
In order to ensure iterators still work in the new VM, some tweaks were necessary to the standard library implementations.
1 parent e785ff9 commit eab3813

File tree

10 files changed

+38
-27
lines changed

10 files changed

+38
-27
lines changed

libscript/src/array.lcb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ public foreign handler MCArrayStoreElementOfCaseless(in Value as optional any, i
3737

3838
public foreign handler MCArrayEvalEmpty(out Value as Array) returns nothing binds to "<builtin>"
3939

40-
public foreign handler MCArrayRepeatForEachElement(inout Iterator as optional Pointer, out Iterand as optional any, in Container as Array) returns CBool binds to "<builtin>"
41-
public foreign handler MCArrayRepeatForEachKey(inout Iterator as optional Pointer, out Iterand as String, in Container as Array) returns CBool binds to "<builtin>"
40+
public foreign handler MCArrayRepeatForEachElement(inout Iterator as optional Pointer, inout Iterand as optional any, in Container as Array) returns CBool binds to "<builtin>"
41+
public foreign handler MCArrayRepeatForEachKey(inout Iterator as optional Pointer, inout Iterand as optional String, in Container as Array) returns CBool binds to "<builtin>"
4242

4343
public foreign handler MCArrayDeleteElementOfCaseless(inout Target as Array, in Key as String) returns nothing binds to "<builtin>"
4444

libscript/src/byte.lcb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public foreign handler MCByteStoreByteOf(in Value as Data, in Index as LCIndex,
4040
public foreign handler MCByteFetchByteRangeOf(in Start as LCIndex, in Finish as LCIndex, in Target as Data, out Value as Data) returns nothing binds to "<builtin>"
4141
public foreign handler MCByteStoreByteRangeOf(in Value as Data, in Start as LCIndex, in Finish as LCIndex, inout Target as Data) returns nothing binds to "<builtin>"
4242

43-
public foreign handler MCByteRepeatForEachByte(inout Iterator as optional Pointer, out Iterand as Data, in Container as Data) returns CBool binds to "<builtin>"
43+
public foreign handler MCByteRepeatForEachByte(inout Iterator as optional Pointer, inout Iterand as Data, in Container as Data) returns CBool binds to "<builtin>"
4444

4545
public foreign handler MCByteFetchFirstByteOf(in Target as Data, out Value as Data) returns nothing binds to "<builtin>"
4646
public foreign handler MCByteStoreFirstByteOf(in Value as Data, inout Target as Data) returns nothing binds to "<builtin>"

libscript/src/char.lcb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public foreign handler MCCharEvalEndsWith(in Source as String, in Suffix as Stri
4444

4545
public foreign handler MCCharEvalNewlineCharacter(out Value as String) returns nothing binds to "<builtin>"
4646

47-
public foreign handler MCCharRepeatForEachChar(inout Iterator as optional Pointer, out Iterand as String, in Container as String) returns CBool binds to "<builtin>"
47+
public foreign handler MCCharRepeatForEachChar(inout Iterator as optional Pointer, inout Iterand as String, in Container as String) returns CBool binds to "<builtin>"
4848

4949
public foreign handler MCCharFetchFirstCharOf(in Target as String, out Value as String) returns nothing binds to "<builtin>"
5050
public foreign handler MCCharStoreFirstCharOf(in Value as String, inout Target as String) returns nothing binds to "<builtin>"

libscript/src/codeunit.lcb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public foreign handler MCCodeunitEvalContains(in Source as String, in Needle as
4242
public foreign handler MCCodeunitEvalBeginsWith(in Source as String, in Prefix as String, out Result as CBool) returns nothing binds to "<builtin>"
4343
public foreign handler MCCodeunitEvalEndsWith(in Source as String, in Suffix as String, out Result as CBool) returns nothing binds to "<builtin>"
4444

45-
public foreign handler MCCodeunitRepeatForEachCodeunit(inout Iterator as optional Pointer, out Iterand as String, in Container as String) returns CBool binds to "<builtin>"
45+
public foreign handler MCCodeunitRepeatForEachCodeunit(inout Iterator as optional Pointer, inout Iterand as String, in Container as String) returns CBool binds to "<builtin>"
4646

4747
public foreign handler MCCodeunitFetchFirstCodeunitOf(in Target as String, out Value as String) returns nothing binds to "<builtin>"
4848
public foreign handler MCCodeunitStoreFirstCodeunitOf(in Value as String, inout Target as String) returns nothing binds to "<builtin>"

libscript/src/list.lcb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public foreign handler MCListSpliceAfter(in Source as List, inout Target as List
6060

6161
public foreign handler MCListEvalEmpty(out Value as List) returns nothing binds to "<builtin>"
6262

63-
public foreign handler MCListRepeatForEachElement(inout Iterator as optional Pointer, out Iterand as optional any, in Container as List) returns CBool binds to "<builtin>"
63+
public foreign handler MCListRepeatForEachElement(inout Iterator as optional Pointer, inout Iterand as optional any, in Container as List) returns CBool binds to "<builtin>"
6464

6565
public foreign handler MCListFetchFirstElementOf(in Target as List, out Value as optional any) returns nothing binds to "<builtin>"
6666
public foreign handler MCListStoreFirstElementOf(in Value as optional any, inout Target as List) returns nothing binds to "<builtin>"

libscript/src/module-array.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ extern "C" MC_DLLEXPORT_DEF void MCArrayEvalEmpty(MCArrayRef& r_output)
163163
r_output = MCValueRetain(kMCEmptyArray);
164164
}
165165

166-
extern "C" bool MC_DLLEXPORT_DEF MCArrayRepeatForEachElement(void*& x_iterator, MCValueRef& r_iterand, MCArrayRef p_array)
166+
extern "C" bool MC_DLLEXPORT_DEF MCArrayRepeatForEachElement(void*& x_iterator, MCValueRef& x_iterand, MCArrayRef p_array)
167167
{
168168
MCValueRef t_value;
169169
// If this is a numerical array, do it in order
@@ -190,12 +190,13 @@ extern "C" bool MC_DLLEXPORT_DEF MCArrayRepeatForEachElement(void*& x_iterator,
190190

191191
x_iterator = (void *)(t_ptr);
192192
}
193-
194-
r_iterand = MCValueRetain(t_value);
193+
194+
MCValueAssign(x_iterand, t_value);
195+
195196
return true;
196197
}
197198

198-
extern "C" bool MC_DLLEXPORT_DEF MCArrayRepeatForEachKey(void*& x_iterator, MCStringRef& r_iterand, MCArrayRef p_array)
199+
extern "C" bool MC_DLLEXPORT_DEF MCArrayRepeatForEachKey(void*& x_iterator, MCStringRef& x_iterand, MCArrayRef p_array)
199200
{
200201
MCNameRef t_key;
201202
MCValueRef t_value;
@@ -205,8 +206,8 @@ extern "C" bool MC_DLLEXPORT_DEF MCArrayRepeatForEachKey(void*& x_iterator, MCSt
205206

206207
if (!MCArrayIterate(p_array, t_offset, t_key, t_value))
207208
return false;
208-
209-
r_iterand = MCValueRetain(MCNameGetString(t_key));
209+
210+
MCValueAssign(x_iterand, MCNameGetString(t_key));
210211

211212
x_iterator = (void *)(t_offset);
212213

libscript/src/module-byte.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -197,16 +197,19 @@ extern "C" MC_DLLEXPORT_DEF void MCByteExecDeleteLastByteOf(MCDataRef& x_target)
197197
MCByteExecDeleteByteOf(-1, x_target);
198198
}
199199

200-
extern "C" MC_DLLEXPORT_DEF bool MCByteRepeatForEachByte(void*& x_iterator, MCDataRef& r_iterand, MCDataRef p_data)
200+
extern "C" MC_DLLEXPORT_DEF bool MCByteRepeatForEachByte(void*& x_iterator, MCDataRef& x_iterand, MCDataRef p_data)
201201
{
202202
uintptr_t t_offset;
203203
t_offset = (uintptr_t)x_iterator;
204204

205205
if (t_offset == MCDataGetLength(p_data))
206206
return false;
207-
208-
if (!MCDataCopyRange(p_data, MCRangeMake(t_offset, 1), r_iterand))
207+
208+
MCDataRef t_byte;
209+
if (!MCDataCopyRange(p_data, MCRangeMake(t_offset, 1), t_byte))
209210
return false;
211+
212+
MCValueAssign(x_iterand, t_byte);
210213

211214
x_iterator = (void *)(t_offset + 1);
212215

libscript/src/module-char.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ extern "C" MC_DLLEXPORT_DEF void MCCharExecDeleteLastCharOf(MCStringRef& x_targe
245245
// repeat for each char tChar in tVar
246246
// end repeat
247247
// Will result in tChar containing the value it had at the point of end repeat.
248-
extern "C" MC_DLLEXPORT_DEF bool MCCharRepeatForEachChar(void*& x_iterator, MCStringRef& r_iterand, MCStringRef p_string)
248+
extern "C" MC_DLLEXPORT_DEF bool MCCharRepeatForEachChar(void*& x_iterator, MCStringRef& x_iterand, MCStringRef p_string)
249249
{
250250
MCTextChunkIterator *t_iterator;
251251
bool t_first;
@@ -258,15 +258,18 @@ extern "C" MC_DLLEXPORT_DEF bool MCCharRepeatForEachChar(void*& x_iterator, MCSt
258258
}
259259
else
260260
t_iterator = (MCTextChunkIterator *)x_iterator;
261-
261+
262+
MCStringRef t_char;
262263
if (t_iterator -> Next())
263-
t_iterator -> CopyString(r_iterand);
264+
t_iterator -> CopyString(t_char);
264265
else
265266
{
266267
delete t_iterator;
267268
return false;
268269
}
269-
270+
271+
MCValueAssign(x_iterand, t_char);
272+
270273
x_iterator = (void *)(t_iterator);
271274

272275
return true;

libscript/src/module-codeunit.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -199,17 +199,20 @@ extern "C" MC_DLLEXPORT_DEF void MCCodeunitExecDeleteLastCodeunitOf(MCStringRef&
199199
// repeat for each char tCodeunit in tVar
200200
// end repeat
201201
// Will result in tCodeunit containing the value it had at the point of end repeat.
202-
extern "C" MC_DLLEXPORT_DEF bool MCCodeunitRepeatForEachCodeunit(void*& x_iterator, MCStringRef& r_iterand, MCStringRef p_string)
202+
extern "C" MC_DLLEXPORT_DEF bool MCCodeunitRepeatForEachCodeunit(void*& x_iterator, MCStringRef& x_iterand, MCStringRef p_string)
203203
{
204204
uintptr_t t_offset;
205205
t_offset = (uintptr_t)x_iterator;
206206

207207
if (t_offset == MCStringGetLength(p_string))
208208
return false;
209-
210-
if (!MCStringCopySubstring(p_string, MCRangeMake(t_offset, 1), r_iterand))
209+
210+
MCStringRef t_codeunit;
211+
if (!MCStringCopySubstring(p_string, MCRangeMake(t_offset, 1), t_codeunit))
211212
return false;
212-
213+
214+
MCValueAssign(x_iterand, t_codeunit);
215+
213216
x_iterator = (void *)(t_offset + 1);
214217

215218
return true;

libscript/src/module-list.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -406,16 +406,17 @@ extern "C" MC_DLLEXPORT_DEF void MCListEvalEmpty(MCProperListRef& r_output)
406406
r_output = MCValueRetain(kMCEmptyProperList);
407407
}
408408

409-
extern "C" MC_DLLEXPORT_DEF bool MCListRepeatForEachElement(void*& x_iterator, MCValueRef& r_iterand, MCProperListRef p_list)
409+
extern "C" MC_DLLEXPORT_DEF bool MCListRepeatForEachElement(void*& x_iterator, MCValueRef& x_iterand, MCProperListRef p_list)
410410
{
411411
uintptr_t t_offset;
412412
t_offset = (uintptr_t)x_iterator;
413413

414414
if (t_offset == MCProperListGetLength(p_list))
415415
return false;
416-
417-
r_iterand = MCValueRetain(MCProperListFetchElementAtIndex(p_list, t_offset));
418-
416+
417+
418+
MCValueAssign(x_iterand, MCProperListFetchElementAtIndex(p_list, t_offset));
419+
419420
x_iterator = (void *)(t_offset + 1);
420421

421422
return true;

0 commit comments

Comments
 (0)