﻿// Code gen for Chain transitions between 4 and 5 items. For 5 or more, we use an array based implementation,
// so generate code to build the array from values on the stack.

Chain(Range(1), Range(2), Range(3))
Chain(Range(1), Range(2), Range(3), Range(4))
Chain(Range(1), Range(2), Range(3), Range(4), Range(5))
Chain(Range(1), Range(2), Range(3), Range(4), Range(5), Range(6))

Range(1) ++ Range(2) ++ Range(3)
Range(1) ++ Range(2) ++ Range(3) ++ Range(4)
Range(1) ++ Range(2) ++ Range(3) ++ Range(4) ++ Range(5)
Range(1) ++ Range(2) ++ Range(3) ++ Range(4) ++ Range(5) ++ Range(6)

`` N := null;
`` E := [];
`` R := Range(3);

N ++ N
N ++ E
E ++ N
E ++ E

R ++ R
R ++ N
R ++ E
N ++ R
E ++ R
