From babbd01975d869d2d71e3130ae5b1738c9fc56a4 Mon Sep 17 00:00:00 2001 From: Steve Dunham Date: Fri, 27 Mar 2026 20:21:57 -0700 Subject: [PATCH] Fix LSP crash and tokenizer issue --- src/Lib/Tokenizer.newt | 3 ++- src/Prelude.newt | 3 +-- tests/Number.newt | 9 +++++++++ tests/Number.newt.golden | 1 + 4 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 tests/Number.newt create mode 100644 tests/Number.newt.golden diff --git a/src/Lib/Tokenizer.newt b/src/Lib/Tokenizer.newt index aee1014..e490e33 100644 --- a/src/Lib/Tokenizer.newt +++ b/src/Lib/Tokenizer.newt @@ -165,7 +165,8 @@ rawTokenise ts@(TS sl sc toks chars) = case chars of doChar : Char -> List Char -> Either Error TState doChar c cs = if elem c standalone then rawTokenise (TS sl (sc + 1) (toks :< mktok True sl (sc + 1) Symbol (pack $ c :: Nil)) cs) - else let kind = if isDigit c then Number else if isUpper c then UIdent else Ident in + else if isDigit c then doRest (TS sl sc toks (c :: cs)) Number isDigit Lin + else let kind = if isUpper c then UIdent else Ident in doRest (TS sl sc toks (c :: cs)) kind isIdent Lin diff --git a/src/Prelude.newt b/src/Prelude.newt index 43274e2..ddca667 100644 --- a/src/Prelude.newt +++ b/src/Prelude.newt @@ -456,8 +456,7 @@ debugLog a = putStrLn (debugStr a) pfunc stringToInt : String → Int := `(s) => { let rval = Number(s) - if (isNaN(rval)) throw new Error(s + " is NaN") - return rval + return isNaN(rval) ? 0 : rval }` class Foldable (m : U → U) where diff --git a/tests/Number.newt b/tests/Number.newt new file mode 100644 index 0000000..b7da207 --- /dev/null +++ b/tests/Number.newt @@ -0,0 +1,9 @@ +module Number + +import Prelude + +add : Int → Int → Int +add a b = a + b + +main : IO Unit +main = printLn $ add 2$ 40 diff --git a/tests/Number.newt.golden b/tests/Number.newt.golden new file mode 100644 index 0000000..d81cc07 --- /dev/null +++ b/tests/Number.newt.golden @@ -0,0 +1 @@ +42