3v4l.org

run code in 300+ PHP versions simultaneously
<?php function add($overflowsTimes, $augend, $addend){ $sum = $augend + $addend; if(is_float($sum)){ $sum = $addend - (PHP_INT_MAX - $augend); $overflowsTimes++; }elseif($sum < 0){ $sum = PHP_INT_MAX + $sum; $overflowsTimes--; } if($overflowsTimes < 0){ throw new Error(); } return [ $overflowsTimes, $sum ]; } assert(add(0, 0, 0) === [0, 0]); assert(add(0, 100, 200) === [0, 300]); assert(add(0, PHP_INT_MAX - 100, 100) === [0, PHP_INT_MAX]); assert(add(0, PHP_INT_MAX, 100) === [1, 100]); assert(add(0, PHP_INT_MAX, 1000) === [1, 1000]); assert(add(0, PHP_INT_MAX, PHP_INT_MAX) === [1, PHP_INT_MAX]); assert(add(1, 0, 0) === [1, 0]); assert(add(1, 100, 200) === [1, 300]); assert(add(1, PHP_INT_MAX - 100, 100) === [1, PHP_INT_MAX]); assert(add(1, PHP_INT_MAX, 100) === [2, 100]); assert(add(1, PHP_INT_MAX, 1000) === [2, 1000]); assert(add(1, PHP_INT_MAX, PHP_INT_MAX) === [2, PHP_INT_MAX]); assert(add(2, 0, 0) === [2, 0]); assert(add(2, 100, 200) === [2, 300]); assert(add(2, PHP_INT_MAX - 100, 100) === [2, PHP_INT_MAX]); assert(add(2, PHP_INT_MAX, 100) === [3, 100]); assert(add(2, PHP_INT_MAX, 1000) === [3, 1000]); assert(add(2, PHP_INT_MAX, PHP_INT_MAX) === [3, PHP_INT_MAX]); try{ add(0, PHP_INT_MAX, PHP_INT_MIN); }catch(Throwable $e){} print_r(add(1, PHP_INT_MAX, PHP_INT_MIN));
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 42) Position 1 = 205
Branch analysis from position: 205
1 jumps found. (Code = 62) Position 1 = -2
Found catch point at position: 204
Branch analysis from position: 204
2 jumps found. (Code = 107) Position 1 = 205, Position 2 = -2
Branch analysis from position: 205
filename:       /in/kVTFZ
function name:  (null)
number of ops:  214
compiled vars:  !0 = $e
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   21     0  E >   ASSERT_CHECK                                             
          1        INIT_FCALL                                               'assert'
          2        INIT_FCALL                                               'add'
          3        SEND_VAL                                                 0
          4        SEND_VAL                                                 0
          5        SEND_VAL                                                 0
          6        DO_FCALL                                      0  $1      
          7        IS_IDENTICAL                                     ~2      $1, <array>
          8        SEND_VAL                                                 ~2
          9        SEND_VAL                                                 'assert%28add%280%2C+0%2C+0%29+%3D%3D%3D+%5B0%2C+0%5D%29'
         10        DO_ICALL                                                 
   22    11        ASSERT_CHECK                                             
         12        INIT_FCALL                                               'assert'
         13        INIT_FCALL                                               'add'
         14        SEND_VAL                                                 0
         15        SEND_VAL                                                 100
         16        SEND_VAL                                                 200
         17        DO_FCALL                                      0  $4      
         18        IS_IDENTICAL                                     ~5      $4, <array>
         19        SEND_VAL                                                 ~5
         20        SEND_VAL                                                 'assert%28add%280%2C+100%2C+200%29+%3D%3D%3D+%5B0%2C+300%5D%29'
         21        DO_ICALL                                                 
   23    22        ASSERT_CHECK                                             
         23        INIT_FCALL                                               'assert'
         24        INIT_FCALL                                               'add'
         25        SEND_VAL                                                 0
         26        SEND_VAL                                                 9223372036854775707
         27        SEND_VAL                                                 100
         28        DO_FCALL                                      0  $7      
         29        IS_IDENTICAL                                     ~8      $7, <array>
         30        SEND_VAL                                                 ~8
         31        SEND_VAL                                                 'assert%28add%280%2C+PHP_INT_MAX+-+100%2C+100%29+%3D%3D%3D+%5B0%2C+PHP_INT_MAX%5D%29'
         32        DO_ICALL                                                 
   24    33        ASSERT_CHECK                                             
         34        INIT_FCALL                                               'assert'
         35        INIT_FCALL                                               'add'
         36        SEND_VAL                                                 0
         37        SEND_VAL                                                 9223372036854775807
         38        SEND_VAL                                                 100
         39        DO_FCALL                                      0  $10     
         40        IS_IDENTICAL                                     ~11     $10, <array>
         41        SEND_VAL                                                 ~11
         42        SEND_VAL                                                 'assert%28add%280%2C+PHP_INT_MAX%2C+100%29+%3D%3D%3D+%5B1%2C+100%5D%29'
         43        DO_ICALL                                                 
   25    44        ASSERT_CHECK                                             
         45        INIT_FCALL                                               'assert'
         46        INIT_FCALL                                               'add'
         47        SEND_VAL                                                 0
         48        SEND_VAL                                                 9223372036854775807
         49        SEND_VAL                                                 1000
         50        DO_FCALL                                      0  $13     
         51        IS_IDENTICAL                                     ~14     $13, <array>
         52        SEND_VAL                                                 ~14
         53        SEND_VAL                                                 'assert%28add%280%2C+PHP_INT_MAX%2C+1000%29+%3D%3D%3D+%5B1%2C+1000%5D%29'
         54        DO_ICALL                                                 
   26    55        ASSERT_CHECK                                             
         56        INIT_FCALL                                               'assert'
         57        INIT_FCALL                                               'add'
         58        SEND_VAL                                                 0
         59        SEND_VAL                                                 9223372036854775807
         60        SEND_VAL                                                 9223372036854775807
         61        DO_FCALL                                      0  $16     
         62        IS_IDENTICAL                                     ~17     $16, <array>
         63        SEND_VAL                                                 ~17
         64        SEND_VAL                                                 'assert%28add%280%2C+PHP_INT_MAX%2C+PHP_INT_MAX%29+%3D%3D%3D+%5B1%2C+PHP_INT_MAX%5D%29'
         65        DO_ICALL                                                 
   28    66        ASSERT_CHECK                                             
         67        INIT_FCALL                                               'assert'
         68        INIT_FCALL                                               'add'
         69        SEND_VAL                                                 1
         70        SEND_VAL                                                 0
         71        SEND_VAL                                                 0
         72        DO_FCALL                                      0  $19     
         73        IS_IDENTICAL                                     ~20     $19, <array>
         74        SEND_VAL                                                 ~20
         75        SEND_VAL                                                 'assert%28add%281%2C+0%2C+0%29+%3D%3D%3D+%5B1%2C+0%5D%29'
         76        DO_ICALL                                                 
   29    77        ASSERT_CHECK                                             
         78        INIT_FCALL                                               'assert'
         79        INIT_FCALL                                               'add'
         80        SEND_VAL                                                 1
         81        SEND_VAL                                                 100
         82        SEND_VAL                                                 200
         83        DO_FCALL                                      0  $22     
         84        IS_IDENTICAL                                     ~23     $22, <array>
         85        SEND_VAL                                                 ~23
         86        SEND_VAL                                                 'assert%28add%281%2C+100%2C+200%29+%3D%3D%3D+%5B1%2C+300%5D%29'
         87        DO_ICALL                                                 
   30    88        ASSERT_CHECK                                             
         89        INIT_FCALL                                               'assert'
         90        INIT_FCALL                                               'add'
         91        SEND_VAL                                                 1
         92        SEND_VAL                                                 9223372036854775707
         93        SEND_VAL                                                 100
         94        DO_FCALL                                      0  $25     
         95        IS_IDENTICAL                                     ~26     $25, <array>
         96        SEND_VAL                                                 ~26
         97        SEND_VAL                                                 'assert%28add%281%2C+PHP_INT_MAX+-+100%2C+100%29+%3D%3D%3D+%5B1%2C+PHP_INT_MAX%5D%29'
         98        DO_ICALL                                                 
   31    99        ASSERT_CHECK                                             
        100        INIT_FCALL                                               'assert'
        101        INIT_FCALL                                               'add'
        102        SEND_VAL                                                 1
        103        SEND_VAL                                                 9223372036854775807
        104        SEND_VAL                                                 100
        105        DO_FCALL                                      0  $28     
        106        IS_IDENTICAL                                     ~29     $28, <array>
        107        SEND_VAL                                                 ~29
        108        SEND_VAL                                                 'assert%28add%281%2C+PHP_INT_MAX%2C+100%29+%3D%3D%3D+%5B2%2C+100%5D%29'
        109        DO_ICALL                                                 
   32   110        ASSERT_CHECK                                             
        111        INIT_FCALL                                               'assert'
        112        INIT_FCALL                                               'add'
        113        SEND_VAL                                                 1
        114        SEND_VAL                                                 9223372036854775807
        115        SEND_VAL                                                 1000
        116        DO_FCALL                                      0  $31     
        117        IS_IDENTICAL                                     ~32     $31, <array>
        118        SEND_VAL                                                 ~32
        119        SEND_VAL                                                 'assert%28add%281%2C+PHP_INT_MAX%2C+1000%29+%3D%3D%3D+%5B2%2C+1000%5D%29'
        120        DO_ICALL                                                 
   33   121        ASSERT_CHECK                                             
        122        INIT_FCALL                                               'assert'
        123        INIT_FCALL                                               'add'
        124        SEND_VAL                                                 1
        125        SEND_VAL                                                 9223372036854775807
        126        SEND_VAL                                                 9223372036854775807
        127        DO_FCALL                                      0  $34     
        128        IS_IDENTICAL                                     ~35     $34, <array>
        129        SEND_VAL                                                 ~35
        130        SEND_VAL                                                 'assert%28add%281%2C+PHP_INT_MAX%2C+PHP_INT_MAX%29+%3D%3D%3D+%5B2%2C+PHP_INT_MAX%5D%29'
        131        DO_ICALL                                                 
   35   132        ASSERT_CHECK                                             
        133        INIT_FCALL                                               'assert'
        134        INIT_FCALL                                               'add'
        135        SEND_VAL                                                 2
        136        SEND_VAL                                                 0
        137        SEND_VAL                                                 0
        138        DO_FCALL                                      0  $37     
        139        IS_IDENTICAL                                     ~38     $37, <array>
        140        SEND_VAL                                                 ~38
        141        SEND_VAL                                                 'assert%28add%282%2C+0%2C+0%29+%3D%3D%3D+%5B2%2C+0%5D%29'
        142        DO_ICALL                                                 
   36   143        ASSERT_CHECK                                             
        144        INIT_FCALL                                               'assert'
        145        INIT_FCALL                                               'add'
        146        SEND_VAL                                                 2
        147        SEND_VAL                                                 100
        148        SEND_VAL                                                 200
        149        DO_FCALL                                      0  $40     
        150        IS_IDENTICAL                                     ~41     $40, <array>
        151        SEND_VAL                                                 ~41
        152        SEND_VAL                                                 'assert%28add%282%2C+100%2C+200%29+%3D%3D%3D+%5B2%2C+300%5D%29'
        153        DO_ICALL                                                 
   37   154        ASSERT_CHECK                                             
        155        INIT_FCALL                                               'assert'
        156        INIT_FCALL                                               'add'
        157        SEND_VAL                                                 2
        158        SEND_VAL                                                 9223372036854775707
        159        SEND_VAL                                                 100
        160        DO_FCALL                                      0  $43     
        161        IS_IDENTICAL                                     ~44     $43, <array>
        162        SEND_VAL                                                 ~44
        163        SEND_VAL                                                 'assert%28add%282%2C+PHP_INT_MAX+-+100%2C+100%29+%3D%3D%3D+%5B2%2C+PHP_INT_MAX%5D%29'
        164        DO_ICALL                                                 
   38   165        ASSERT_CHECK                                             
        166        INIT_FCALL                                               'assert'
        167        INIT_FCALL                                               'add'
        168        SEND_VAL                                                 2
        169        SEND_VAL                                                 9223372036854775807
        170        SEND_VAL                                                 100
        171        DO_FCALL                                      0  $46     
        172        IS_IDENTICAL                                     ~47     $46, <array>
        173        SEND_VAL                                                 ~47
        174        SEND_VAL                                                 'assert%28add%282%2C+PHP_INT_MAX%2C+100%29+%3D%3D%3D+%5B3%2C+100%5D%29'
        175        DO_ICALL                                                 
   39   176        ASSERT_CHECK                                             
        177        INIT_FCALL                                               'assert'
        178        INIT_FCALL                                               'add'
        179        SEND_VAL                                                 2
        180        SEND_VAL                                                 9223372036854775807
        181        SEND_VAL                                                 1000
        182        DO_FCALL                                      0  $49     
        183        IS_IDENTICAL                                     ~50     $49, <array>
        184        SEND_VAL                                                 ~50
        185        SEND_VAL                                                 'assert%28add%282%2C+PHP_INT_MAX%2C+1000%29+%3D%3D%3D+%5B3%2C+1000%5D%29'
        186        DO_ICALL                                                 
   40   187        ASSERT_CHECK                                             
        188        INIT_FCALL                                               'assert'
        189        INIT_FCALL                                               'add'
        190        SEND_VAL                                                 2
        191        SEND_VAL                                                 9223372036854775807
        192        SEND_VAL                                                 9223372036854775807
        193        DO_FCALL                                      0  $52     
        194        IS_IDENTICAL                                     ~53     $52, <array>
        195        SEND_VAL                                                 ~53
        196        SEND_VAL                                                 'assert%28add%282%2C+PHP_INT_MAX%2C+PHP_INT_MAX%29+%3D%3D%3D+%5B3%2C+PHP_INT_MAX%5D%29'
        197        DO_ICALL                                                 
   43   198        INIT_FCALL                                               'add'
        199        SEND_VAL                                                 0
        200        SEND_VAL                                                 9223372036854775807
        201        SEND_VAL                                                 -9223372036854775808
        202        DO_FCALL                                      0          
        203      > JMP                                                      ->205
   44   204  E > > CATCH                                       last         'Throwable'
   46   205    >   INIT_FCALL                                               'print_r'
        206        INIT_FCALL                                               'add'
        207        SEND_VAL                                                 1
        208        SEND_VAL                                                 9223372036854775807
        209        SEND_VAL                                                 -9223372036854775808
        210        DO_FCALL                                      0  $56     
        211        SEND_VAR                                                 $56
        212        DO_ICALL                                                 
        213      > RETURN                                                   1

Function add:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 7, Position 2 = 12
Branch analysis from position: 7
1 jumps found. (Code = 42) Position 1 = 17
Branch analysis from position: 17
2 jumps found. (Code = 43) Position 1 = 19, Position 2 = 22
Branch analysis from position: 19
1 jumps found. (Code = 108) Position 1 = -2
Branch analysis from position: 22
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 12
2 jumps found. (Code = 43) Position 1 = 14, Position 2 = 17
Branch analysis from position: 14
2 jumps found. (Code = 43) Position 1 = 19, Position 2 = 22
Branch analysis from position: 19
Branch analysis from position: 22
Branch analysis from position: 17
filename:       /in/kVTFZ
function name:  add
number of ops:  26
compiled vars:  !0 = $overflowsTimes, !1 = $augend, !2 = $addend, !3 = $sum
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   RECV                                             !0      
          1        RECV                                             !1      
          2        RECV                                             !2      
    4     3        ADD                                              ~4      !1, !2
          4        ASSIGN                                                   !3, ~4
    5     5        TYPE_CHECK                                   32          !3
          6      > JMPZ                                                     ~6, ->12
    6     7    >   SUB                                              ~7      9223372036854775807, !1
          8        SUB                                              ~8      !2, ~7
          9        ASSIGN                                                   !3, ~8
    7    10        PRE_INC                                                  !0
         11      > JMP                                                      ->17
    8    12    >   IS_SMALLER                                               !3, 0
         13      > JMPZ                                                     ~11, ->17
    9    14    >   ADD                                              ~12     9223372036854775807, !3
         15        ASSIGN                                                   !3, ~12
   10    16        PRE_DEC                                                  !0
   12    17    >   IS_SMALLER                                               !0, 0
         18      > JMPZ                                                     ~15, ->22
   13    19    >   NEW                                              $16     'Error'
         20        DO_FCALL                                      0          
         21      > THROW                                         0          $16
   16    22    >   INIT_ARRAY                                       ~18     !0
   17    23        ADD_ARRAY_ELEMENT                                ~18     !3
         24      > RETURN                                                   ~18
   19    25*     > RETURN                                                   null

End of function add

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
169.21 ms | 1423 KiB | 37 Q