commit e1a46e92504474a8b8816233882b0904f24bb398
parent 4a72b93fb2a066a6e5b771d261f78ce26e0d6d81
Author: Georges Dupéron <georges.duperon@gmail.com>
Date: Wed, 27 Jun 2018 23:37:11 +0200
More notes on what examples to show
Diffstat:
1 file changed, 4 insertions(+), 0 deletions(-)
diff --git a/slides.tex b/slides.tex
@@ -3,11 +3,15 @@ Example of a simple compiler pass for each problem, which makes that problem obv
Big passes:
* null as default and absent
* inter-dependency between pieces of code which generate certain information
+ * list of methods for a class vs. list of classes on which a method is present
Graph manipulation:
* fail to update a reference to an updated element
+ * specialize a method on its receiver type: object or primitive. Update method calls, dispatch for boxed primitives, but forget to update method pointer creation
+ * update methods: indicate whether their receiver can be a primitive type. Update calls to point to the new version, but forget to update the list of methods on the class. Or more devious: update the list of methods, but forget to make the method's ``declaringClass'' field point to the updated class.
* or issues with identity (e.g. Mono.Cecil bug)
* lookup of a key which does not exist anymore, because the node was deleted in the meantime.
+ * remove methods which are dead code, but fail to delete some reference to that name in a list of method names.
Unit tests:
* Write a test for an instruction transformation (unary negation to binary subtraction), show that it requires a class, method, main method etc.