From aab6510a0e59c26a31526ff303a9d581736815fc Mon Sep 17 00:00:00 2001 From: mryouse Date: Fri, 26 May 2023 02:52:39 +0000 Subject: eq? for many things --- parser.d | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'parser.d') diff --git a/parser.d b/parser.d index 6974662..440cae0 100644 --- a/parser.d +++ b/parser.d @@ -320,6 +320,34 @@ struct Value { As as; } +bool areValuesEqual(Value left, Value right) { + if (left.type != right.type) { + return false; + } + + switch (left.type) { + case ValueType.NUMBER: + return left.as.number == right.as.number; + case ValueType.BOOLEAN: + return left.as.boolean == right.as.boolean; + case ValueType.SEQ: + Seq leftSeq = cast(Seq)left.as.seq; + Seq rightSeq = cast(Seq)right.as.seq; + if (leftSeq.type != rightSeq.type) { + return false; + } else if (leftSeq.type == SeqType.STRING) { + return (cast(String)leftSeq).str == (cast(String)rightSeq).str; + } else { + // NOTE if eq? should work for lists, that logic goes here + return false; + } + default: + writeln("!!! THIS VALUE TYPE IS NOT SUPPORTED BY eq?"); + return false; + } + +} + Value makeStringValue(string str) { As as = { str: str }; Value val = { ValueType.STRING, as }; -- cgit v1.2.3