From 0766039bd9e6b9f5e6334e84666f5be698d41fc3 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Fri, 17 Mar 2023 01:35:04 +0900 Subject: feat(nuldoc): implement syntax highlight --- .../phperkaigi-2023-unused-token-quiz-3/index.html | 154 ++++++++++----------- 1 file changed, 77 insertions(+), 77 deletions(-) (limited to 'public/posts/2023-01-10') diff --git a/public/posts/2023-01-10/phperkaigi-2023-unused-token-quiz-3/index.html b/public/posts/2023-01-10/phperkaigi-2023-unused-token-quiz-3/index.html index ab47b2b..61d9880 100644 --- a/public/posts/2023-01-10/phperkaigi-2023-unused-token-quiz-3/index.html +++ b/public/posts/2023-01-10/phperkaigi-2023-unused-token-quiz-3/index.html @@ -10,7 +10,7 @@ PHPerKaigi 2023: ボツになったトークン問題 その 3 | REPL: Rest-Eat-Program Loop - +
@@ -92,24 +92,24 @@ 注意: これはボツ問なので、得られたトークンを PHPerKaigi で入力してもポイントにはならない。

-
<?php
-try {
-  f(g() / __LINE__);
-} catch (Throwable $e) {
-  while ($e = $e->getPrevious()) printf('%c', $e->getLine() + 23);
-  echo "\n";
+            
<?php
+try {
+  f(g() / __LINE__);
+} catch (Throwable $e) {
+  while ($e = $e->getPrevious()) printf('%c', $e->getLine() + 23);
+  echo "\n";
 }
-function f(int $i) {
-  if ($i < 0) f();
-  try {
-    match ($i) {
-      0 => 0 / 0,
+function f(int $i) {
+  if ($i < 0) f();
+  try {
+    match ($i) {
+      0 => 0 / 0,
 
 
 
-      15, 36 => 0 / 0,
-      14 => 0 / 0,
-      37 => 0 / 0,
+      15, 36 => 0 / 0,
+      14 => 0 / 0,
+      37 => 0 / 0,
 
 
 
@@ -120,16 +120,16 @@ function f(int $i) {
 
 
 
-      6 => 0 / 0,
+      6 => 0 / 0,
 
-      5 => 0 / 0,
+      5 => 0 / 0,
 
-      22 => 0 / 0,
+      22 => 0 / 0,
 
 
 
 
-      34, 35 => 0 / 0,
+      34, 35 => 0 / 0,
 
 
 
@@ -138,10 +138,10 @@ function f(int $i) {
 
 
 
-      25 => 0 / 0,
-      17, 21 => 0 / 0,
+      25 => 0 / 0,
+      17, 21 => 0 / 0,
 
-      24, 32 => 0 / 0,
+      24, 32 => 0 / 0,
 
 
 
@@ -149,12 +149,12 @@ function f(int $i) {
 
 
 
-      33 => 0 / 0,
+      33 => 0 / 0,
 
-      16 => 0 / 0,
+      16 => 0 / 0,
 
 
-      18 => 0 / 0,
+      18 => 0 / 0,
 
 
 
@@ -163,35 +163,35 @@ function f(int $i) {
 
 
 
-      7 => 0 / 0,
+      7 => 0 / 0,
 
-      2 => 0 / 0,
-      1, 20 => 0 / 0,
-      10, 28 => 0 / 0,
-      8, 12, 26 => 0 / 0,
-      4, 9, 13 => 0 / 0,
+      2 => 0 / 0,
+      1, 20 => 0 / 0,
+      10, 28 => 0 / 0,
+      8, 12, 26 => 0 / 0,
+      4, 9, 13 => 0 / 0,
 
 
 
 
 
-      31 => 0 / 0,
+      31 => 0 / 0,
 
-      29 => 0 / 0,
+      29 => 0 / 0,
 
-      11 => 0 / 0,
+      11 => 0 / 0,
 
 
 
-      3, 19, 23 => 0 / 0,
+      3, 19, 23 => 0 / 0,
 
 
-      27 => 0 / 0,
+      27 => 0 / 0,
 
-      30 => 0 / 0,
+      30 => 0 / 0,
     };
-  } finally {
-    f($i - 1);
+  } finally {
+    f($i - 1);
   }
 }
 
@@ -201,8 +201,8 @@ function f(int $i) {
 
 
 
-function g() {
-  return __LINE__;
+function g() {
+  return __LINE__;
 }

@@ -247,19 +247,19 @@ function g() { このうち 1つ目のケースは、finally節の中でエラーを投げると PHP 処理系が勝手に$previousを設定してくれる。

-
<?php
+              
<?php
 
-try {
-  try {
-    throw new Exception("Error 1");
-  } finally {
-    throw new Exception("Error 2");
+try {
+  try {
+    throw new Exception("Error 1");
+  } finally {
+    throw new Exception("Error 2");
   }
-} catch (Exception $e) {
-  echo $e->getMessage() . PHP_EOL;
-  // => Error 2
-  echo $e->getPrevious()->getMessage() . PHP_EOL;
-  // => Error 1
+} catch (Exception $e) {
+  echo $e->getMessage() . PHP_EOL;
+  // => Error 2
+  echo $e->getPrevious()->getMessage() . PHP_EOL;
+  // => Error 1
 }

@@ -273,14 +273,14 @@ try { 出力部をコメントや改行を追加して再掲する:

-
<?php
-try {
-  f(g() / __LINE__);
-} catch (Throwable $e) {
-  while ($e = $e->getPrevious()) {
-    printf('%c', $e->getLine() + 23);
+              
<?php
+try {
+  f(g() / __LINE__);
+} catch (Throwable $e) {
+  while ($e = $e->getPrevious()) {
+    printf('%c', $e->getLine() + 23);
   }
-  echo "\n";
+  echo "\n";
 }

@@ -291,7 +291,7 @@ try { フォーマット指定子%cは、整数を ASCII コードと見做して印字する。トークン#base64_decode('SGVsbG8sIFdvcmxkIQ==')bであれば、ASCII コード98なので、75 行目で発生したエラー、

-
1, 20 => 0 / 0,
+
1, 20 => 0 / 0,

によって表現されている。エラーを起こす方法はいろいろと考えられるが、今回はゼロ除算を使った。 @@ -308,24 +308,24 @@ try { f()の定義を再掲する (エラーオブジェクトの行数を利用しているので、一部分だけ抜き出すと値が変わることに注意):

-
function f(int $i) {
-  if ($i < 0) f();
-  try {
-    match ($i) {
-      0 => 0 / 0, // 12 行目
+              
function f(int $i) {
+  if ($i < 0) f();
+  try {
+    match ($i) {
+      0 => 0 / 0, // 12 行目
 
 
 
-      15, 36 => 0 / 0,
-      14 => 0 / 0,
-      37 => 0 / 0,
+      15, 36 => 0 / 0,
+      14 => 0 / 0,
+      37 => 0 / 0,
 
-      // (略)
+      // (略)
 
-      30 => 0 / 0, // 97 行目
+      30 => 0 / 0, // 97 行目
     };
-  } finally {
-    f($i - 1);
+  } finally {
+    f($i - 1);
   }
 }
@@ -333,12 +333,12 @@ try { 前述のように、finally節でエラーを投げると PHP 処理系が$previousを設定する。ここでは、エラーを繋げるためにf()を再帰呼び出ししている。最初にf()を呼び出している箇所を確認すると、

-
<?php
-try {
-  f(g() / __LINE__); // 3 行目
+
<?php
+try {
+  f(g() / __LINE__); // 3 行目
-
function g() {
-  return __LINE__; // 111 行目
+              
function g() {
+  return __LINE__; // 111 行目
 }

-- cgit v1.2.3-70-g09d2