aboutsummaryrefslogtreecommitdiff
path: root/hypsrc-test/src
diff options
context:
space:
mode:
authorAlec Theriault <alec.theriault@gmail.com>2018-06-05 10:47:16 -0700
committerAlexander Biehl <alexbiehl@gmail.com>2018-06-05 19:47:16 +0200
commitbea565ec5a029b8c19965aa22f34c23a112c0a7f (patch)
treea0a93b524acf85676c4e46206f73ce2a7a2aaa0f /hypsrc-test/src
parentee1ce11ceaf41d05973bb2c9ca7abd41a2ad078c (diff)
Improve hyperlinker's 'spanToNewline' (#846)
'spanToNewline' is used to help break apart the source into lines which can then be partioned into CPP and non-CPP chunks. It is important that 'spanToNewline' not break apart tokens, so it needs to properly handle things like * block comments, possibly nested * string literals, possibly multi-line * CPP macros, possibly multi-line String literals in particular were not being properly handled. The fix is to to fall back in 'Text.Read.lex' to help lex things that are not comments. Fixes #837.
Diffstat (limited to 'hypsrc-test/src')
-rw-r--r--hypsrc-test/src/CPP.hs26
1 files changed, 26 insertions, 0 deletions
diff --git a/hypsrc-test/src/CPP.hs b/hypsrc-test/src/CPP.hs
new file mode 100644
index 00000000..f00ce031
--- /dev/null
+++ b/hypsrc-test/src/CPP.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE CPP #-}
+module CPP where
+
+#define SOMETHING1
+
+foo :: String
+foo = {- " single quotes are fine in block comments
+ {- nested block comments are fine -}
+ -} "foo"
+
+#define SOMETHING2
+
+bar :: String
+bar = "block comment in a string is not a comment {- "
+
+#define SOMETHING3
+
+-- " single quotes are fine in line comments
+-- {- unclosed block comments are fine in line comments
+
+-- Multiline CPP is also fine
+#define FOO\
+ 1
+
+baz :: String
+baz = "line comment in a string is not a comment --"