From caa2b978e5a0a83b2615e1e703ce1ec07bf86f77 Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Mon, 30 Dec 2024 14:16:36 -0800 Subject: Test for "arg--2" Parse as "arg - -2" and not "arg-- 2" which is a syntax error --- chapter04/src/test/java/com/seaofnodes/simple/Chapter04Test.java | 6 ++++++ chapter05/src/test/java/com/seaofnodes/simple/Chapter04Test.java | 6 ++++++ chapter06/src/test/java/com/seaofnodes/simple/Chapter04Test.java | 6 ++++++ chapter07/src/test/java/com/seaofnodes/simple/Chapter04Test.java | 6 ++++++ chapter08/src/test/java/com/seaofnodes/simple/Chapter04Test.java | 6 ++++++ chapter09/src/test/java/com/seaofnodes/simple/Chapter04Test.java | 6 ++++++ chapter10/src/test/java/com/seaofnodes/simple/Chapter04Test.java | 6 ++++++ chapter11/src/test/java/com/seaofnodes/simple/Chapter04Test.java | 6 ++++++ chapter12/src/test/java/com/seaofnodes/simple/Chapter04Test.java | 6 ++++++ chapter13/src/test/java/com/seaofnodes/simple/Chapter04Test.java | 6 ++++++ chapter14/src/test/java/com/seaofnodes/simple/Chapter04Test.java | 6 ++++++ chapter15/src/main/java/com/seaofnodes/simple/node/SubFNode.java | 2 +- chapter15/src/main/java/com/seaofnodes/simple/node/SubNode.java | 2 +- chapter15/src/test/java/com/seaofnodes/simple/Chapter04Test.java | 6 ++++++ chapter16/src/test/java/com/seaofnodes/simple/Chapter04Test.java | 6 ++++++ chapter17/src/main/java/com/seaofnodes/simple/Parser.java | 2 ++ chapter17/src/test/java/com/seaofnodes/simple/Chapter04Test.java | 6 ++++++ 17 files changed, 88 insertions(+), 2 deletions(-) diff --git a/chapter04/src/test/java/com/seaofnodes/simple/Chapter04Test.java b/chapter04/src/test/java/com/seaofnodes/simple/Chapter04Test.java index 9f1535b3..faae0aee 100644 --- a/chapter04/src/test/java/com/seaofnodes/simple/Chapter04Test.java +++ b/chapter04/src/test/java/com/seaofnodes/simple/Chapter04Test.java @@ -124,4 +124,10 @@ public class Chapter04Test { assertEquals("return (-arg);", ret.print()); } + @Test + public void testBug5() { + Parser parser = new Parser("return arg--2;"); + ReturnNode ret = parser.parse(); + assertEquals("return (arg--2);", ret.print()); + } } diff --git a/chapter05/src/test/java/com/seaofnodes/simple/Chapter04Test.java b/chapter05/src/test/java/com/seaofnodes/simple/Chapter04Test.java index cde23324..9b8fa73f 100644 --- a/chapter05/src/test/java/com/seaofnodes/simple/Chapter04Test.java +++ b/chapter05/src/test/java/com/seaofnodes/simple/Chapter04Test.java @@ -125,4 +125,10 @@ public class Chapter04Test { assertEquals("return (-arg);", ret.print()); } + @Test + public void testBug5() { + Parser parser = new Parser("return arg--2;"); + ReturnNode ret = parser.parse(); + assertEquals("return (arg--2);", ret.print()); + } } diff --git a/chapter06/src/test/java/com/seaofnodes/simple/Chapter04Test.java b/chapter06/src/test/java/com/seaofnodes/simple/Chapter04Test.java index 2b6b5ae2..98878ca6 100644 --- a/chapter06/src/test/java/com/seaofnodes/simple/Chapter04Test.java +++ b/chapter06/src/test/java/com/seaofnodes/simple/Chapter04Test.java @@ -125,4 +125,10 @@ public class Chapter04Test { assertEquals("return (-arg);", ret.print()); } + @Test + public void testBug5() { + Parser parser = new Parser("return arg--2;"); + StopNode ret = parser.parse(); + assertEquals("return (arg--2);", ret.print()); + } } diff --git a/chapter07/src/test/java/com/seaofnodes/simple/Chapter04Test.java b/chapter07/src/test/java/com/seaofnodes/simple/Chapter04Test.java index 2b6b5ae2..98878ca6 100644 --- a/chapter07/src/test/java/com/seaofnodes/simple/Chapter04Test.java +++ b/chapter07/src/test/java/com/seaofnodes/simple/Chapter04Test.java @@ -125,4 +125,10 @@ public class Chapter04Test { assertEquals("return (-arg);", ret.print()); } + @Test + public void testBug5() { + Parser parser = new Parser("return arg--2;"); + StopNode ret = parser.parse(); + assertEquals("return (arg--2);", ret.print()); + } } diff --git a/chapter08/src/test/java/com/seaofnodes/simple/Chapter04Test.java b/chapter08/src/test/java/com/seaofnodes/simple/Chapter04Test.java index e23a10b1..2e2abb25 100644 --- a/chapter08/src/test/java/com/seaofnodes/simple/Chapter04Test.java +++ b/chapter08/src/test/java/com/seaofnodes/simple/Chapter04Test.java @@ -125,4 +125,10 @@ public class Chapter04Test { assertEquals("return (-arg);", ret.print()); } + @Test + public void testBug5() { + Parser parser = new Parser("return arg--2;"); + StopNode ret = parser.parse(); + assertEquals("return (arg--2);", ret.print()); + } } diff --git a/chapter09/src/test/java/com/seaofnodes/simple/Chapter04Test.java b/chapter09/src/test/java/com/seaofnodes/simple/Chapter04Test.java index e23a10b1..2e2abb25 100644 --- a/chapter09/src/test/java/com/seaofnodes/simple/Chapter04Test.java +++ b/chapter09/src/test/java/com/seaofnodes/simple/Chapter04Test.java @@ -125,4 +125,10 @@ public class Chapter04Test { assertEquals("return (-arg);", ret.print()); } + @Test + public void testBug5() { + Parser parser = new Parser("return arg--2;"); + StopNode ret = parser.parse(); + assertEquals("return (arg--2);", ret.print()); + } } diff --git a/chapter10/src/test/java/com/seaofnodes/simple/Chapter04Test.java b/chapter10/src/test/java/com/seaofnodes/simple/Chapter04Test.java index e23a10b1..2e2abb25 100644 --- a/chapter10/src/test/java/com/seaofnodes/simple/Chapter04Test.java +++ b/chapter10/src/test/java/com/seaofnodes/simple/Chapter04Test.java @@ -125,4 +125,10 @@ public class Chapter04Test { assertEquals("return (-arg);", ret.print()); } + @Test + public void testBug5() { + Parser parser = new Parser("return arg--2;"); + StopNode ret = parser.parse(); + assertEquals("return (arg--2);", ret.print()); + } } diff --git a/chapter11/src/test/java/com/seaofnodes/simple/Chapter04Test.java b/chapter11/src/test/java/com/seaofnodes/simple/Chapter04Test.java index 70f38dd6..80cdb3f2 100644 --- a/chapter11/src/test/java/com/seaofnodes/simple/Chapter04Test.java +++ b/chapter11/src/test/java/com/seaofnodes/simple/Chapter04Test.java @@ -125,4 +125,10 @@ public class Chapter04Test { assertEquals("return (-arg);", ret.print()); } + @Test + public void testBug5() { + Parser parser = new Parser("return arg--2;"); + StopNode ret = parser.parse(); + assertEquals("return (arg--2);", ret.print()); + } } diff --git a/chapter12/src/test/java/com/seaofnodes/simple/Chapter04Test.java b/chapter12/src/test/java/com/seaofnodes/simple/Chapter04Test.java index 70f38dd6..80cdb3f2 100644 --- a/chapter12/src/test/java/com/seaofnodes/simple/Chapter04Test.java +++ b/chapter12/src/test/java/com/seaofnodes/simple/Chapter04Test.java @@ -125,4 +125,10 @@ public class Chapter04Test { assertEquals("return (-arg);", ret.print()); } + @Test + public void testBug5() { + Parser parser = new Parser("return arg--2;"); + StopNode ret = parser.parse(); + assertEquals("return (arg--2);", ret.print()); + } } diff --git a/chapter13/src/test/java/com/seaofnodes/simple/Chapter04Test.java b/chapter13/src/test/java/com/seaofnodes/simple/Chapter04Test.java index 70f38dd6..80cdb3f2 100644 --- a/chapter13/src/test/java/com/seaofnodes/simple/Chapter04Test.java +++ b/chapter13/src/test/java/com/seaofnodes/simple/Chapter04Test.java @@ -125,4 +125,10 @@ public class Chapter04Test { assertEquals("return (-arg);", ret.print()); } + @Test + public void testBug5() { + Parser parser = new Parser("return arg--2;"); + StopNode ret = parser.parse(); + assertEquals("return (arg--2);", ret.print()); + } } diff --git a/chapter14/src/test/java/com/seaofnodes/simple/Chapter04Test.java b/chapter14/src/test/java/com/seaofnodes/simple/Chapter04Test.java index 70f38dd6..80cdb3f2 100644 --- a/chapter14/src/test/java/com/seaofnodes/simple/Chapter04Test.java +++ b/chapter14/src/test/java/com/seaofnodes/simple/Chapter04Test.java @@ -125,4 +125,10 @@ public class Chapter04Test { assertEquals("return (-arg);", ret.print()); } + @Test + public void testBug5() { + Parser parser = new Parser("return arg--2;"); + StopNode ret = parser.parse(); + assertEquals("return (arg--2);", ret.print()); + } } diff --git a/chapter15/src/main/java/com/seaofnodes/simple/node/SubFNode.java b/chapter15/src/main/java/com/seaofnodes/simple/node/SubFNode.java index 335b5f10..b591718d 100644 --- a/chapter15/src/main/java/com/seaofnodes/simple/node/SubFNode.java +++ b/chapter15/src/main/java/com/seaofnodes/simple/node/SubFNode.java @@ -1,4 +1,4 @@ -epackage com.seaofnodes.simple.node; +package com.seaofnodes.simple.node; import com.seaofnodes.simple.type.Type; import com.seaofnodes.simple.type.TypeFloat; diff --git a/chapter15/src/main/java/com/seaofnodes/simple/node/SubNode.java b/chapter15/src/main/java/com/seaofnodes/simple/node/SubNode.java index 8ecdf13e..009fb30e 100644 --- a/chapter15/src/main/java/com/seaofnodes/simple/node/SubNode.java +++ b/chapter15/src/main/java/com/seaofnodes/simple/node/SubNode.java @@ -1,4 +1,4 @@ -y!package com.seaofnodes.simple.node; +package com.seaofnodes.simple.node; import com.seaofnodes.simple.Parser; import com.seaofnodes.simple.type.Type; diff --git a/chapter15/src/test/java/com/seaofnodes/simple/Chapter04Test.java b/chapter15/src/test/java/com/seaofnodes/simple/Chapter04Test.java index 70f38dd6..80cdb3f2 100644 --- a/chapter15/src/test/java/com/seaofnodes/simple/Chapter04Test.java +++ b/chapter15/src/test/java/com/seaofnodes/simple/Chapter04Test.java @@ -125,4 +125,10 @@ public class Chapter04Test { assertEquals("return (-arg);", ret.print()); } + @Test + public void testBug5() { + Parser parser = new Parser("return arg--2;"); + StopNode ret = parser.parse(); + assertEquals("return (arg--2);", ret.print()); + } } diff --git a/chapter16/src/test/java/com/seaofnodes/simple/Chapter04Test.java b/chapter16/src/test/java/com/seaofnodes/simple/Chapter04Test.java index 70f38dd6..80cdb3f2 100644 --- a/chapter16/src/test/java/com/seaofnodes/simple/Chapter04Test.java +++ b/chapter16/src/test/java/com/seaofnodes/simple/Chapter04Test.java @@ -125,4 +125,10 @@ public class Chapter04Test { assertEquals("return (-arg);", ret.print()); } + @Test + public void testBug5() { + Parser parser = new Parser("return arg--2;"); + StopNode ret = parser.parse(); + assertEquals("return (arg--2);", ret.print()); + } } diff --git a/chapter17/src/main/java/com/seaofnodes/simple/Parser.java b/chapter17/src/main/java/com/seaofnodes/simple/Parser.java index 1cdf27fb..570ae67e 100644 --- a/chapter17/src/main/java/com/seaofnodes/simple/Parser.java +++ b/chapter17/src/main/java/com/seaofnodes/simple/Parser.java @@ -1412,6 +1412,7 @@ public class Parser { // Next oper= character, or 0. // As a convenience, mark "++" as a char 1 and "--" as char -1 (65535) + // Disallow e.g. "arg--1" which should parse as "arg - -1" public char matchOperAssign() { skipWhiteSpace(); if( _position+2 >= _input.length ) return 0; @@ -1419,6 +1420,7 @@ public class Parser { if( "+-/*&|^".indexOf(ch0) == -1 ) return 0; char ch1 = (char)_input[_position+1]; if( ch1 == '=' ) { _position += 2; return ch0; } + if( Character.isDigit(_input[_position+2]) ) return 0; if( ch0 == '+' && ch1 == '+' ) { _position += 2; return (char) 1; } if( ch0 == '-' && ch1 == '-' ) { _position += 2; return (char)-1; } return 0; diff --git a/chapter17/src/test/java/com/seaofnodes/simple/Chapter04Test.java b/chapter17/src/test/java/com/seaofnodes/simple/Chapter04Test.java index 24612fee..0db3afde 100644 --- a/chapter17/src/test/java/com/seaofnodes/simple/Chapter04Test.java +++ b/chapter17/src/test/java/com/seaofnodes/simple/Chapter04Test.java @@ -125,4 +125,10 @@ public class Chapter04Test { assertEquals("return (-arg);", ret.print()); } + @Test + public void testBug5() { + Parser parser = new Parser("return arg--2;"); + StopNode ret = parser.parse(); + assertEquals("return (arg--2);", ret.print()); + } } -- cgit v1.2.3