diff options
| author | Cliff Click <cliffc@acm.org> | 2023-10-28 20:35:29 -0700 |
|---|---|---|
| committer | Dibyendu Majumdar <dibyendumajumdar@users.noreply.github.com> | 2023-11-01 18:56:50 +0000 |
| commit | 0a669bf5fa11a63516ea8f5316b0079c2eee4bde (patch) | |
| tree | 9ce49fae3cf37489413e1b5ec42a2747d60442ef /chapter05/src | |
| parent | 2c7e86d4350ed115922e80e6bfc1aef30a881f75 (diff) | |
| download | Simple-0a669bf5fa11a63516ea8f5316b0079c2eee4bde.tar.gz Simple-0a669bf5fa11a63516ea8f5316b0079c2eee4bde.zip | |
Update README
Add true/false
Diffstat (limited to 'chapter05/src')
| -rw-r--r-- | chapter05/src/main/java/com/seaofnodes/simple/Parser.java | 10 | ||||
| -rw-r--r-- | chapter05/src/test/java/com/seaofnodes/simple/Chapter05Test.java | 15 |
2 files changed, 20 insertions, 5 deletions
diff --git a/chapter05/src/main/java/com/seaofnodes/simple/Parser.java b/chapter05/src/main/java/com/seaofnodes/simple/Parser.java index 3e832610..a23f8d70 100644 --- a/chapter05/src/main/java/com/seaofnodes/simple/Parser.java +++ b/chapter05/src/main/java/com/seaofnodes/simple/Parser.java @@ -280,17 +280,19 @@ public class Parser { * Parse a primary expression: * * <pre> - * primaryExpr : integerLiteral | Identifier | '(' expression ')' + * primaryExpr : integerLiteral | Identifier | true | false | '(' expression ')' * </pre> */ private Node parsePrimary() { - if (_lexer.isNumber()) return parseIntegerLiteral(); - if (match("(")) return require(parseExpression(), ")"); + if( _lexer.isNumber() ) return parseIntegerLiteral(); + if( match("(") ) return require(parseExpression(), ")"); + if( match("true" ) ) return new ConstantNode(TypeInteger.constant(1)).peephole(); + if( match("false") ) return new ConstantNode(TypeInteger.constant(0)).peephole(); String name = requireId(); Node id = _scope.lookup(name); if( id==null ) throw error("Undefined name '" + name + "'"); - return id.peephole(); + return id; } /** diff --git a/chapter05/src/test/java/com/seaofnodes/simple/Chapter05Test.java b/chapter05/src/test/java/com/seaofnodes/simple/Chapter05Test.java index e59d1dbd..8f09620e 100644 --- a/chapter05/src/test/java/com/seaofnodes/simple/Chapter05Test.java +++ b/chapter05/src/test/java/com/seaofnodes/simple/Chapter05Test.java @@ -62,7 +62,14 @@ return c; StopNode ret = parser.parse(); assertEquals("return (Phi(Region31,(arg+1),(arg+3))+Phi(Region31,((arg*2)+3),(arg+2)));", ret.toString()); } - + + @Test + public void testChapter5Merge3() { + Parser parser = new Parser("int a=1; if( arg==1 ) if( arg==2 ) a=2; else a=3; else if( arg==3 ) a=4; else a=5; return a; #showGraph;", TypeInteger.BOT); + StopNode stop = parser.parse(); + assertEquals("return Phi(Region33,Phi(Region21,2,3),Phi(Region31,4,5));", stop.toString()); + } + @Test public void testChapter5HalfDef() { try { @@ -82,6 +89,12 @@ return c; assertEquals("Undefined name 'b'",e.getMessage()); } } + + @Test + public void testChapter5True() { + StopNode stop = new Parser("return true;").parse(); + assertEquals("return 1;",stop.toString()); + } @Test public void testChapter4Peephole() { |
