@@ -275,20 +275,26 @@ class ListBuiltinFunctions(private val valueMapper: ValueMapper) {
275275 private def sublistFunction =
276276 builtinFunction(
277277 params = List (" list" , " start" ),
278- invoke = { case List (ValList (list), ValNumber (start)) =>
279- ValList (list.slice(listIndex(list, start.intValue), list.length))
278+ invoke = {
279+ case List (ValList (_), ValNumber (start)) if start == 0 =>
280+ ValError (" start position must be a non-zero number" )
281+ case List (ValList (list), ValNumber (start)) =>
282+ ValList (list.slice(listIndex(list, start.intValue), list.length))
280283 }
281284 )
282285
283286 private def sublistFunction3 = builtinFunction(
284287 params = List (" list" , " start" , " length" ),
285- invoke = { case List (ValList (list), ValNumber (start), ValNumber (length)) =>
286- ValList (
287- list.slice(
288- listIndex(list, start.intValue),
289- listIndex(list, start.intValue) + length.intValue
288+ invoke = {
289+ case List (ValList (_), ValNumber (start), ValNumber (_)) if start == 0 =>
290+ ValError (" start position must be a non-zero number" )
291+ case List (ValList (list), ValNumber (start), ValNumber (length)) =>
292+ ValList (
293+ list.slice(
294+ listIndex(list, start.intValue),
295+ listIndex(list, start.intValue) + length.intValue
296+ )
290297 )
291- )
292298 }
293299 )
294300
@@ -325,23 +331,29 @@ class ListBuiltinFunctions(private val valueMapper: ValueMapper) {
325331
326332 private def insertBeforeFunction = builtinFunction(
327333 params = List (" list" , " position" , " newItem" ),
328- invoke = { case List (ValList (list), ValNumber (position), newItem : Val ) =>
329- ValList (
330- list
331- .take(listIndex(list, position.intValue)) ++ (newItem :: Nil ) ++ list
332- .drop(listIndex(list, position.intValue))
333- )
334+ invoke = {
335+ case List (ValList (_), ValNumber (position), _) if position == 0 =>
336+ ValError (" position must be a non-zero number" )
337+ case List (ValList (list), ValNumber (position), newItem : Val ) =>
338+ ValList (
339+ list
340+ .take(listIndex(list, position.intValue)) ++ (newItem :: Nil ) ++ list
341+ .drop(listIndex(list, position.intValue))
342+ )
334343 }
335344 )
336345
337346 private def removeFunction = builtinFunction(
338347 params = List (" list" , " position" ),
339- invoke = { case List (ValList (list), ValNumber (position)) =>
340- ValList (
341- list.take(listIndex(list, position.intValue)) ++ list.drop(
342- listIndex(list, position.intValue + 1 )
348+ invoke = {
349+ case List (ValList (_), ValNumber (position)) if position == 0 =>
350+ ValError (" position must be a non-zero number" )
351+ case List (ValList (list), ValNumber (position)) =>
352+ ValList (
353+ list.take(listIndex(list, position.intValue)) ++ list.drop(
354+ listIndex(list, position.intValue + 1 )
355+ )
343356 )
344- )
345357 }
346358 )
347359
0 commit comments