From 22e06eac0cf27c97056bb9e2f4fe7e45f7f1a474 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Sun, 12 Jan 2020 20:38:51 +0000 Subject: [PATCH 1/1] stdlib: Implement error() function. Currently not very useful because we lack conditionals, but it could be useful if those were implemented. --- docs/Goalfile.pod | 8 ++++++++ stdlib/prelude.gl | 5 +++++ tests/10-function-error.gl | 19 +++++++++++++++++++ tests/10-function-error.sh | 26 ++++++++++++++++++++++++++ 4 files changed, 58 insertions(+) create mode 100644 tests/10-function-error.gl create mode 100755 tests/10-function-error.sh diff --git a/docs/Goalfile.pod b/docs/Goalfile.pod index 46fbe1d..85d19ba 100644 --- a/docs/Goalfile.pod +++ b/docs/Goalfile.pod @@ -30,6 +30,14 @@ For example: Returns the directory part of the path. +=head3 error (msg) + +For example: + + error ("this should not happen") + +This prints the error message and causes goals to exit. + =head3 extension (filename) For example: diff --git a/stdlib/prelude.gl b/stdlib/prelude.gl index 5d072ea..7dc3b73 100644 --- a/stdlib/prelude.gl +++ b/stdlib/prelude.gl @@ -40,6 +40,11 @@ tactic *exists (filename) = @{ #---------------------------------------------------------------------- # Basic functions. +function error (msg) = @{ + echo %msg >&2 + exit 1 +} + # Wrap list of strings in a call or tactic. pure function wrap (wrapper, xs) = @{ echo '[' diff --git a/tests/10-function-error.gl b/tests/10-function-error.gl new file mode 100644 index 0000000..7729dcb --- /dev/null +++ b/tests/10-function-error.gl @@ -0,0 +1,19 @@ +# Goals test. +# Copyright (C) 2020 Richard W.M. Jones +# Copyright (C) 2020 Red Hat Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +goal all = : error ("uh oh") diff --git a/tests/10-function-error.sh b/tests/10-function-error.sh new file mode 100755 index 0000000..5f315a3 --- /dev/null +++ b/tests/10-function-error.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +# Goals test. +# Copyright (C) 2020 Richard W.M. Jones +# Copyright (C) 2020 Red Hat Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +# This is expected to return an error, and as long as it does this +# script is successful. +if goals -f 10-function-error.gl; then + exit 1 +else + exit 0 +fi -- 1.8.3.1