@@ 382-401 (lines=20) @@ | ||
379 | * To finish the block comment, we look for an ending */ pair of characters, |
|
380 | * but we also watch for the end of text before the comment is terminated. |
|
381 | */ |
|
382 | private function blockComment() |
|
383 | { |
|
384 | if ($this->ch !== '*') { |
|
385 | $this->throwSyntaxError('Not a block comment'); |
|
386 | } |
|
387 | ||
388 | do { |
|
389 | $this->next(); |
|
390 | while ($this->ch === '*') { |
|
391 | $this->next('*'); |
|
392 | if ($this->ch === '/') { |
|
393 | $this->next('/'); |
|
394 | ||
395 | return; |
|
396 | } |
|
397 | } |
|
398 | } while ($this->ch); |
|
399 | ||
400 | $this->throwSyntaxError('Unterminated block comment'); |
|
401 | } |
|
402 | ||
403 | /** |
|
404 | * Skip a comment, whether inline or block-level, assuming this is one. |
|
@@ 406-422 (lines=17) @@ | ||
403 | /** |
|
404 | * Skip a comment, whether inline or block-level, assuming this is one. |
|
405 | */ |
|
406 | private function comment() |
|
407 | { |
|
408 | // Comments always begin with a / character. |
|
409 | if ($this->ch !== '/') { |
|
410 | $this->throwSyntaxError('Not a comment'); |
|
411 | } |
|
412 | ||
413 | $this->next('/'); |
|
414 | ||
415 | if ($this->ch === '/') { |
|
416 | $this->inlineComment(); |
|
417 | } elseif ($this->ch === '*') { |
|
418 | $this->blockComment(); |
|
419 | } else { |
|
420 | $this->throwSyntaxError('Unrecognized comment'); |
|
421 | } |
|
422 | } |
|
423 | ||
424 | /** |
|
425 | * Skip whitespace and comments. |