3v4l.org

run code in 300+ PHP versions simultaneously
<?php class ContentTypeBuilder { private $contentTypeFactory; private $CTLs = [ "\x00" => 1, "\x01" => 1, "\x02" => 1, "\x03" => 1, "\x04" => 1, "\x05" => 1, "\x06" => 1, "\x07" => 1, "\x08" => 1, /* "\x09" */ /* "\x0A" */ "\x0B" => 1, "\x0C" => 1, /* "\x0D" */ "\x0E" => 1, "\x0F" => 1, "\x10" => 1, "\x11" => 1, "\x12" => 1, "\x13" => 1, "\x14" => 1, "\x15" => 1, "\x16" => 1, "\x17" => 1, "\x18" => 1, "\x19" => 1, "\x1A" => 1, "\x1B" => 1, "\x1C" => 1, "\x1D" => 1, "\x1E" => 1, "\x1F" => 1, "\x7F" => 1, ]; private $LWS = [ "\x09" => 1, "\x0A" => 1, "\x0D" => 1, "\x20" => 1, ]; private $separators = [ "\x28" => '(', "\x29" => ')', "\x3C" => '<', "\x3E" => '>', "\x40" => '@', "\x2C" => ',', "\x3A" => ':', "\x5C" => '\\', "\x22" => '"', "\x5B" => '[', "\x5D" => ']', "\x3F" => '?', "\x7B" => '{', "\x7D" => '}', ]; public function __construct(ContentTypeFactory $contentTypeFactory) { $this->contentTypeFactory = $contentTypeFactory; } public function build($typeDef, &$qValue = null) { /* Note: * * This routine favours speed and efficiency over readability and DRY. Deal with it. * * All chars are written as hex literals, to avoid any breakage if some idiot changes the * encoding of this source file to something that doesn't use ASCII code points for the * lower 128. AFAIK the PHP interpreter doesn't yet support this, but this code is a * literal implementation of a concrete spec and doesn't need to be maintainable in the * traditional sense, so I don't want to have to come back here to maintain it. */ $typeDefBytes = (string) $typeDef; $totalLength = strlen($typeDefBytes); $bytePos = 0; // Skip leading LWS while ($bytePos !== $totalLength && isset($this->LWS[$typeDefBytes[$bytePos]])) $bytePos++; $type = "\x00"; for (; $bytePos < $totalLength; $bytePos++) { if ( isset($this->CTLs[$typeDefBytes[$bytePos]]) // CTL || isset($this->LWS[$typeDefBytes[$bytePos]]) // LWS || isset($this->separators[$typeDefBytes[$bytePos]]) // separator || ($typeDefBytes[$bytePos] & "\x80") === "\x80" // >127 || $typeDefBytes[$bytePos] === "\x3B" // ; || $typeDefBytes[$bytePos] === "\x3D" // = ) { trigger_error( 'Syntax error in Accept header value:' . ' invalid token character ' . $typeDefBytes[$bytePos] . ' (0x' . sprintf('%02X', ord($typeDefBytes[$bytePos])) . ')' . ' at offset ' . $bytePos , E_USER_NOTICE); return null; } else if ($typeDefBytes[$bytePos] === "\x2F") { // / $bytePos++; break; } else { $type[$bytePos] = $typeDefBytes[$bytePos]; } } $subType = "\x00"; for ($valuePos = 0; $bytePos < $totalLength; $bytePos++) { if ( isset($this->CTLs[$typeDefBytes[$bytePos]]) // CTL || isset($this->separators[$typeDefBytes[$bytePos]]) // separator || ($typeDefBytes[$bytePos] & "\x80") === "\x80" // >127 || $typeDefBytes[$bytePos] === "\x2F" // / || $typeDefBytes[$bytePos] === "\x3D" // = ) { // invalid char for token trigger_error( 'Syntax error in Accept header value:' . ' invalid token character ' . $typeDefBytes[$bytePos] . ' (0x' . sprintf('%02X', ord($typeDefBytes[$bytePos])) . ')' . ' at offset ' . $bytePos , E_USER_NOTICE); return null; } else if (isset($this->LWS[$typeDefBytes[$bytePos]])) { // LWS $bytePos++; while ($bytePos !== $totalLength && isset($this->LWS[$typeDefBytes[$bytePos]])) $bytePos++; if ($typeDefBytes[$bytePos] === "\x3B") $bytePos++; // ; while ($bytePos !== $totalLength && isset($this->LWS[$typeDefBytes[$bytePos]])) $bytePos++; break; } else if ($typeDefBytes[$bytePos] === "\x3B") { // ; $bytePos++; while ($bytePos < $totalLength && isset($this->LWS[$typeDefBytes[$bytePos]])) $bytePos++; break; } else { $subType[$valuePos++] = $typeDefBytes[$bytePos]; } } // */something is not valid if ($type === "\x2A" && $subType !== "\x2A") { // * trigger_error( 'Semantic error in Accept header value:' . ' */' . $subType . ' is not a valid media-type' , E_USER_NOTICE); return null; } $params = []; $qValue = 1; while ($bytePos < $totalLength) { $name = "\x00"; for ($valuePos = 0; $bytePos < $totalLength; $bytePos++) { if ( isset($this->CTLs[$typeDefBytes[$bytePos]]) // CTL || isset($this->LWS[$typeDefBytes[$bytePos]]) // LWS || isset($this->separators[$typeDefBytes[$bytePos]]) // separator || ($typeDefBytes[$bytePos] & "\x80") === "\x80" // >127 || $typeDefBytes[$bytePos] === "\x3B" // ; || $typeDefBytes[$bytePos] === "\x2F" // / ) { // invalid char for token trigger_error( 'Syntax error in Accept header value:' . ' invalid token character ' . $typeDefBytes[$bytePos] . ' (0x' . sprintf('%02X', ord($typeDefBytes[$bytePos])) . ')' . ' at offset ' . $bytePos , E_USER_NOTICE); return null; } else if ($typeDefBytes[$bytePos] === "\x3D") { // = $bytePos++; break; } else { $name[$valuePos++] = $typeDefBytes[$bytePos]; } } if ($bytePos === $totalLength) { trigger_error( 'Syntax error in Accept header value:' . ' media-type parameter ' . $name . ' has no value' . ' at offset ' . $bytePos , E_USER_NOTICE); return null; } if (isset($this->LWS[$typeDefBytes[$bytePos]])) { trigger_error( 'Syntax error in Accept header value:' . ' LWS is not legal between a media-type parameter name and its value' . ' at offset ' . $bytePos , E_USER_NOTICE); return null; } if ($typeDefBytes[$bytePos] === "\x22") { // " quoted-string if ($typeDefBytes[++$bytePos] === "\x22") { // " empty string $value = ''; $bytePos++; } else { $value = "\x00"; for ($valuePos = 0; $bytePos < $totalLength; $bytePos++) { switch ($typeDefBytes[$bytePos]) { case "\x0D": case "\x0A": case "\x20": case "\x09": // LWS while (isset($this->LWS[$typeDefBytes[$bytePos + 1]])) $bytePos++; $value[$valuePos++] = ' '; // collapse LWS to a single SP break; case "\x22": // " $bytePos++; while ($bytePos !== $totalLength && isset($this->LWS[$typeDefBytes[$bytePos]])) $bytePos++; if ($typeDefBytes[$bytePos] === "\x3B") $bytePos++; // ; while ($bytePos !== $totalLength && isset($this->LWS[$typeDefBytes[$bytePos]])) $bytePos++; break 2; // end of value case "\x5C": // \ if (($typeDefBytes[++$bytePos] & "\x80") !== "\x00") { trigger_error( 'Syntax error in Accept header value:' . ' invalid quoted single character ' . $typeDefBytes[$bytePos] . ' (0x' . sprintf('%02X', ord($typeDefBytes[$bytePos])) . ')' . ' at offset ' . $bytePos , E_USER_NOTICE); return null; // >127 not a valid escape sequence } // break; intentionally omitted default: $value[$valuePos++] = $typeDefBytes[$bytePos]; } } } } else { // token $value = "\x00"; for ($valuePos = 0; $bytePos < $totalLength; $bytePos++) { if ( isset($this->CTLs[$typeDefBytes[$bytePos]]) // CTL || isset($this->separators[$typeDefBytes[$bytePos]]) // separator || ($typeDefBytes[$bytePos] & "\x80") === "\x80" // >127 || $typeDefBytes[$bytePos] === "\x2F" // / || $typeDefBytes[$bytePos] === "\x3D" // = ) { trigger_error( 'Syntax error in Accept header value:' . ' invalid token character ' . $typeDefBytes[$bytePos] . ' (0x' . sprintf('%02X', ord($typeDefBytes[$bytePos])) . ')' . ' at offset ' . $bytePos , E_USER_NOTICE); return null; } else if (isset($this->LWS[$typeDefBytes[$bytePos]])) { // LWS $bytePos++; while ($bytePos !== $totalLength && isset($this->LWS[$typeDefBytes[$bytePos]])) $bytePos++; if ($typeDefBytes[$bytePos] === "\x3B") $bytePos++; // ; while ($bytePos !== $totalLength && isset($this->LWS[$typeDefBytes[$bytePos]])) $bytePos++; break; } else if ($typeDefBytes[$bytePos] === "\x3B") { // ; $bytePos++; while ($bytePos !== $totalLength && isset($this->LWS[$typeDefBytes[$bytePos]])) $bytePos++; break; } else { $value[$valuePos++] = $typeDefBytes[$bytePos]; } } } if (($name | "\x20") === "\x71") { // q $qValue = (float) $value; } else { $params[strtolower($name)] = $value; } } return $this->contentTypeFactory->create($type, $subType, $params); } } class ContentTypeFactory { public function create($type, $subType, array $params = []) { return new ContentType($type, $subType, $params); } } class ContentType { private $type; private $subType; private $params; public function __construct($type, $subType, array $params = []) { $this->type = strtolower($type); $this->subType = strtolower($subType); $this->params = $params; } public function __toString() { $params = []; foreach ($this->params as $key => $val) { $params[] = $key . '=' . $val; } return $this->getType() . ($params ? ';' . implode(';', $params) : ''); } public function getFullType() { return $this->type . '/' . $this->subType; } public function setType($type) { $this->type = strtolower($type); } public function getType() { return $this->type; } public function setSubType($subType) { $this->subType = strtolower($subType); } public function getSubType() { return $this->subType; } public function setParam($name, $value) { if ($value === null) { unset($this->params[strtolower($name)]); } else { $this->params[strtolower($name)] = $value; } } public function getParam($name) { return isset($this->params[$name = strtolower($name)]) ? $this->params[$name] : null; } public function hasParam($name) { return isset($this->params[$name = strtolower($name)]); } public function getParams() { return $this->params; } } $f = new ContentTypeBuilder(new ContentTypeFactory); var_dump($f->build('text/html; test= "a test"; things=stuff ; q=0.8'));
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/BOY6U
function name:  (null)
number of ops:  14
compiled vars:  !0 = $f
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
  251     0  E >   DECLARE_CLASS                                            'contenttype'
  326     1        NEW                                              $1      'ContentTypeBuilder'
          2        NEW                                              $2      'ContentTypeFactory'
          3        DO_FCALL                                      0          
          4        SEND_VAR_NO_REF_EX                                       $2
          5        DO_FCALL                                      0          
          6        ASSIGN                                                   !0, $1
  327     7        INIT_FCALL                                               'var_dump'
          8        INIT_METHOD_CALL                                         !0, 'build'
          9        SEND_VAL_EX                                              'text%2Fhtml%3B+test%3D+%22a++++test%22%3B+things%3Dstuff+%3B+q%3D0.8'
         10        DO_FCALL                                      0  $6      
         11        SEND_VAR                                                 $6
         12        DO_ICALL                                                 
         13      > RETURN                                                   1

Class ContentTypeBuilder:
Function __construct:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/BOY6U
function name:  __construct
number of ops:  4
compiled vars:  !0 = $contentTypeFactory
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   24     0  E >   RECV                                             !0      
   26     1        ASSIGN_OBJ                                               'contentTypeFactory'
          2        OP_DATA                                                  !0
   27     3      > RETURN                                                   null

End of function __construct

Function build:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 42) Position 1 = 9
Branch analysis from position: 9
2 jumps found. (Code = 46) Position 1 = 11, Position 2 = 15
Branch analysis from position: 11
2 jumps found. (Code = 44) Position 1 = 16, Position 2 = 8
Branch analysis from position: 16
1 jumps found. (Code = 42) Position 1 = 76
Branch analysis from position: 76
2 jumps found. (Code = 44) Position 1 = 78, Position 2 = 18
Branch analysis from position: 78
1 jumps found. (Code = 42) Position 1 = 173
Branch analysis from position: 173
2 jumps found. (Code = 44) Position 1 = 175, Position 2 = 81
Branch analysis from position: 175
2 jumps found. (Code = 46) Position 1 = 177, Position 2 = 179
Branch analysis from position: 177
2 jumps found. (Code = 43) Position 1 = 180, Position 2 = 187
Branch analysis from position: 180
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 187
1 jumps found. (Code = 42) Position 1 = 482
Branch analysis from position: 482
2 jumps found. (Code = 44) Position 1 = 484, Position 2 = 190
Branch analysis from position: 484
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 190
1 jumps found. (Code = 42) Position 1 = 252
Branch analysis from position: 252
2 jumps found. (Code = 44) Position 1 = 254, Position 2 = 193
Branch analysis from position: 254
2 jumps found. (Code = 43) Position 1 = 256, Position 2 = 265
Branch analysis from position: 256
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 265
2 jumps found. (Code = 43) Position 1 = 269, Position 2 = 275
Branch analysis from position: 269
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 275
2 jumps found. (Code = 43) Position 1 = 278, Position 2 = 374
Branch analysis from position: 278
2 jumps found. (Code = 43) Position 1 = 282, Position 2 = 285
Branch analysis from position: 282
1 jumps found. (Code = 42) Position 1 = 373
Branch analysis from position: 373
1 jumps found. (Code = 42) Position 1 = 471
Branch analysis from position: 471
2 jumps found. (Code = 43) Position 1 = 474, Position 2 = 477
Branch analysis from position: 474
1 jumps found. (Code = 42) Position 1 = 482
Branch analysis from position: 482
Branch analysis from position: 477
2 jumps found. (Code = 44) Position 1 = 484, Position 2 = 190
Branch analysis from position: 484
Branch analysis from position: 190
Branch analysis from position: 285
1 jumps found. (Code = 42) Position 1 = 371
Branch analysis from position: 371
2 jumps found. (Code = 44) Position 1 = 373, Position 2 = 288
Branch analysis from position: 373
Branch analysis from position: 288
8 jumps found. (Code = 188) Position 1 = 303, Position 2 = 303, Position 3 = 303, Position 4 = 303, Position 5 = 314, Position 6 = 339, Position 7 = 365, Position 8 = 290
Branch analysis from position: 303
1 jumps found. (Code = 42) Position 1 = 305
Branch analysis from position: 305
2 jumps found. (Code = 44) Position 1 = 310, Position 2 = 304
Branch analysis from position: 310
1 jumps found. (Code = 42) Position 1 = 369
Branch analysis from position: 369
2 jumps found. (Code = 44) Position 1 = 373, Position 2 = 288
Branch analysis from position: 373
Branch analysis from position: 288
Branch analysis from position: 304
2 jumps found. (Code = 44) Position 1 = 310, Position 2 = 304
Branch analysis from position: 310
Branch analysis from position: 304
Branch analysis from position: 303
Branch analysis from position: 303
Branch analysis from position: 303
Branch analysis from position: 314
1 jumps found. (Code = 42) Position 1 = 317
Branch analysis from position: 317
2 jumps found. (Code = 46) Position 1 = 319, Position 2 = 323
Branch analysis from position: 319
2 jumps found. (Code = 44) Position 1 = 324, Position 2 = 316
Branch analysis from position: 324
2 jumps found. (Code = 43) Position 1 = 327, Position 2 = 328
Branch analysis from position: 327
1 jumps found. (Code = 42) Position 1 = 330
Branch analysis from position: 330
2 jumps found. (Code = 46) Position 1 = 332, Position 2 = 336
Branch analysis from position: 332
2 jumps found. (Code = 44) Position 1 = 337, Position 2 = 329
Branch analysis from position: 337
1 jumps found. (Code = 42) Position 1 = 373
Branch analysis from position: 373
Branch analysis from position: 329
2 jumps found. (Code = 46) Position 1 = 332, Position 2 = 336
Branch analysis from position: 332
Branch analysis from position: 336
Branch analysis from position: 336
Branch analysis from position: 328
Branch analysis from position: 316
2 jumps found. (Code = 46) Position 1 = 319, Position 2 = 323
Branch analysis from position: 319
Branch analysis from position: 323
Branch analysis from position: 323
Branch analysis from position: 339
2 jumps found. (Code = 43) Position 1 = 344, Position 2 = 365
Branch analysis from position: 344
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 365
2 jumps found. (Code = 44) Position 1 = 373, Position 2 = 288
Branch analysis from position: 373
Branch analysis from position: 288
Branch analysis from position: 365
Branch analysis from position: 290
2 jumps found. (Code = 44) Position 1 = 292, Position 2 = 303
Branch analysis from position: 292
2 jumps found. (Code = 44) Position 1 = 294, Position 2 = 303
Branch analysis from position: 294
2 jumps found. (Code = 44) Position 1 = 296, Position 2 = 303
Branch analysis from position: 296
2 jumps found. (Code = 44) Position 1 = 298, Position 2 = 303
Branch analysis from position: 298
2 jumps found. (Code = 44) Position 1 = 300, Position 2 = 314
Branch analysis from position: 300
2 jumps found. (Code = 44) Position 1 = 302, Position 2 = 339
Branch analysis from position: 302
1 jumps found. (Code = 42) Position 1 = 365
Branch analysis from position: 365
Branch analysis from position: 339
Branch analysis from position: 314
Branch analysis from position: 303
Branch analysis from position: 303
Branch analysis from position: 303
Branch analysis from position: 303
Branch analysis from position: 374
1 jumps found. (Code = 42) Position 1 = 469
Branch analysis from position: 469
2 jumps found. (Code = 44) Position 1 = 471, Position 2 = 377
Branch analysis from position: 471
Branch analysis from position: 377
2 jumps found. (Code = 47) Position 1 = 381, Position 2 = 385
Branch analysis from position: 381
2 jumps found. (Code = 47) Position 1 = 386, Position 2 = 390
Branch analysis from position: 386
2 jumps found. (Code = 47) Position 1 = 391, Position 2 = 394
Branch analysis from position: 391
2 jumps found. (Code = 47) Position 1 = 395, Position 2 = 398
Branch analysis from position: 395
2 jumps found. (Code = 43) Position 1 = 399, Position 2 = 420
Branch analysis from position: 399
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 420
2 jumps found. (Code = 43) Position 1 = 424, Position 2 = 449
Branch analysis from position: 424
1 jumps found. (Code = 42) Position 1 = 427
Branch analysis from position: 427
2 jumps found. (Code = 46) Position 1 = 429, Position 2 = 433
Branch analysis from position: 429
2 jumps found. (Code = 44) Position 1 = 434, Position 2 = 426
Branch analysis from position: 434
2 jumps found. (Code = 43) Position 1 = 437, Position 2 = 438
Branch analysis from position: 437
1 jumps found. (Code = 42) Position 1 = 440
Branch analysis from position: 440
2 jumps found. (Code = 46) Position 1 = 442, Position 2 = 446
Branch analysis from position: 442
2 jumps found. (Code = 44) Position 1 = 447, Position 2 = 439
Branch analysis from position: 447
1 jumps found. (Code = 42) Position 1 = 471
Branch analysis from position: 471
Branch analysis from position: 439
2 jumps found. (Code = 46) Position 1 = 442, Position 2 = 446
Branch analysis from position: 442
Branch analysis from position: 446
Branch analysis from position: 446
Branch analysis from position: 438
Branch analysis from position: 426
2 jumps found. (Code = 46) Position 1 = 429, Position 2 = 433
Branch analysis from position: 429
Branch analysis from position: 433
Branch analysis from position: 433
Branch analysis from position: 449
2 jumps found. (Code = 43) Position 1 = 452, Position 2 = 464
Branch analysis from position: 452
1 jumps found. (Code = 42) Position 1 = 455
Branch analysis from position: 455
2 jumps found. (Code = 46) Position 1 = 457, Position 2 = 461
Branch analysis from position: 457
2 jumps found. (Code = 44) Position 1 = 462, Position 2 = 454
Branch analysis from position: 462
1 jumps found. (Code = 42) Position 1 = 471
Branch analysis from position: 471
Branch analysis from position: 454
2 jumps found. (Code = 46) Position 1 = 457, Position 2 = 461
Branch analysis from position: 457
Branch analysis from position: 461
Branch analysis from position: 461
Branch analysis from position: 464
2 jumps found. (Code = 44) Position 1 = 471, Position 2 = 377
Branch analysis from position: 471
Branch analysis from position: 377
Branch analysis from position: 398
Branch analysis from position: 394
Branch analysis from position: 390
Branch analysis from position: 385
Branch analysis from position: 193
2 jumps found. (Code = 47) Position 1 = 197, Position 2 = 201
Branch analysis from position: 197
2 jumps found. (Code = 47) Position 1 = 202, Position 2 = 206
Branch analysis from position: 202
2 jumps found. (Code = 47) Position 1 = 207, Position 2 = 211
Branch analysis from position: 207
2 jumps found. (Code = 47) Position 1 = 212, Position 2 = 215
Branch analysis from position: 212
2 jumps found. (Code = 47) Position 1 = 216, Position 2 = 219
Branch analysis from position: 216
2 jumps found. (Code = 43) Position 1 = 220, Position 2 = 241
Branch analysis from position: 220
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 241
2 jumps found. (Code = 43) Position 1 = 244, Position 2 = 247
Branch analysis from position: 244
1 jumps found. (Code = 42) Position 1 = 254
Branch analysis from position: 254
Branch analysis from position: 247
2 jumps found. (Code = 44) Position 1 = 254, Position 2 = 193
Branch analysis from position: 254
Branch analysis from position: 193
Branch analysis from position: 219
Branch analysis from position: 215
Branch analysis from position: 211
Branch analysis from position: 206
Branch analysis from position: 201
Branch analysis from position: 179
Branch analysis from position: 81
2 jumps found. (Code = 47) Position 1 = 85, Position 2 = 89
Branch analysis from position: 85
2 jumps found. (Code = 47) Position 1 = 90, Position 2 = 94
Branch analysis from position: 90
2 jumps found. (Code = 47) Position 1 = 95, Position 2 = 98
Branch analysis from position: 95
2 jumps found. (Code = 47) Position 1 = 99, Position 2 = 102
Branch analysis from position: 99
2 jumps found. (Code = 43) Position 1 = 103, Position 2 = 124
Branch analysis from position: 103
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 124
2 jumps found. (Code = 43) Position 1 = 128, Position 2 = 153
Branch analysis from position: 128
1 jumps found. (Code = 42) Position 1 = 131
Branch analysis from position: 131
2 jumps found. (Code = 46) Position 1 = 133, Position 2 = 137
Branch analysis from position: 133
2 jumps found. (Code = 44) Position 1 = 138, Position 2 = 130
Branch analysis from position: 138
2 jumps found. (Code = 43) Position 1 = 141, Position 2 = 142
Branch analysis from position: 141
1 jumps found. (Code = 42) Position 1 = 144
Branch analysis from position: 144
2 jumps found. (Code = 46) Position 1 = 146, Position 2 = 150
Branch analysis from position: 146
2 jumps found. (Code = 44) Position 1 = 151, Position 2 = 143
Branch analysis from position: 151
1 jumps found. (Code = 42) Position 1 = 175
Branch analysis from position: 175
Branch analysis from position: 143
2 jumps found. (Code = 46) Position 1 = 146, Position 2 = 150
Branch analysis from position: 146
Branch analysis from position: 150
Branch analysis from position: 150
Branch analysis from position: 142
Branch analysis from position: 130
2 jumps found. (Code = 46) Position 1 = 133, Position 2 = 137
Branch analysis from position: 133
Branch analysis from position: 137
Branch analysis from position: 137
Branch analysis from position: 153
2 jumps found. (Code = 43) Position 1 = 156, Position 2 = 168
Branch analysis from position: 156
1 jumps found. (Code = 42) Position 1 = 159
Branch analysis from position: 159
2 jumps found. (Code = 46) Position 1 = 161, Position 2 = 165
Branch analysis from position: 161
2 jumps found. (Code = 44) Position 1 = 166, Position 2 = 158
Branch analysis from position: 166
1 jumps found. (Code = 42) Position 1 = 175
Branch analysis from position: 175
Branch analysis from position: 158
2 jumps found. (Code = 46) Position 1 = 161, Position 2 = 165
Branch analysis from position: 161
Branch analysis from position: 165
Branch analysis from position: 165
Branch analysis from position: 168
2 jumps found. (Code = 44) Position 1 = 175, Position 2 = 81
Branch analysis from position: 175
Branch analysis from position: 81
Branch analysis from position: 102
Branch analysis from position: 98
Branch analysis from position: 94
Branch analysis from position: 89
Branch analysis from position: 18
2 jumps found. (Code = 47) Position 1 = 22, Position 2 = 26
Branch analysis from position: 22
2 jumps found. (Code = 47) Position 1 = 27, Position 2 = 31
Branch analysis from position: 27
2 jumps found. (Code = 47) Position 1 = 32, Position 2 = 36
Branch analysis from position: 32
2 jumps found. (Code = 47) Position 1 = 37, Position 2 = 40
Branch analysis from position: 37
2 jumps found. (Code = 47) Position 1 = 41, Position 2 = 44
Branch analysis from position: 41
2 jumps found. (Code = 43) Position 1 = 45, Position 2 = 66
Branch analysis from position: 45
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 66
2 jumps found. (Code = 43) Position 1 = 69, Position 2 = 72
Branch analysis from position: 69
1 jumps found. (Code = 42) Position 1 = 78
Branch analysis from position: 78
Branch analysis from position: 72
2 jumps found. (Code = 44) Position 1 = 78, Position 2 = 18
Branch analysis from position: 78
Branch analysis from position: 18
Branch analysis from position: 44
Branch analysis from position: 40
Branch analysis from position: 36
Branch analysis from position: 31
Branch analysis from position: 26
Branch analysis from position: 8
2 jumps found. (Code = 46) Position 1 = 11, Position 2 = 15
Branch analysis from position: 11
Branch analysis from position: 15
Branch analysis from position: 15
filename:       /in/BOY6U
function name:  build
number of ops:  492
compiled vars:  !0 = $typeDef, !1 = $qValue, !2 = $typeDefBytes, !3 = $totalLength, !4 = $bytePos, !5 = $type, !6 = $subType, !7 = $valuePos, !8 = $params, !9 = $name, !10 = $value
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   29     0  E >   RECV                                             !0      
          1        RECV_INIT                                        !1      null
   42     2        CAST                                          6  ~11     !0
          3        ASSIGN                                                   !2, ~11
   43     4        STRLEN                                           ~13     !2
          5        ASSIGN                                                   !3, ~13
   44     6        ASSIGN                                                   !4, 0
   47     7      > JMP                                                      ->9
          8    >   PRE_INC                                                  !4
          9    >   IS_NOT_IDENTICAL                                 ~17     !4, !3
         10      > JMPZ_EX                                          ~17     ~17, ->15
         11    >   FETCH_DIM_R                                      ~19     !2, !4
         12        FETCH_OBJ_IS                                     ~18     'LWS'
         13        ISSET_ISEMPTY_DIM_OBJ                         0  ~20     ~18, ~19
         14        BOOL                                             ~17     ~20
         15    > > JMPNZ                                                    ~17, ->8
   49    16    >   ASSIGN                                                   !5, '%00'
   50    17      > JMP                                                      ->76
   52    18    >   FETCH_DIM_R                                      ~23     !2, !4
         19        FETCH_OBJ_IS                                     ~22     'CTLs'
         20        ISSET_ISEMPTY_DIM_OBJ                         0  ~24     ~22, ~23
         21      > JMPNZ_EX                                         ~24     ~24, ->26
   53    22    >   FETCH_DIM_R                                      ~26     !2, !4
         23        FETCH_OBJ_IS                                     ~25     'LWS'
         24        ISSET_ISEMPTY_DIM_OBJ                         0  ~27     ~25, ~26
         25        BOOL                                             ~24     ~27
         26    > > JMPNZ_EX                                         ~24     ~24, ->31
   54    27    >   FETCH_DIM_R                                      ~29     !2, !4
         28        FETCH_OBJ_IS                                     ~28     'separators'
         29        ISSET_ISEMPTY_DIM_OBJ                         0  ~30     ~28, ~29
         30        BOOL                                             ~24     ~30
         31    > > JMPNZ_EX                                         ~24     ~24, ->36
   55    32    >   FETCH_DIM_R                                      ~31     !2, !4
         33        BW_AND                                           ~32     ~31, '%80'
         34        IS_IDENTICAL                                     ~33     ~32, '%80'
         35        BOOL                                             ~24     ~33
         36    > > JMPNZ_EX                                         ~24     ~24, ->40
   56    37    >   FETCH_DIM_R                                      ~34     !2, !4
         38        IS_IDENTICAL                                     ~35     ~34, '%3B'
         39        BOOL                                             ~24     ~35
         40    > > JMPNZ_EX                                         ~24     ~24, ->44
   57    41    >   FETCH_DIM_R                                      ~36     !2, !4
         42        IS_IDENTICAL                                     ~37     ~36, '%3D'
         43        BOOL                                             ~24     ~37
         44    > > JMPZ                                                     ~24, ->66
   59    45    >   INIT_FCALL                                               'trigger_error'
   61    46        FETCH_DIM_R                                      ~38     !2, !4
         47        CONCAT                                           ~39     'Syntax+error+in+Accept+header+value%3A+invalid+token+character+', ~38
   62    48        CONCAT                                           ~40     ~39, '+%280x'
         49        INIT_FCALL                                               'sprintf'
         50        SEND_VAL                                                 '%2502X'
         51        INIT_FCALL                                               'ord'
         52        FETCH_DIM_R                                      ~41     !2, !4
         53        SEND_VAL                                                 ~41
         54        DO_ICALL                                         $42     
         55        SEND_VAR                                                 $42
         56        DO_ICALL                                         $43     
         57        CONCAT                                           ~44     ~40, $43
         58        CONCAT                                           ~45     ~44, '%29'
   63    59        CONCAT                                           ~46     ~45, '+at+offset+'
         60        CONCAT                                           ~47     ~46, !4
         61        SEND_VAL                                                 ~47
   64    62        SEND_VAL                                                 1024
         63        DO_ICALL                                                 
   65    64      > RETURN                                                   null
         65*       JMP                                                      ->75
   66    66    >   FETCH_DIM_R                                      ~49     !2, !4
         67        IS_IDENTICAL                                             ~49, '%2F'
         68      > JMPZ                                                     ~50, ->72
   67    69    >   PRE_INC                                                  !4
   68    70      > JMP                                                      ->78
         71*       JMP                                                      ->75
   70    72    >   FETCH_DIM_R                                      ~53     !2, !4
         73        ASSIGN_DIM                                               !5, !4
         74        OP_DATA                                                  ~53
   50    75        PRE_INC                                                  !4
         76    >   IS_SMALLER                                               !4, !3
         77      > JMPNZ                                                    ~55, ->18
   74    78    >   ASSIGN                                                   !6, '%00'
   75    79        ASSIGN                                                   !7, 0
         80      > JMP                                                      ->173
   77    81    >   FETCH_DIM_R                                      ~59     !2, !4
         82        FETCH_OBJ_IS                                     ~58     'CTLs'
         83        ISSET_ISEMPTY_DIM_OBJ                         0  ~60     ~58, ~59
         84      > JMPNZ_EX                                         ~60     ~60, ->89
   78    85    >   FETCH_DIM_R                                      ~62     !2, !4
         86        FETCH_OBJ_IS                                     ~61     'separators'
         87        ISSET_ISEMPTY_DIM_OBJ                         0  ~63     ~61, ~62
         88        BOOL                                             ~60     ~63
         89    > > JMPNZ_EX                                         ~60     ~60, ->94
   79    90    >   FETCH_DIM_R                                      ~64     !2, !4
         91        BW_AND                                           ~65     ~64, '%80'
         92        IS_IDENTICAL                                     ~66     ~65, '%80'
         93        BOOL                                             ~60     ~66
         94    > > JMPNZ_EX                                         ~60     ~60, ->98
   80    95    >   FETCH_DIM_R                                      ~67     !2, !4
         96        IS_IDENTICAL                                     ~68     ~67, '%2F'
         97        BOOL                                             ~60     ~68
         98    > > JMPNZ_EX                                         ~60     ~60, ->102
   81    99    >   FETCH_DIM_R                                      ~69     !2, !4
        100        IS_IDENTICAL                                     ~70     ~69, '%3D'
        101        BOOL                                             ~60     ~70
        102    > > JMPZ                                                     ~60, ->124
   83   103    >   INIT_FCALL                                               'trigger_error'
   85   104        FETCH_DIM_R                                      ~71     !2, !4
        105        CONCAT                                           ~72     'Syntax+error+in+Accept+header+value%3A+invalid+token+character+', ~71
   86   106        CONCAT                                           ~73     ~72, '+%280x'
        107        INIT_FCALL                                               'sprintf'
        108        SEND_VAL                                                 '%2502X'
        109        INIT_FCALL                                               'ord'
        110        FETCH_DIM_R                                      ~74     !2, !4
        111        SEND_VAL                                                 ~74
        112        DO_ICALL                                         $75     
        113        SEND_VAR                                                 $75
        114        DO_ICALL                                         $76     
        115        CONCAT                                           ~77     ~73, $76
        116        CONCAT                                           ~78     ~77, '%29'
   87   117        CONCAT                                           ~79     ~78, '+at+offset+'
        118        CONCAT                                           ~80     ~79, !4
        119        SEND_VAL                                                 ~80
   88   120        SEND_VAL                                                 1024
        121        DO_ICALL                                                 
   89   122      > RETURN                                                   null
        123*       JMP                                                      ->172
   90   124    >   FETCH_DIM_R                                      ~83     !2, !4
        125        FETCH_OBJ_IS                                     ~82     'LWS'
        126        ISSET_ISEMPTY_DIM_OBJ                         0          ~82, ~83
        127      > JMPZ                                                     ~84, ->153
   91   128    >   PRE_INC                                                  !4
   92   129      > JMP                                                      ->131
        130    >   PRE_INC                                                  !4
        131    >   IS_NOT_IDENTICAL                                 ~87     !4, !3
        132      > JMPZ_EX                                          ~87     ~87, ->137
        133    >   FETCH_DIM_R                                      ~89     !2, !4
        134        FETCH_OBJ_IS                                     ~88     'LWS'
        135        ISSET_ISEMPTY_DIM_OBJ                         0  ~90     ~88, ~89
        136        BOOL                                             ~87     ~90
        137    > > JMPNZ                                                    ~87, ->130
   93   138    >   FETCH_DIM_R                                      ~91     !2, !4
        139        IS_IDENTICAL                                             ~91, '%3B'
        140      > JMPZ                                                     ~92, ->142
        141    >   PRE_INC                                                  !4
   94   142    > > JMP                                                      ->144
        143    >   PRE_INC                                                  !4
        144    >   IS_NOT_IDENTICAL                                 ~95     !4, !3
        145      > JMPZ_EX                                          ~95     ~95, ->150
        146    >   FETCH_DIM_R                                      ~97     !2, !4
        147        FETCH_OBJ_IS                                     ~96     'LWS'
        148        ISSET_ISEMPTY_DIM_OBJ                         0  ~98     ~96, ~97
        149        BOOL                                             ~95     ~98
        150    > > JMPNZ                                                    ~95, ->143
   95   151    > > JMP                                                      ->175
        152*       JMP                                                      ->172
   96   153    >   FETCH_DIM_R                                      ~99     !2, !4
        154        IS_IDENTICAL                                             ~99, '%3B'
        155      > JMPZ                                                     ~100, ->168
   97   156    >   PRE_INC                                                  !4
   98   157      > JMP                                                      ->159
        158    >   PRE_INC                                                  !4
        159    >   IS_SMALLER                                       ~103    !4, !3
        160      > JMPZ_EX                                          ~103    ~103, ->165
        161    >   FETCH_DIM_R                                      ~105    !2, !4
        162        FETCH_OBJ_IS                                     ~104    'LWS'
        163        ISSET_ISEMPTY_DIM_OBJ                         0  ~106    ~104, ~105
        164        BOOL                                             ~103    ~106
        165    > > JMPNZ                                                    ~103, ->158
   99   166    > > JMP                                                      ->175
        167*       JMP                                                      ->172
  101   168    >   POST_INC                                         ~107    !7
        169        FETCH_DIM_R                                      ~109    !2, !4
        170        ASSIGN_DIM                                               !6, ~107
        171        OP_DATA                                                  ~109
   75   172        PRE_INC                                                  !4
        173    >   IS_SMALLER                                               !4, !3
        174      > JMPNZ                                                    ~111, ->81
  106   175    >   IS_IDENTICAL                                     ~112    !5, '%2A'
        176      > JMPZ_EX                                          ~112    ~112, ->179
        177    >   IS_NOT_IDENTICAL                                 ~113    !6, '%2A'
        178        BOOL                                             ~112    ~113
        179    > > JMPZ                                                     ~112, ->187
  107   180    >   INIT_FCALL                                               'trigger_error'
  109   181        CONCAT                                           ~114    'Semantic+error+in+Accept+header+value%3A+%2A%2F', !6
        182        CONCAT                                           ~115    ~11

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
156.91 ms | 1420 KiB | 21 Q