From c0fad363ab2854008fab8e3dca16b605ef63635c Mon Sep 17 00:00:00 2001 From: Kyle McLamb Date: Mon, 14 Oct 2019 04:10:41 -0400 Subject: [PATCH 1/2] Support positive sign in scientific notation --- doc/site/values.markdown | 2 ++ src/vm/wren_compiler.c | 13 ++++++++----- test/language/number/scientific_literals.wren | 1 + .../number/scientific_multiple_exponent_signs.wren | 1 + 4 files changed, 12 insertions(+), 5 deletions(-) create mode 100644 test/language/number/scientific_multiple_exponent_signs.wren diff --git a/doc/site/values.markdown b/doc/site/values.markdown index cc2181369..4c8dfe05d 100644 --- a/doc/site/values.markdown +++ b/doc/site/values.markdown @@ -26,6 +26,8 @@ from other languages: 3.14159 1.0 -12.34 + 0.0314159e02 + 314.159e-02 Numbers are instances of the [Num][] class. diff --git a/src/vm/wren_compiler.c b/src/vm/wren_compiler.c index caa63534d..6039145f2 100644 --- a/src/vm/wren_compiler.c +++ b/src/vm/wren_compiler.c @@ -758,18 +758,21 @@ static void readNumber(Parser* parser) nextChar(parser); while (isDigit(peekChar(parser))) nextChar(parser); } - + // See if the number is in scientific notation. if (matchChar(parser, 'e') || matchChar(parser, 'E')) { - // Allow a negative exponent. - matchChar(parser, '-'); - + // Allow a single positive/negative exponent symbol. + if(!matchChar(parser, '+')) + { + matchChar(parser, '-'); + } + if (!isDigit(peekChar(parser))) { lexError(parser, "Unterminated scientific notation."); } - + while (isDigit(peekChar(parser))) nextChar(parser); } diff --git a/test/language/number/scientific_literals.wren b/test/language/number/scientific_literals.wren index 526950689..21aa9de4b 100644 --- a/test/language/number/scientific_literals.wren +++ b/test/language/number/scientific_literals.wren @@ -7,3 +7,4 @@ System.print(2.55e-2 is Num) // expect: true System.print(x is Num) // expect: true System.print(-2.55e2) // expect: -255 System.print(-25500e-2) // expect: -255 +System.print(2.55e+2) // expect: 255 diff --git a/test/language/number/scientific_multiple_exponent_signs.wren b/test/language/number/scientific_multiple_exponent_signs.wren new file mode 100644 index 000000000..b61bde34c --- /dev/null +++ b/test/language/number/scientific_multiple_exponent_signs.wren @@ -0,0 +1 @@ +var x = 1e+-01 // expect error From 41e68607758ae7444b53a5b42b8fefd52d99e155 Mon Sep 17 00:00:00 2001 From: Kyle McLamb Date: Thu, 17 Oct 2019 00:12:52 -0400 Subject: [PATCH 2/2] Add exponent with positive sign to docs --- doc/site/values.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/site/values.markdown b/doc/site/values.markdown index 4c8dfe05d..bb405b898 100644 --- a/doc/site/values.markdown +++ b/doc/site/values.markdown @@ -27,6 +27,7 @@ from other languages: 1.0 -12.34 0.0314159e02 + 0.0314159e+02 314.159e-02 Numbers are instances of the [Num][] class.