From eea65489c8acfbfdcaefdf2efe2b9df1b00df7fc Mon Sep 17 00:00:00 2001 From: Sameer Rahmani Date: Tue, 24 Nov 2020 18:27:59 +0000 Subject: [PATCH] Add True/False values --- bootstrap/pkg/core/errors.go | 63 ++++++++++++++++++++++++++++++++++++ bootstrap/pkg/core/false.go | 42 ++++++++++++++++++++++++ bootstrap/pkg/core/true.go | 42 ++++++++++++++++++++++++ 3 files changed, 147 insertions(+) create mode 100644 bootstrap/pkg/core/errors.go create mode 100644 bootstrap/pkg/core/false.go create mode 100644 bootstrap/pkg/core/true.go diff --git a/bootstrap/pkg/core/errors.go b/bootstrap/pkg/core/errors.go new file mode 100644 index 0000000..7d446d2 --- /dev/null +++ b/bootstrap/pkg/core/errors.go @@ -0,0 +1,63 @@ +/* + Serene --- Yet an other Lisp + +Copyright (c) 2020 Sameer Rahmani + +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. + +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, see . +*/ + +package core + +import ( + "fmt" + + "serene-lang.org/bootstrap/pkg/ast" +) + +type IError interface { + ast.ILocatable + IPrintable + IDebuggable +} + +type Error struct { + Node + msg string +} + +func (e *Error) String() string { + return e.msg +} + +func (e *Error) ToDebugStr() string { + return e.msg +} + +func MakeError(rt *Runtime, msg string) IError { + return &Error{ + msg: msg, + } +} + +func MakeRuntimeErrorf(rt *Runtime, msg string, a ...interface{}) IError { + return &Error{ + msg: fmt.Sprintf(msg, a...), + } +} + +func MakeParsetimeErrorf(n Node, msg string, a ...interface{}) IError { + return &Error{ + Node: n, + msg: fmt.Sprintf(msg, a...), + } +} diff --git a/bootstrap/pkg/core/false.go b/bootstrap/pkg/core/false.go new file mode 100644 index 0000000..3dd0305 --- /dev/null +++ b/bootstrap/pkg/core/false.go @@ -0,0 +1,42 @@ +/* + Serene --- Yet an other Lisp + +Copyright (c) 2020 Sameer Rahmani + +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. + +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, see . +*/ + +package core + +import "serene-lang.org/bootstrap/pkg/ast" + +type FalseType struct{} + +// False is just False not `null` or anything +var False = FalseType{} + +func (n FalseType) GetType() ast.NodeType { + return ast.False +} + +func (n FalseType) GetLocation() ast.Location { + return ast.MakeUnknownLocation() +} + +func (n FalseType) String() string { + return "false" +} + +func (n FalseType) ToDebugStr() string { + return "false" +} diff --git a/bootstrap/pkg/core/true.go b/bootstrap/pkg/core/true.go new file mode 100644 index 0000000..b7883c3 --- /dev/null +++ b/bootstrap/pkg/core/true.go @@ -0,0 +1,42 @@ +/* + Serene --- Yet an other Lisp + +Copyright (c) 2020 Sameer Rahmani + +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. + +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, see . +*/ + +package core + +import "serene-lang.org/bootstrap/pkg/ast" + +type TrueType struct{} + +// True is just True not `null` or anything +var True = TrueType{} + +func (n TrueType) GetType() ast.NodeType { + return ast.True +} + +func (n TrueType) GetLocation() ast.Location { + return ast.MakeUnknownLocation() +} + +func (n TrueType) String() string { + return "true" +} + +func (n TrueType) ToDebugStr() string { + return "true" +}