summaryrefslogtreecommitdiff
path: root/testsuite/driver
diff options
context:
space:
mode:
authorSylvain Henry <sylvain@haskus.fr>2022-02-10 08:24:24 +0000
committerSylvain Henry <sylvain@haskus.fr>2022-11-29 09:44:31 +0100
commitcc25d52e0f65d54c052908c7d91d5946342ab88a (patch)
tree0f35764ee3b9b0451ac999b64d2db9fa074fa3dd /testsuite/driver
parentdef47dd32491311289bff26230b664c895f178cc (diff)
downloadhaskell-cc25d52e0f65d54c052908c7d91d5946342ab88a.tar.gz
Add Javascript backend
Add JS backend adapted from the GHCJS project by Luite Stegeman. Some features haven't been ported or implemented yet. Tests for these features have been disabled with an associated gitlab ticket. Bump array submodule Work funded by IOG. Co-authored-by: Jeffrey Young <jeffrey.young@iohk.io> Co-authored-by: Luite Stegeman <stegeman@gmail.com> Co-authored-by: Josh Meredith <joshmeredith2008@gmail.com>
Diffstat (limited to 'testsuite/driver')
-rw-r--r--testsuite/driver/testlib.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/testsuite/driver/testlib.py b/testsuite/driver/testlib.py
index a0f97098ab..39ba7d8b31 100644
--- a/testsuite/driver/testlib.py
+++ b/testsuite/driver/testlib.py
@@ -137,6 +137,18 @@ def no_deps( name, opts):
def skip( name, opts ):
opts.skip = True
+# disable test on JS arch
+def js_skip( name, opts ):
+ if arch("js"):
+ skip(name,opts)
+
+# expect broken for the JS backend
+def js_broken( bug: IssueNumber ):
+ if arch("js"):
+ return expect_broken(bug);
+ else:
+ return normal;
+
def expect_fail( name, opts ):
# The compiler, testdriver, OS or platform is missing a certain
# feature, and we don't plan to or can't fix it now or in the
@@ -250,15 +262,28 @@ def req_dynamic_hs( name, opts ):
def req_interp( name, opts ):
if not config.have_interp:
opts.expect = 'fail'
+ # JS backend doesn't provide an interpreter yet
+ js_skip(name, opts)
def req_rts_linker( name, opts ):
if not config.have_RTS_linker:
opts.expect = 'fail'
+ # JS backend doesn't provide the RTS linker
+ js_skip(name, opts)
def req_c( name, opts ):
"""
Mark a test as requiring C source file support
"""
+ # JS backend doesn't support C (yet)
+ js_skip(name, opts)
+
+def req_ffi_exports( name, opts):
+ """
+ Mark a test as requiring FFI exports
+ """
+ # JS backend doesn't support FFI exports (yet)
+ js_skip(name, opts)
def req_th( name, opts ):
"""
@@ -739,6 +764,8 @@ def objcpp_src( name, opts ):
def cmm_src( name, opts ):
opts.cmm_src = True
+ # JS backend doesn't support Cmm
+ js_skip(name, opts)
def outputdir( odir ):
return lambda name, opts, d=odir: _outputdir(name, opts, d)
@@ -2313,6 +2340,8 @@ def normalise_errmsg(s: str) -> str:
# hacky solution is used in place of more sophisticated filename
# mangling
s = re.sub('([^\\s])\\.exe', '\\1', s)
+ # Same thing for .jsexe directories generated by the JS backend
+ s = re.sub('([^\\s])\\.jsexe', '\\1', s)
# normalise slashes, minimise Windows/Unix filename differences
s = re.sub('\\\\', '/', s)
@@ -2320,6 +2349,10 @@ def normalise_errmsg(s: str) -> str:
# The inplace ghc's are called ghc-stage[123] to avoid filename
# collisions, so we need to normalise that to just "ghc"
s = re.sub('ghc-stage[123]', 'ghc', s)
+ # Remove platform prefix (e.g. js-unknown-ghcjs) for cross-compiled tools
+ # (ghc, ghc-pkg, unlit, etc.)
+ s = re.sub('\\w+-\\w+-\\w+-ghc', 'ghc', s)
+ s = re.sub('\\w+-\\w+-\\w+-unlit', 'unlit', s)
# On windows error messages can mention versioned executables
s = re.sub('ghc-[0-9.]+', 'ghc', s)
@@ -2428,6 +2461,7 @@ def normalise_slashes_( s: str ) -> str:
def normalise_exe_( s: str ) -> str:
s = re.sub('\.exe', '', s)
+ s = re.sub('\.jsexe', '', s)
return s
def normalise_output( s: str ) -> str:
@@ -2436,8 +2470,10 @@ def normalise_output( s: str ) -> str:
s = modify_lines(s, lambda l: re.sub(' error:', '', l))
s = modify_lines(s, lambda l: re.sub(' Warning:', ' warning:', l))
# Remove a .exe extension (for Windows)
+ # and .jsexe extension (for the JS backend)
# This can occur in error messages generated by the program.
s = re.sub('([^\\s])\\.exe', '\\1', s)
+ s = re.sub('([^\\s])\\.jsexe', '\\1', s)
s = normalise_callstacks(s)
s = normalise_type_reps(s)
# ghci outputs are pretty unstable with -fexternal-dynamic-refs, which is