summaryrefslogtreecommitdiff
path: root/chapter05/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'chapter05/src/main/java')
-rw-r--r--chapter05/src/main/java/com/seaofnodes/simple/Parser.java11
-rw-r--r--chapter05/src/main/java/com/seaofnodes/simple/node/Node.java11
2 files changed, 8 insertions, 14 deletions
diff --git a/chapter05/src/main/java/com/seaofnodes/simple/Parser.java b/chapter05/src/main/java/com/seaofnodes/simple/Parser.java
index 3de0e9b8..99d38686 100644
--- a/chapter05/src/main/java/com/seaofnodes/simple/Parser.java
+++ b/chapter05/src/main/java/com/seaofnodes/simple/Parser.java
@@ -13,7 +13,6 @@ import java.util.*;
* This is a simple recursive descent parser. All lexical analysis is done here as well.
*/
public class Parser {
-
/**
* A Global Static, unique to each compilation. This is a public, so we
@@ -88,14 +87,14 @@ public class Parser {
public StopNode parse() { return parse(false); }
public StopNode parse(boolean show) {
- _xScopes.push(_scope);
+ _xScopes.push(_scope);
// Enter a new scope for the initial control and arguments
_scope.push();
_scope.define(ScopeNode.CTRL, new ProjNode(START, 0, ScopeNode.CTRL).peephole());
_scope.define(ScopeNode.ARG0, new ProjNode(START, 1, ScopeNode.ARG0).peephole());
parseBlock();
_scope.pop();
- _xScopes.pop();
+ _xScopes.pop();
if (!_lexer.isEOF()) throw error("Syntax error, unexpected " + _lexer.getAnyNextToken());
STOP.peephole();
if( show ) showGraph();
@@ -152,7 +151,7 @@ public class Parser {
// Parse predicate
var pred = require(parseExpression(), ")");
// IfNode takes current control and predicate
- IfNode ifNode = (IfNode)new IfNode(ctrl(), pred).peephole();
+ IfNode ifNode = (IfNode)new IfNode(ctrl(), pred).<IfNode>keep().peephole();
// Setup projection nodes
Node ifT = new ProjNode(ifNode, 0, "True" ).peephole();
Node ifF = new ProjNode(ifNode, 1, "False").peephole();
@@ -268,10 +267,10 @@ public class Parser {
var lhs = parseAddition();
if (match("==")) return new BoolNode.EQ(lhs, parseComparison()).peephole();
if (match("!=")) return new NotNode(new BoolNode.EQ(lhs, parseComparison()).peephole()).peephole();
- if (match("<" )) return new BoolNode.LT(lhs, parseComparison()).peephole();
if (match("<=")) return new BoolNode.LE(lhs, parseComparison()).peephole();
- if (match(">" )) return new BoolNode.LT(parseComparison(), lhs).peephole();
+ if (match("<" )) return new BoolNode.LT(lhs, parseComparison()).peephole();
if (match(">=")) return new BoolNode.LE(parseComparison(), lhs).peephole();
+ if (match(">" )) return new BoolNode.LT(parseComparison(), lhs).peephole();
return lhs;
}
diff --git a/chapter05/src/main/java/com/seaofnodes/simple/node/Node.java b/chapter05/src/main/java/com/seaofnodes/simple/node/Node.java
index 3b841d8c..810f931b 100644
--- a/chapter05/src/main/java/com/seaofnodes/simple/node/Node.java
+++ b/chapter05/src/main/java/com/seaofnodes/simple/node/Node.java
@@ -81,10 +81,7 @@ public abstract class Node {
// line (because this is what a debugger typically displays by default) and
// has to be robust with broken graph/nodes.
@Override
- public final String toString() {
- // TODO: This needs a lot of work
- return print();
- }
+ public final String toString() { return print(); }
// This is a *deep* print. This version will fail on cycles, which we will
// correct later when we can parse programs with loops. We print with a
@@ -121,8 +118,6 @@ public abstract class Node {
public boolean isCFG() { return false; }
-
-
/**
* Change a <em>def</em> into a Node. Keeps the edges correct, by removing
* the corresponding <em>use->def</em> edge. This may make the original
@@ -180,11 +175,11 @@ public abstract class Node {
// Error is 'use' does not exist; ok for 'use' to be null.
protected boolean delUse( Node use ) {
Utils.del(_outputs, Utils.find(_outputs, use));
- return _outputs.size() == 0;
+ return _outputs.isEmpty();
}
// Shortcut for "popping" n nodes. A "pop" is basically a
- // set_def(last,null) followed by lowering the nIns() count.
+ // setDef(last,null) followed by lowering the nIns() count.
void popN(int n) {
for( int i=0; i<n; i++ ) {
Node old_def = _inputs.removeLast();