
     1  %systemintegerfn stoi(%string(255) S)
        O LINE   1 "regression-bugs-tmp/stoi.imp"
        $ DEF    STOI (_STOI) p1=V_00ad a/tf=18 b/format=1 c/ostate=34  type=1 (integer) form=8 (function) special=0 (<special:0>) linkage=4 (system) spec=0 indirect=1 unass=1
           { START  ( FORMAL PARAMETERS  {lev=1 --> 2, nested=0 --> 1}
              $ DEF    S p1=V_00ae a/tf=31 b/format=ff c/ostate=0  type=3 (string) form=1 (simple) special=0 (<special:0>) linkage=0 (auto) spec=0 indirect=0 unass=0
           } FINISH ) {lev=1}

     2  %integer i,k
           O LINE   2 "regression-bugs-tmp/stoi.imp"
           $ DEF    I p1=V_00af a/tf=11 b/format=1 c/ostate=0  type=1 (integer) form=1 (simple) special=0 (<special:0>) linkage=0 (auto) spec=0 indirect=0 unass=0
           $ DEF    K p1=V_00b0 a/tf=11 b/format=1 c/ostate=0  type=1 (integer) form=1 (simple) special=0 (<special:0>) linkage=0 (auto) spec=0 indirect=0 unass=0

     3  %integer sign=0, val=0
           O LINE   3 "regression-bugs-tmp/stoi.imp"
           $ DEF    SIGN p1=V_00b1 a/tf=11 b/format=1 c/ostate=0  type=1 (integer) form=1 (simple) special=0 (<special:0>) linkage=0 (auto) spec=0 indirect=0 unass=0
           @ PUSH   SIGN
           N PUSHI  #0x00000000
           S ASSVAL
           $ DEF    VAL p1=V_00b2 a/tf=11 b/format=1 c/ostate=0  type=1 (integer) form=1 (simple) special=0 (<special:0>) linkage=0 (auto) spec=0 indirect=0 unass=0
           @ PUSH   VAL
           N PUSHI  #0x00000000
           S ASSVAL

     4    i = 0
           O LINE   4 "regression-bugs-tmp/stoi.imp"
           @ PUSH   I
           N PUSHI  #0x00000000
           S ASSVAL

     5    %while i < length(s) %cycle
           O LINE   5 "regression-bugs-tmp/stoi.imp"
           : LOCATE L_0003
           @ PUSH   I
           @ PUSH   LENGTH
           @ PUSH   S
           p ASSPAR
           E CALL  
           ? JUMPIF >= L_0004

     6      i = i+1;  k = charno(s,i)
           O LINE   6 "regression-bugs-tmp/stoi.imp"
           @ PUSH   I
           @ PUSH   I
           N PUSHI  #0x00000001
           + ADD   
           S ASSVAL
           O LINE   6 "regression-bugs-tmp/stoi.imp"
           @ PUSH   K
           @ PUSH   CHARNO
           @ PUSH   S
           p ASSPAR
           @ PUSH   I
           p ASSPAR
           E CALL  
           S ASSVAL

     7      %continue %if k <= ' '
           O LINE   7 "regression-bugs-tmp/stoi.imp"
           @ PUSH   K
           N PUSHI  #0x00000020
           ? JUMPIF > L_0007
           F GOTO   L_0005
           : LOCATE L_0007

     8      %if k = '-' %start
           O LINE   8 "regression-bugs-tmp/stoi.imp"
           @ PUSH   K
           N PUSHI  #0x0000002d
           ? JUMPIF # L_0007

     9        sign = 1
           O LINE   9 "regression-bugs-tmp/stoi.imp"
           @ PUSH   SIGN
           N PUSHI  #0x00000001
           S ASSVAL

    10      %else %if '0' <= k <= '9'
           O LINE   10 "regression-bugs-tmp/stoi.imp"
           F GOTO   L_0006
           : LOCATE L_0007
           N PUSHI  #0x00000030
           @ PUSH   K
           " JUMPIFD > L_0007
           N PUSHI  #0x00000039
           ? JUMPIF > L_0007

    11        val = val<<3+val+val+k-'0'
           O LINE   11 "regression-bugs-tmp/stoi.imp"
           @ PUSH   VAL
           @ PUSH   VAL
           N PUSHI  #0x00000003
           [ LSH   
           @ PUSH   VAL
           + ADD   
           @ PUSH   VAL
           + ADD   
           @ PUSH   K
           + ADD   
           N PUSHI  #0x00000030
           - SUB   
           S ASSVAL

    12      %else
           O LINE   12 "regression-bugs-tmp/stoi.imp"
           F GOTO   L_0006
           : LOCATE L_0007

    13        %signal 4, 1, k{, "Non-numeric character"
           O LINE   13 "regression-bugs-tmp/stoi.imp"
           N PUSHI  #0x00000001
           @ PUSH   K
           e EVENT  0004

    14      %finish
           O LINE   14 "regression-bugs-tmp/stoi.imp"
           : LOCATE L_0006

    15    %repeat
           O LINE   15 "regression-bugs-tmp/stoi.imp"
           : LOCATE L_0005
           B REPEAT L_0003
           : LOCATE L_0004

    16    %result = val %if sign = 0
           O LINE   16 "regression-bugs-tmp/stoi.imp"
           @ PUSH   SIGN
           N PUSHI  #0x00000000
           ? JUMPIF # L_0004
           @ PUSH   VAL
           V RESULT
           : LOCATE L_0004

    17    %result = -val
           O LINE   17 "regression-bugs-tmp/stoi.imp"
           @ PUSH   VAL
           U NEGATE
           V RESULT

    18  %end
    19  
           O LINE   18 "regression-bugs-tmp/stoi.imp"
        ; END    _STOI {lev=1 --> 0}

    20  %endoffile
        O LINE   20 "regression-bugs-tmp/stoi.imp"
        ; END     {lev=0 --> -1}


