I can't seem to understand why my translation doesn't give the desired result. Here's the C++ source code:

```
#include <stdio.h>

int minint(int candidate = -1) {
  if (candidate - 1 >= 0)
    return candidate;
  for (int stride = -1, stride2 = 2*stride; ; stride = stride2, stride2 += stride2)
    if (stride2 >= 0 || candidate + stride2 >= 0)
      return minint(candidate + stride);
}

int maxint(int candidate = 1) {
  if (candidate + 1 <= 0)
    return candidate;
  for (int stride = 1, stride2 = 2*stride; ; stride = stride2, stride2 += stride2)
    if (stride2 <= 0 || candidate + stride2 <= 0)
      return maxint(candidate + stride);
}

int main() {
  (void) printf("Max int is %d\n", maxint());
  (void) printf("Min int is %d\n", minint());
  return 0;
}

```

It prints:

```
Max int is 2147483647
Min int is -2147483648

```

And here's the Pascal code (compiled using Free Pascal):

```
program Translation;

function minint (candidate : Longint) : Longint;
    var stride, stride2 : Longint;
    var bool : Boolean;
    begin
        bool := false;
        if (candidate - 1) >= 0 then
        begin
            bool := true;
            minint := candidate;
        end;
        if (bool = false) then
        begin
            stride := -1;
            stride2 := 2*stride;
            while (stride2 < 0) and (candidate + stride2 < 0) do
            begin
                stride := stride2;
                stride2 += stride2;
            end;
            minint := minint(candidate + stride)
        end;
    end;

function maxint (candidate : Longint) : Longint;
    var stride, stride2 : Longint;
    var bool : Boolean;
    begin
        bool := false;
        if (candidate + 1) <= 0 then
        begin
            bool := true;
            maxint := candidate;
        end;
        if (bool = false) then
        begin
            stride := 1;
            stride2 := 2*stride;
            while (stride2 > 0) and (candidate + stride2 > 0) do
            begin
                stride := stride2;
                stride2 += stride2;
            end;
            maxint := minint(candidate + stride)
        end;
    end;

begin
    writeln(maxint(1));
    writeln(minint(-1));
end.

```

Which for some reason prints:

```
1073741825
2147483647

```

Very, very odd. The 'maxint' value is approximately half of what it needs to be, and the 'minint' value is positive (actually, it's what the 'maxint' value is supposed to be). 

What am I missing? Bear in mind that I am prohibited from using sequencers (that is, commands such as Exit - hence the boolean) and default arguments.