aboutsummaryrefslogtreecommitdiff
path: root/parser.d
diff options
context:
space:
mode:
authormryouse2023-05-26 02:52:39 +0000
committermryouse2023-05-26 02:52:39 +0000
commitaab6510a0e59c26a31526ff303a9d581736815fc (patch)
tree4fed2a5fe5711f8e0e43b7386317183a162345a9 /parser.d
parent11e9f1d854602aae7cb895cfb2f9fc5dd338e6f8 (diff)
eq? for many things
Diffstat (limited to 'parser.d')
-rw-r--r--parser.d28
1 files changed, 28 insertions, 0 deletions
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 };