summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2024-09-13 09:23:19 -0700
committerXmiliaH <45106915+XmiliaH@users.noreply.github.com>2024-09-13 18:46:01 +0200
commit703f88dbb2e1e4352a0725b7e742151739b82ea1 (patch)
treea1e541797a02d79c372508a22b7ddabb0f25fdb9
parentce4c47a5bec87ca404fbb49a2d91f34ab6f4e545 (diff)
downloadSimple-703f88dbb2e1e4352a0725b7e742151739b82ea1.tar.gz
Simple-703f88dbb2e1e4352a0725b7e742151739b82ea1.zip
x-x==0
Move x-x==0 to compute. Add x/1 ==> x All chapters
-rw-r--r--chapter04/src/main/java/com/seaofnodes/simple/node/DivNode.java7
-rw-r--r--chapter05/src/main/java/com/seaofnodes/simple/node/DivNode.java7
-rw-r--r--chapter05/src/main/java/com/seaofnodes/simple/node/SubNode.java7
-rw-r--r--chapter06/src/main/java/com/seaofnodes/simple/node/DivNode.java7
-rw-r--r--chapter06/src/main/java/com/seaofnodes/simple/node/SubNode.java7
-rw-r--r--chapter07/src/main/java/com/seaofnodes/simple/node/DivNode.java7
-rw-r--r--chapter07/src/main/java/com/seaofnodes/simple/node/SubNode.java7
-rw-r--r--chapter08/src/main/java/com/seaofnodes/simple/node/DivNode.java7
-rw-r--r--chapter08/src/main/java/com/seaofnodes/simple/node/SubNode.java7
-rw-r--r--chapter09/src/main/java/com/seaofnodes/simple/node/DivNode.java7
-rw-r--r--chapter09/src/main/java/com/seaofnodes/simple/node/SubNode.java7
-rw-r--r--chapter10/src/main/java/com/seaofnodes/simple/node/DivNode.java7
-rw-r--r--chapter10/src/main/java/com/seaofnodes/simple/node/SubNode.java7
-rw-r--r--chapter11/src/main/java/com/seaofnodes/simple/node/DivNode.java7
-rw-r--r--chapter11/src/main/java/com/seaofnodes/simple/node/SubNode.java7
-rw-r--r--chapter12/src/main/java/com/seaofnodes/simple/node/DivNode.java7
-rw-r--r--chapter12/src/main/java/com/seaofnodes/simple/node/SubNode.java8
-rw-r--r--chapter13/src/main/java/com/seaofnodes/simple/node/DivNode.java7
-rw-r--r--chapter13/src/main/java/com/seaofnodes/simple/node/SubNode.java7
-rw-r--r--chapter14/src/main/java/com/seaofnodes/simple/node/DivNode.java7
-rw-r--r--chapter14/src/main/java/com/seaofnodes/simple/node/SubNode.java8
21 files changed, 99 insertions, 50 deletions
diff --git a/chapter04/src/main/java/com/seaofnodes/simple/node/DivNode.java b/chapter04/src/main/java/com/seaofnodes/simple/node/DivNode.java
index 1404c900..3b3a4436 100644
--- a/chapter04/src/main/java/com/seaofnodes/simple/node/DivNode.java
+++ b/chapter04/src/main/java/com/seaofnodes/simple/node/DivNode.java
@@ -31,5 +31,10 @@ public class DivNode extends Node {
}
@Override
- public Node idealize() { return null; }
+ public Node idealize() {
+ // Div of 1.
+ if( in(2)._type.isConstant() && in(2)._type instanceof TypeInteger i && i.value()==1 )
+ return in(1);
+ return null;
+ }
}
diff --git a/chapter05/src/main/java/com/seaofnodes/simple/node/DivNode.java b/chapter05/src/main/java/com/seaofnodes/simple/node/DivNode.java
index bf025453..519a8c8a 100644
--- a/chapter05/src/main/java/com/seaofnodes/simple/node/DivNode.java
+++ b/chapter05/src/main/java/com/seaofnodes/simple/node/DivNode.java
@@ -31,7 +31,12 @@ public class DivNode extends Node {
}
@Override
- public Node idealize() { return null; }
+ public Node idealize() {
+ // Div of 1.
+ if( in(2)._type.isConstant() && in(2)._type instanceof TypeInteger i && i.value()==1 )
+ return in(1);
+ return null;
+ }
@Override Node copy(Node lhs, Node rhs) { return new DivNode(lhs,rhs); }
}
diff --git a/chapter05/src/main/java/com/seaofnodes/simple/node/SubNode.java b/chapter05/src/main/java/com/seaofnodes/simple/node/SubNode.java
index 0d0ed7dc..5e7243ba 100644
--- a/chapter05/src/main/java/com/seaofnodes/simple/node/SubNode.java
+++ b/chapter05/src/main/java/com/seaofnodes/simple/node/SubNode.java
@@ -25,15 +25,14 @@ public class SubNode extends Node {
return TypeInteger.constant(i0.value()-i1.value());
return i0.meet(i1);
}
+ // Sub of same is 0
+ if( in(1)==in(2) )
+ return TypeInteger.ZERO;
return Type.BOTTOM;
}
@Override
public Node idealize() {
- // Sub of same is 0
- if( in(1)==in(2) )
- return new ConstantNode(TypeInteger.constant(0));
-
return null;
}
diff --git a/chapter06/src/main/java/com/seaofnodes/simple/node/DivNode.java b/chapter06/src/main/java/com/seaofnodes/simple/node/DivNode.java
index bf025453..519a8c8a 100644
--- a/chapter06/src/main/java/com/seaofnodes/simple/node/DivNode.java
+++ b/chapter06/src/main/java/com/seaofnodes/simple/node/DivNode.java
@@ -31,7 +31,12 @@ public class DivNode extends Node {
}
@Override
- public Node idealize() { return null; }
+ public Node idealize() {
+ // Div of 1.
+ if( in(2)._type.isConstant() && in(2)._type instanceof TypeInteger i && i.value()==1 )
+ return in(1);
+ return null;
+ }
@Override Node copy(Node lhs, Node rhs) { return new DivNode(lhs,rhs); }
}
diff --git a/chapter06/src/main/java/com/seaofnodes/simple/node/SubNode.java b/chapter06/src/main/java/com/seaofnodes/simple/node/SubNode.java
index 0d0ed7dc..5e7243ba 100644
--- a/chapter06/src/main/java/com/seaofnodes/simple/node/SubNode.java
+++ b/chapter06/src/main/java/com/seaofnodes/simple/node/SubNode.java
@@ -25,15 +25,14 @@ public class SubNode extends Node {
return TypeInteger.constant(i0.value()-i1.value());
return i0.meet(i1);
}
+ // Sub of same is 0
+ if( in(1)==in(2) )
+ return TypeInteger.ZERO;
return Type.BOTTOM;
}
@Override
public Node idealize() {
- // Sub of same is 0
- if( in(1)==in(2) )
- return new ConstantNode(TypeInteger.constant(0));
-
return null;
}
diff --git a/chapter07/src/main/java/com/seaofnodes/simple/node/DivNode.java b/chapter07/src/main/java/com/seaofnodes/simple/node/DivNode.java
index 2213d2e7..7207fd48 100644
--- a/chapter07/src/main/java/com/seaofnodes/simple/node/DivNode.java
+++ b/chapter07/src/main/java/com/seaofnodes/simple/node/DivNode.java
@@ -33,7 +33,12 @@ public class DivNode extends Node {
}
@Override
- public Node idealize() { return null; }
+ public Node idealize() {
+ // Div of 1.
+ if( in(2)._type.isConstant() && in(2)._type instanceof TypeInteger i && i.value()==1 )
+ return in(1);
+ return null;
+ }
@Override Node copy(Node lhs, Node rhs) { return new DivNode(lhs,rhs); }
}
diff --git a/chapter07/src/main/java/com/seaofnodes/simple/node/SubNode.java b/chapter07/src/main/java/com/seaofnodes/simple/node/SubNode.java
index 4a06fcb3..98aa679f 100644
--- a/chapter07/src/main/java/com/seaofnodes/simple/node/SubNode.java
+++ b/chapter07/src/main/java/com/seaofnodes/simple/node/SubNode.java
@@ -27,15 +27,14 @@ public class SubNode extends Node {
return TypeInteger.constant(i0.value()-i1.value());
return i0.meet(i1);
}
+ // Sub of same is 0
+ if( in(1)==in(2) )
+ return TypeInteger.ZERO;
return Type.BOTTOM;
}
@Override
public Node idealize() {
- // Sub of same is 0
- if( in(1)==in(2) )
- return new ConstantNode(TypeInteger.constant(0));
-
return null;
}
diff --git a/chapter08/src/main/java/com/seaofnodes/simple/node/DivNode.java b/chapter08/src/main/java/com/seaofnodes/simple/node/DivNode.java
index 2213d2e7..7207fd48 100644
--- a/chapter08/src/main/java/com/seaofnodes/simple/node/DivNode.java
+++ b/chapter08/src/main/java/com/seaofnodes/simple/node/DivNode.java
@@ -33,7 +33,12 @@ public class DivNode extends Node {
}
@Override
- public Node idealize() { return null; }
+ public Node idealize() {
+ // Div of 1.
+ if( in(2)._type.isConstant() && in(2)._type instanceof TypeInteger i && i.value()==1 )
+ return in(1);
+ return null;
+ }
@Override Node copy(Node lhs, Node rhs) { return new DivNode(lhs,rhs); }
}
diff --git a/chapter08/src/main/java/com/seaofnodes/simple/node/SubNode.java b/chapter08/src/main/java/com/seaofnodes/simple/node/SubNode.java
index 4a06fcb3..98aa679f 100644
--- a/chapter08/src/main/java/com/seaofnodes/simple/node/SubNode.java
+++ b/chapter08/src/main/java/com/seaofnodes/simple/node/SubNode.java
@@ -27,15 +27,14 @@ public class SubNode extends Node {
return TypeInteger.constant(i0.value()-i1.value());
return i0.meet(i1);
}
+ // Sub of same is 0
+ if( in(1)==in(2) )
+ return TypeInteger.ZERO;
return Type.BOTTOM;
}
@Override
public Node idealize() {
- // Sub of same is 0
- if( in(1)==in(2) )
- return new ConstantNode(TypeInteger.constant(0));
-
return null;
}
diff --git a/chapter09/src/main/java/com/seaofnodes/simple/node/DivNode.java b/chapter09/src/main/java/com/seaofnodes/simple/node/DivNode.java
index ba06d037..08ce70b8 100644
--- a/chapter09/src/main/java/com/seaofnodes/simple/node/DivNode.java
+++ b/chapter09/src/main/java/com/seaofnodes/simple/node/DivNode.java
@@ -32,7 +32,12 @@ public class DivNode extends Node {
}
@Override
- public Node idealize() { return null; }
+ public Node idealize() {
+ // Div of 1.
+ if( in(2)._type.isConstant() && in(2)._type instanceof TypeInteger i && i.value()==1 )
+ return in(1);
+ return null;
+ }
@Override Node copy(Node lhs, Node rhs) { return new DivNode(lhs,rhs); }
}
diff --git a/chapter09/src/main/java/com/seaofnodes/simple/node/SubNode.java b/chapter09/src/main/java/com/seaofnodes/simple/node/SubNode.java
index ce83122c..7273c02a 100644
--- a/chapter09/src/main/java/com/seaofnodes/simple/node/SubNode.java
+++ b/chapter09/src/main/java/com/seaofnodes/simple/node/SubNode.java
@@ -26,15 +26,14 @@ public class SubNode extends Node {
if (i0.isConstant() && i1.isConstant())
return TypeInteger.constant(i0.value()-i1.value());
}
+ // Sub of same is 0
+ if( in(1)==in(2) )
+ return TypeInteger.ZERO;
return in(1)._type.meet(in(2)._type);
}
@Override
public Node idealize() {
- // Sub of same is 0
- if( in(1)==in(2) )
- return new ConstantNode(TypeInteger.constant(0));
-
return null;
}
diff --git a/chapter10/src/main/java/com/seaofnodes/simple/node/DivNode.java b/chapter10/src/main/java/com/seaofnodes/simple/node/DivNode.java
index ba06d037..08ce70b8 100644
--- a/chapter10/src/main/java/com/seaofnodes/simple/node/DivNode.java
+++ b/chapter10/src/main/java/com/seaofnodes/simple/node/DivNode.java
@@ -32,7 +32,12 @@ public class DivNode extends Node {
}
@Override
- public Node idealize() { return null; }
+ public Node idealize() {
+ // Div of 1.
+ if( in(2)._type.isConstant() && in(2)._type instanceof TypeInteger i && i.value()==1 )
+ return in(1);
+ return null;
+ }
@Override Node copy(Node lhs, Node rhs) { return new DivNode(lhs,rhs); }
}
diff --git a/chapter10/src/main/java/com/seaofnodes/simple/node/SubNode.java b/chapter10/src/main/java/com/seaofnodes/simple/node/SubNode.java
index 7be53b68..53f90dd6 100644
--- a/chapter10/src/main/java/com/seaofnodes/simple/node/SubNode.java
+++ b/chapter10/src/main/java/com/seaofnodes/simple/node/SubNode.java
@@ -26,15 +26,14 @@ public class SubNode extends Node {
if (i0.isConstant() && i1.isConstant())
return TypeInteger.constant(i0.value()-i1.value());
}
+ // Sub of same is 0
+ if( in(1)==in(2) )
+ return TypeInteger.ZERO;
return in(1)._type.meet(in(2)._type);
}
@Override
public Node idealize() {
- // Sub of same is 0
- if( in(1)==in(2) )
- return new ConstantNode(TypeInteger.constant(0));
-
// x - (-y) is x+y
if( in(2) instanceof MinusNode minus )
return new AddNode(in(1),minus.in(1));
diff --git a/chapter11/src/main/java/com/seaofnodes/simple/node/DivNode.java b/chapter11/src/main/java/com/seaofnodes/simple/node/DivNode.java
index ba06d037..08ce70b8 100644
--- a/chapter11/src/main/java/com/seaofnodes/simple/node/DivNode.java
+++ b/chapter11/src/main/java/com/seaofnodes/simple/node/DivNode.java
@@ -32,7 +32,12 @@ public class DivNode extends Node {
}
@Override
- public Node idealize() { return null; }
+ public Node idealize() {
+ // Div of 1.
+ if( in(2)._type.isConstant() && in(2)._type instanceof TypeInteger i && i.value()==1 )
+ return in(1);
+ return null;
+ }
@Override Node copy(Node lhs, Node rhs) { return new DivNode(lhs,rhs); }
}
diff --git a/chapter11/src/main/java/com/seaofnodes/simple/node/SubNode.java b/chapter11/src/main/java/com/seaofnodes/simple/node/SubNode.java
index 7137f38e..128678a7 100644
--- a/chapter11/src/main/java/com/seaofnodes/simple/node/SubNode.java
+++ b/chapter11/src/main/java/com/seaofnodes/simple/node/SubNode.java
@@ -27,15 +27,14 @@ public class SubNode extends Node {
if (i0.isConstant() && i1.isConstant())
return TypeInteger.constant(i0.value()-i1.value());
}
+ // Sub of same is 0
+ if( in(1)==in(2) )
+ return TypeInteger.ZERO;
return in(1)._type.meet(in(2)._type);
}
@Override
public Node idealize() {
- // Sub of same is 0
- if( in(1)==in(2) )
- return Parser.ZERO;
-
// x - (-y) is x+y
if( in(2) instanceof MinusNode minus )
return new AddNode(in(1),minus.in(1));
diff --git a/chapter12/src/main/java/com/seaofnodes/simple/node/DivNode.java b/chapter12/src/main/java/com/seaofnodes/simple/node/DivNode.java
index a3845d89..e0c95019 100644
--- a/chapter12/src/main/java/com/seaofnodes/simple/node/DivNode.java
+++ b/chapter12/src/main/java/com/seaofnodes/simple/node/DivNode.java
@@ -32,7 +32,12 @@ public class DivNode extends Node {
}
@Override
- public Node idealize() { return null; }
+ public Node idealize() {
+ // Div of 1.
+ if( in(2)._type.isConstant() && in(2)._type instanceof TypeInteger i && i.value()==1 )
+ return in(1);
+ return null;
+ }
@Override Node copy(Node lhs, Node rhs) { return new DivNode(lhs,rhs); }
@Override Node copyF() { return new DivFNode(null,null); }
diff --git a/chapter12/src/main/java/com/seaofnodes/simple/node/SubNode.java b/chapter12/src/main/java/com/seaofnodes/simple/node/SubNode.java
index 33b6a162..8bebe774 100644
--- a/chapter12/src/main/java/com/seaofnodes/simple/node/SubNode.java
+++ b/chapter12/src/main/java/com/seaofnodes/simple/node/SubNode.java
@@ -27,15 +27,15 @@ public class SubNode extends Node {
if (i0.isConstant() && i1.isConstant())
return TypeInteger.constant(i0.value()-i1.value());
}
+ // Sub of same is 0
+ if( in(1)==in(2) )
+ return TypeInteger.ZERO;
+
return in(1)._type.meet(in(2)._type);
}
@Override
public Node idealize() {
- // Sub of same is 0
- if( in(1)==in(2) )
- return Parser.ZERO;
-
// x - (-y) is x+y
if( in(2) instanceof MinusNode minus )
return new AddNode(in(1),minus.in(1));
diff --git a/chapter13/src/main/java/com/seaofnodes/simple/node/DivNode.java b/chapter13/src/main/java/com/seaofnodes/simple/node/DivNode.java
index a3845d89..e0c95019 100644
--- a/chapter13/src/main/java/com/seaofnodes/simple/node/DivNode.java
+++ b/chapter13/src/main/java/com/seaofnodes/simple/node/DivNode.java
@@ -32,7 +32,12 @@ public class DivNode extends Node {
}
@Override
- public Node idealize() { return null; }
+ public Node idealize() {
+ // Div of 1.
+ if( in(2)._type.isConstant() && in(2)._type instanceof TypeInteger i && i.value()==1 )
+ return in(1);
+ return null;
+ }
@Override Node copy(Node lhs, Node rhs) { return new DivNode(lhs,rhs); }
@Override Node copyF() { return new DivFNode(null,null); }
diff --git a/chapter13/src/main/java/com/seaofnodes/simple/node/SubNode.java b/chapter13/src/main/java/com/seaofnodes/simple/node/SubNode.java
index 33b6a162..0f2deb33 100644
--- a/chapter13/src/main/java/com/seaofnodes/simple/node/SubNode.java
+++ b/chapter13/src/main/java/com/seaofnodes/simple/node/SubNode.java
@@ -27,14 +27,15 @@ public class SubNode extends Node {
if (i0.isConstant() && i1.isConstant())
return TypeInteger.constant(i0.value()-i1.value());
}
+ // Sub of same is 0
+ if( in(1)==in(2) )
+ return TypeInteger.ZERO;
+
return in(1)._type.meet(in(2)._type);
}
@Override
public Node idealize() {
- // Sub of same is 0
- if( in(1)==in(2) )
- return Parser.ZERO;
// x - (-y) is x+y
if( in(2) instanceof MinusNode minus )
diff --git a/chapter14/src/main/java/com/seaofnodes/simple/node/DivNode.java b/chapter14/src/main/java/com/seaofnodes/simple/node/DivNode.java
index 0d169cda..da9571db 100644
--- a/chapter14/src/main/java/com/seaofnodes/simple/node/DivNode.java
+++ b/chapter14/src/main/java/com/seaofnodes/simple/node/DivNode.java
@@ -35,7 +35,12 @@ public class DivNode extends Node {
}
@Override
- public Node idealize() { return null; }
+ public Node idealize() {
+ // Div of 1.
+ if( in(2)._type.isConstant() && in(2)._type instanceof TypeInteger i && i.value()==1 )
+ return in(1);
+ return null;
+ }
@Override Node copy(Node lhs, Node rhs) { return new DivNode(lhs,rhs); }
@Override Node copyF() { return new DivFNode(null,null); }
diff --git a/chapter14/src/main/java/com/seaofnodes/simple/node/SubNode.java b/chapter14/src/main/java/com/seaofnodes/simple/node/SubNode.java
index 89e7227e..009fb30e 100644
--- a/chapter14/src/main/java/com/seaofnodes/simple/node/SubNode.java
+++ b/chapter14/src/main/java/com/seaofnodes/simple/node/SubNode.java
@@ -30,15 +30,15 @@ public class SubNode extends Node {
if (i1.isConstant() && i2.isConstant())
return TypeInteger.constant(i1.value()-i2.value());
}
+ // Sub of same is 0
+ if( in(1)==in(2) )
+ return TypeInteger.ZERO;
+
return TypeInteger.BOT;
}
@Override
public Node idealize() {
- // Sub of same is 0
- if( in(1)==in(2) )
- return Parser.ZERO;
-
// x - (-y) is x+y
if( in(2) instanceof MinusNode minus )
return new AddNode(in(1),minus.in(1));