Newer
Older
NewLang / src / ast_types.py
# SPDX-License-Identifier: LGPL-2.1-only
# Copyright 2022 Jookia <contact@jookia.org>


class Reference:
    def __init__(self, value):
        self.value = value

    def __repr__(self):
        return "Reference('%s')" % (self.value)

    def __eq__(self, other):
        if other is None:
            return False
        return self.value == other.value


class Bool:
    def __init__(self, value):
        self.value = value

    def __repr__(self):
        return "Bool(%s)" % (self.value)

    def __eq__(self, other):
        if other is None:
            return False
        return self.value == other.value


class Text:
    def __init__(self, value):
        self.value = value

    def __repr__(self):
        return "Text('%s')" % (self.value)

    def __eq__(self, other):
        if other is None:
            return False
        return self.value == other.value


class Statement:
    def __init__(self, subject, verb, arguments):
        self.subject = subject
        self.verb = verb
        self.arguments = arguments

    def __repr__(self):
        return "Statement(subject %s, verb '%s', arguments %s)" % (
            self.subject,
            self.verb,
            self.arguments,
        )

    def __eq__(self, other):
        if other is None:
            return False
        return (
            self.subject == other.subject
            and self.verb == other.verb
            and self.arguments == other.arguments
        )


class Set:
    def __init__(self, subject, statement):
        self.subject = subject
        self.statement = statement

    def __repr__(self):
        return "Set(subject %s, statement %s)" % (self.subject, self.statement)

    def __eq__(self, other):
        if other is None:
            return False
        return self.subject == other.subject and self.statement == other.statement


class Conditional:
    def __init__(self, test, success, failure):
        self.test = test
        self.success = success
        self.failure = failure

    def __repr__(self):
        return "Conditional(test %s, success %s, failure %s)" % (
            self.test,
            self.success,
            self.failure,
        )

    def __eq__(self, other):
        if other is None:
            return False
        return (
            self.test == other.test
            and self.success == other.success
            and self.failure == other.failure
        )