Skip to content

Commit bde5cfd

Browse files
committed
[[ Script ]] Implemented repeat up to / down to builtins.
1 parent b353613 commit bde5cfd

File tree

2 files changed

+63
-7
lines changed

2 files changed

+63
-7
lines changed

libscript/src/script-instance.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1782,4 +1782,24 @@ extern "C" bool MCScriptBuiltinRepeatCounted(uinteger_t *x_count)
17821782
return true;
17831783
}
17841784

1785+
extern "C" bool MCScriptBuiltinRepeatUpToCondition(double p_counter, double p_limit)
1786+
{
1787+
return p_counter <= p_limit;
1788+
}
1789+
1790+
extern "C" double MCScriptBuiltinRepeatUpToIterate(double p_counter, double p_step)
1791+
{
1792+
return p_counter + p_step;
1793+
}
1794+
1795+
extern "C" bool MCScriptBuiltinRepeatDownToCondition(double p_counter, double p_limit)
1796+
{
1797+
return p_counter >= p_limit;
1798+
}
1799+
1800+
extern "C" double MCScriptBuiltinRepeatDownToIterate(double p_counter, double p_step)
1801+
{
1802+
return p_counter + p_step;
1803+
}
1804+
17851805
////////////////////////////////////////////////////////////////////////////////

libscript/src/script-object.cpp

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,11 @@ bool MCScriptInitialize(void)
112112
MCScriptAddTypeToModule(t_builder, MCNAME("float"), t_type_index, t_def_index);
113113
MCScriptAddExportToModule(t_builder, t_def_index);
114114

115-
MCScriptAddDefinitionToModule(t_builder, t_def_index);
115+
uindex_t t_double_type_index;
116+
MCScriptAddDefinitionToModule(t_builder, t_double_type_index);
116117
MCScriptAddForeignTypeToModule(t_builder, MCSTR("kMCDoubleTypeInfo"), t_type_index);
117-
MCScriptAddTypeToModule(t_builder, MCNAME("double"), t_type_index, t_def_index);
118-
MCScriptAddExportToModule(t_builder, t_def_index);
118+
MCScriptAddTypeToModule(t_builder, MCNAME("double"), t_type_index, t_double_type_index);
119+
MCScriptAddExportToModule(t_builder, t_double_type_index);
119120

120121
MCScriptAddDefinitionToModule(t_builder, t_def_index);
121122
MCScriptAddForeignTypeToModule(t_builder, MCSTR("kMCPointerTypeInfo"), t_type_index);
@@ -124,15 +125,50 @@ bool MCScriptInitialize(void)
124125

125126
////
126127

128+
uindex_t t_bool_type_def, t_uint_type_def, t_double_type_def;
129+
MCScriptAddDefinedTypeToModule(t_builder, t_bool_type_index, t_bool_type_def);
130+
MCScriptAddDefinedTypeToModule(t_builder, t_uint_type_index, t_uint_type_def);
131+
MCScriptAddDefinedTypeToModule(t_builder, t_double_type_index, t_double_type_def);
132+
127133
MCScriptAddDefinitionToModule(t_builder, t_def_index);
128-
MCScriptAddDefinedTypeToModule(t_builder, t_bool_type_index, t_type_index);
129-
MCScriptBeginHandlerTypeInModule(t_builder, t_type_index);
130-
MCScriptAddDefinedTypeToModule(t_builder, t_uint_type_index, t_type_index);
131-
MCScriptContinueHandlerTypeInModule(t_builder, kMCScriptHandlerTypeParameterModeInOut, MCNAME("count"), t_type_index);
134+
MCScriptBeginHandlerTypeInModule(t_builder, t_bool_type_def);
135+
MCScriptContinueHandlerTypeInModule(t_builder, kMCScriptHandlerTypeParameterModeInOut, MCNAME("count"), t_uint_type_def);
132136
MCScriptEndHandlerTypeInModule(t_builder, t_type_index);
133137
MCScriptAddForeignHandlerToModule(t_builder, MCNAME("RepeatCounted"), t_type_index, MCSTR("MCScriptBuiltinRepeatCounted"), t_def_index);
134138
MCScriptAddExportToModule(t_builder, t_def_index);
135139

140+
MCScriptAddDefinitionToModule(t_builder, t_def_index);
141+
MCScriptBeginHandlerTypeInModule(t_builder, t_bool_type_def);
142+
MCScriptContinueHandlerTypeInModule(t_builder, kMCScriptHandlerTypeParameterModeIn, MCNAME("counter"), t_double_type_def);
143+
MCScriptContinueHandlerTypeInModule(t_builder, kMCScriptHandlerTypeParameterModeIn, MCNAME("limit"), t_double_type_def);
144+
MCScriptEndHandlerTypeInModule(t_builder, t_type_index);
145+
MCScriptAddForeignHandlerToModule(t_builder, MCNAME("RepeatUpToCondition"), t_type_index, MCSTR("MCScriptBuiltinRepeatUpToCondition"), t_def_index);
146+
MCScriptAddExportToModule(t_builder, t_def_index);
147+
148+
MCScriptAddDefinitionToModule(t_builder, t_def_index);
149+
MCScriptBeginHandlerTypeInModule(t_builder, t_double_type_def);
150+
MCScriptContinueHandlerTypeInModule(t_builder, kMCScriptHandlerTypeParameterModeIn, MCNAME("counter"), t_double_type_def);
151+
MCScriptContinueHandlerTypeInModule(t_builder, kMCScriptHandlerTypeParameterModeIn, MCNAME("step"), t_double_type_def);
152+
MCScriptEndHandlerTypeInModule(t_builder, t_type_index);
153+
MCScriptAddForeignHandlerToModule(t_builder, MCNAME("RepeatUpToIterate"), t_type_index, MCSTR("MCScriptBuiltinRepeatUpToIterate"), t_def_index);
154+
MCScriptAddExportToModule(t_builder, t_def_index);
155+
156+
MCScriptAddDefinitionToModule(t_builder, t_def_index);
157+
MCScriptBeginHandlerTypeInModule(t_builder, t_bool_type_def);
158+
MCScriptContinueHandlerTypeInModule(t_builder, kMCScriptHandlerTypeParameterModeIn, MCNAME("counter"), t_double_type_def);
159+
MCScriptContinueHandlerTypeInModule(t_builder, kMCScriptHandlerTypeParameterModeIn, MCNAME("limit"), t_double_type_def);
160+
MCScriptEndHandlerTypeInModule(t_builder, t_type_index);
161+
MCScriptAddForeignHandlerToModule(t_builder, MCNAME("RepeatDownToCondition"), t_type_index, MCSTR("MCScriptBuiltinRepeatUpToCondition"), t_def_index);
162+
MCScriptAddExportToModule(t_builder, t_def_index);
163+
164+
MCScriptAddDefinitionToModule(t_builder, t_def_index);
165+
MCScriptBeginHandlerTypeInModule(t_builder, t_double_type_def);
166+
MCScriptContinueHandlerTypeInModule(t_builder, kMCScriptHandlerTypeParameterModeIn, MCNAME("counter"), t_double_type_def);
167+
MCScriptContinueHandlerTypeInModule(t_builder, kMCScriptHandlerTypeParameterModeIn, MCNAME("step"), t_double_type_def);
168+
MCScriptEndHandlerTypeInModule(t_builder, t_type_index);
169+
MCScriptAddForeignHandlerToModule(t_builder, MCNAME("RepeatDownToIterate"), t_type_index, MCSTR("MCScriptBuiltinRepeatDownToIterate"), t_def_index);
170+
MCScriptAddExportToModule(t_builder, t_def_index);
171+
136172
////
137173

138174
MCStreamRef t_stream;

0 commit comments

Comments
 (0)