com presentations: Added uncommitted extra exercise slides: deepdive-dpc19.xml slides/internals/exercise-strict-switch.xml slides/internals/switch-confusion.xml slides/internals/switch-followup.xml slides/internals/switch.xml slides/xdebug/derick-new-512x512.jpg

[email protected] (Derick Rethans) Wed, 02 Oct 2019 09:05:05 +0000
Newsgroups php.pres
Message-ID <[email protected]>
Commit:    c2230559db8c8ddad000d91f7e0f43877c685db7
Author:    Derick Rethans <[email protected]>         Wed, 2 Oct 2019 10:05:05 +0100
Parents:   de760ece87e97cb9daf8bfecb665bd25289a5426
Branches:  master

Link:       http://git.php.net/?p=presentations.git;a=commitdiff;h=c2230559db8c8ddad000d91f7e0f43877c685db7

Log:
Added uncommitted extra exercise slides

Changed paths:
  M  deepdive-dpc19.xml
  A  slides/internals/exercise-strict-switch.xml
  A  slides/internals/switch-confusion.xml
  A  slides/internals/switch-followup.xml
  A  slides/internals/switch.xml
  A  slides/xdebug/derick-new-512x512.jpg


Diff:
diff --git a/deepdive-dpc19.xml b/deepdive-dpc19.xml
index 212f6ae1..c8c4ed7f 100644
--- a/deepdive-dpc19.xml
+++ b/deepdive-dpc19.xml
@@ -76,6 +76,12 @@ Opcodes
 <slide>slides/internals/loops.xml</slide>
 <slide>slides/internals/jumps-complex-dot.xml</slide>
 
+<!-- EXERCISE: STRICT SWITCH -->
+<slide>slides/internals/switch-confusion.xml</slide>
+<slide>slides/internals/switch.xml</slide>
+<slide>slides/internals/exercise-strict-switch.xml</slide>
+<slide>slides/internals/switch-followup.xml</slide>
+
 <!--
 Try/Catch nonsense
 - FASTCALL/FASTRET
diff --git a/slides/internals/exercise-strict-switch.xml b/slides/internals/exercise-strict-switch.xml
new file mode 100644
index 00000000..aaf82386
--- /dev/null
+++ b/slides/internals/exercise-strict-switch.xml
@@ -0,0 +1,10 @@
+<slide>
+<title>Exercise: Make %switch% Strict</title>
+
+<list>
+	<bullet>%IS_EQUAL% vs. %IS_IDENTICAL%</bullet>
+	<bullet>The %zend_compile_switch% function in %Zend/zend_compile.c% compiles the AST node</bullet>
+	<bullet>Change the behaviour, compile, and run the tests</bullet>
+</list>
+
+</slide>
diff --git a/slides/internals/switch-confusion.xml b/slides/internals/switch-confusion.xml
new file mode 100644
index 00000000..3f453dcb
--- /dev/null
+++ b/slides/internals/switch-confusion.xml
@@ -0,0 +1,17 @@
+<slide>
+<title>Switch?</title>
+
+<example result="1"><![CDATA[<?php
+$t = 'false';
+
+switch ($t) {
+    case true:
+        echo 'true';
+        break;
+
+    case false:
+        echo 'false';
+        break;
+}
+?>]]></example>
+</slide>
diff --git a/slides/internals/switch-followup.xml b/slides/internals/switch-followup.xml
new file mode 100644
index 00000000..fc3e44ed
--- /dev/null
+++ b/slides/internals/switch-followup.xml
@@ -0,0 +1,41 @@
+<slide>
+<title>Switch follow-up</title>
+
+<example inline="1">&amp;lt;?php
+function foo()
+{
+    return '42';
+}
+
+switch (foo()) {
+    case true:
+        die('true');
+
+    case 42:
+        die('42');
+
+    case '42':
+        die("'42'");
+}</example>
+
+<div effect="fade-in">
+<example inline="2">
+line     #* E I O op              return  operands
+   2     0  E >   NOP                     
+   7     1        INIT_FCALL              'foo'
+         2        DO_UCALL        *$0*      
+         3        *CASE*            ~1      $0, &amp;lt;true>
+         4      > JMPNZ                   ~1, ->10
+  11     5    >   *CASE*            ~1      $0, 42
+         6      > JMPNZ                   ~1, ->11
+  14     7    >   *CASE*            ~1      $0, '42'
+         8      > JMPNZ                   ~1, ->12
+         9    > > JMP                     ->13
+   9    10    > > EXIT                    'true'
+  12    11    > > EXIT                    '42'
+  15    12    > > EXIT                    '%2742%27'
+        13    >   FREE                    $0
+  17    14      > RETURN                  1
+</example>
+</div>
+</slide>
diff --git a/slides/internals/switch.xml b/slides/internals/switch.xml
new file mode 100644
index 00000000..9fe7c1c0
--- /dev/null
+++ b/slides/internals/switch.xml
@@ -0,0 +1,39 @@
+<slide>
+<title>Switch</title>
+
+<example inline="1">&amp;lt;?php
+$variable = '42';
+
+switch ($variable) {
+    case true:
+        die('true');
+
+    case 42:
+        die('42');
+
+    case '42':
+        die("'42'");
+}
+</example>
+
+<example inline="1">
+compiled vars:  !0 = $variable
+line     #* E I O op              return  operands
+
+   2     0  E >   EXT_STMT                
+         1        ASSIGN                  !0, '42'
+   4     2        EXT_STMT                
+         3      > JMPNZ                   !0, ->8
+   8     4    >   IS_EQUAL        ~1      !0, 42
+         5      > JMPNZ                   ~1, ->10
+  11     6    >   IS_EQUAL        ~1      !0, '42'
+         7      > JMPZNZ                  ~1, ->14, ->12
+   6     8    >   EXT_STMT                
+         9      > EXIT                    'true'
+   9    10    >   EXT_STMT                
+        11      > EXIT                    '42'
+  12    12    >   EXT_STMT                
+        13      > EXIT                    '%%%2742%27'
+  14    14    > > RETURN                  1
+</example>
+</slide>
diff --git a/slides/xdebug/derick-new-512x512.jpg b/slides/xdebug/derick-new-512x512.jpg
new file mode 100644
index 00000000..478ec3a9
Binary files /dev/null and b/slides/xdebug/derick-new-512x512.jpg differ