From f5901c5ecc05a2a813cf4243081264e61cac9e1c Mon Sep 17 00:00:00 2001 From: Leonardo Moreira Date: Thu, 24 Nov 2016 08:23:31 -0200 Subject: [PATCH 1/6] Testes-Moreira --- testes/BasicTeste.java | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/testes/BasicTeste.java b/testes/BasicTeste.java index 92b7994..b7db422 100644 --- a/testes/BasicTeste.java +++ b/testes/BasicTeste.java @@ -1,11 +1,16 @@ -import java.io.IOException; -import java.util.Collection; -import java.util.Map; -import java.util.NavigableMap; -import java.util.Optional; -import java.util.TreeMap; - -public class IntervalSet> -{ - +class BasicTeste { + int teste() + { + int x = 1; + if(x == 1) + {return true;} + else{return false;} + } + + void deadCode() + { + int x = 1; + x = 2; + x = 3; + } } \ No newline at end of file From 21006cd7bcd1afcec2dd599fa1bc040ba6773aa5 Mon Sep 17 00:00:00 2001 From: Leonardo Moreira Date: Wed, 7 Dec 2016 23:26:27 -0200 Subject: [PATCH 2/6] =?UTF-8?q?Elimina=C3=A7=C3=A3o=20de=20atribui=C3=A7?= =?UTF-8?q?=C3=B5es=20sem=20efeito?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/DeadCode.rsc | 31 ++++++++++++++++++++++--------- testes/DeadCodeExamples.java | 5 +++-- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/DeadCode.rsc b/src/DeadCode.rsc index 702574a..c402471 100644 --- a/src/DeadCode.rsc +++ b/src/DeadCode.rsc @@ -10,18 +10,31 @@ Base: Live variables do livro Principles of Progam Analysis */ -int countAssignment(CompilationUnit unit) { - int res = 0; - +bool CheckExpUse(Identifier left, CompilationUnit unit) { + bool res = false; visit(unit) { - case (Assignment) ` ` : { res += 1; } - + case (Assignment)` `: { + println("*********"); + print(left); print("--"); + print(y); print("==="); + res = (left == y); + } } return res; } +/* CompilationUnit removeDeadAssignment(CompilationUnit unit) = visit(unit){ - case (Assignment) ` ` => - (Assignment) ` 22` - -}; \ No newline at end of file + case (Assignment) ` ` => + (Assignment) ` 22` when CheckExpUse(leftExp, rightExp) +}; +*/ + +CompilationUnit removeDeadAssignment(CompilationUnit unit) = visit(unit){ + case (Assignment) ` ` => + (Assignment) ` ` when CheckExpUse(leftId, unit) + + case (Assignment) ` ` => + (Assignment) ` eliminado` when !CheckExpUse(leftId, unit) +}; + diff --git a/testes/DeadCodeExamples.java b/testes/DeadCodeExamples.java index e89a317..1f5351c 100644 --- a/testes/DeadCodeExamples.java +++ b/testes/DeadCodeExamples.java @@ -10,8 +10,9 @@ int teste() void deadCode() { int x = 1,y; - x = 2; - x = 3; y = 4; + x = 2; + x = y; + } } \ No newline at end of file From 62c38af4810ec0452766c7b26eae9612545a13fb Mon Sep 17 00:00:00 2001 From: Leonardo Moreira Date: Thu, 8 Dec 2016 00:29:26 -0200 Subject: [PATCH 3/6] Verificando qquando a variavel atribuida eh parametro da chamada de um metodo --- src/DeadCode.rsc | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/src/DeadCode.rsc b/src/DeadCode.rsc index c402471..b6eb183 100644 --- a/src/DeadCode.rsc +++ b/src/DeadCode.rsc @@ -10,31 +10,35 @@ Base: Live variables do livro Principles of Progam Analysis */ -bool CheckExpUse(Identifier left, CompilationUnit unit) { +bool checkExpUse(Identifier left, CompilationUnit unit) { bool res = false; - visit(unit) { + top-down-break visit(unit) { case (Assignment)` `: { - println("*********"); - print(left); print("--"); - print(y); print("==="); res = (left == y); - } + } + + case (Assignment)` `:{ + res = checkMethodArgs(m, left); + } } return res; } -/* -CompilationUnit removeDeadAssignment(CompilationUnit unit) = visit(unit){ - case (Assignment) ` ` => - (Assignment) ` 22` when CheckExpUse(leftExp, rightExp) -}; -*/ +bool checkMethodArgs(MethodInvocation m, Identifier left){ + bool res = false; + top-down-break visit(m){ + case (MethodInvocation)`()`: { + res = (arg == left); + } + } + return res; +} + CompilationUnit removeDeadAssignment(CompilationUnit unit) = visit(unit){ + case (Assignment) ` ` => - (Assignment) ` ` when CheckExpUse(leftId, unit) + (Assignment) ` eliminado` when !checkExpUse(leftId, unit) - case (Assignment) ` ` => - (Assignment) ` eliminado` when !CheckExpUse(leftId, unit) }; From e2cbb41218be24c31653cd83b9f967aa69e34b6e Mon Sep 17 00:00:00 2001 From: Leonardo Moreira Date: Thu, 8 Dec 2016 00:30:07 -0200 Subject: [PATCH 4/6] PostIncrement --- src/DeadCode.rsc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/DeadCode.rsc b/src/DeadCode.rsc index b6eb183..fa16077 100644 --- a/src/DeadCode.rsc +++ b/src/DeadCode.rsc @@ -40,5 +40,7 @@ CompilationUnit removeDeadAssignment(CompilationUnit unit) = visit(unit){ case (Assignment) ` ` => (Assignment) ` eliminado` when !checkExpUse(leftId, unit) + case (PostfixExpression) `` => + (PostfixExpression) `eliminado` when !checkExpUse(pExp, unit) }; From c723d926f6a2dbb2e92d6f7660b1811783d42f55 Mon Sep 17 00:00:00 2001 From: Leonardo Moreira Date: Thu, 8 Dec 2016 00:41:47 -0200 Subject: [PATCH 5/6] Casos de deadCode --- src/DeadCode.rsc | 1 + testes/DeadCodeExamples.java | 15 +++++++-------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/DeadCode.rsc b/src/DeadCode.rsc index fa16077..01008ae 100644 --- a/src/DeadCode.rsc +++ b/src/DeadCode.rsc @@ -42,5 +42,6 @@ CompilationUnit removeDeadAssignment(CompilationUnit unit) = visit(unit){ case (PostfixExpression) `` => (PostfixExpression) `eliminado` when !checkExpUse(pExp, unit) + }; diff --git a/testes/DeadCodeExamples.java b/testes/DeadCodeExamples.java index 1f5351c..bb71cc7 100644 --- a/testes/DeadCodeExamples.java +++ b/testes/DeadCodeExamples.java @@ -1,18 +1,17 @@ class DeadCodeExamples { - int teste() + int teste(int var) { - int x = 1; - if(x == 1) - {return true;} - else{return false;} + return var; } - void deadCode() + void casos() { - int x = 1,y; + int x,y,z; + + //Teste 1 - eliminando atribuicoes y = 4; x = 2; - x = y; + z = 4; } } \ No newline at end of file From 58d1f5db5946773a1c6830c7b32d5373339958b6 Mon Sep 17 00:00:00 2001 From: Leonardo Moreira Date: Thu, 8 Dec 2016 00:47:02 -0200 Subject: [PATCH 6/6] Mais alguns casos de teste --- testes/DeadCodeExamples.java | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/testes/DeadCodeExamples.java b/testes/DeadCodeExamples.java index bb71cc7..0a17296 100644 --- a/testes/DeadCodeExamples.java +++ b/testes/DeadCodeExamples.java @@ -9,9 +9,33 @@ void casos() int x,y,z; //Teste 1 - eliminando atribuicoes + /* y = 4; x = 2; z = 4; + */ + + //Teste 2 - preservando alguma coisa + /* + y = 4; + x = 2; + z = y; + */ + + //Teste 3 - variavel usada como parametro + /* + y = 4; + x = 2; + z = teste(y); + */ + + //Teste 4 - PostfixExpression + + y = 4; + x = 2; + z = y; + y++; + x++; } } \ No newline at end of file