diff options
| author | mryouse | 2023-05-26 02:52:39 +0000 |
|---|---|---|
| committer | mryouse | 2023-05-26 02:52:39 +0000 |
| commit | aab6510a0e59c26a31526ff303a9d581736815fc (patch) | |
| tree | 4fed2a5fe5711f8e0e43b7386317183a162345a9 /parser.d | |
| parent | 11e9f1d854602aae7cb895cfb2f9fc5dd338e6f8 (diff) | |
eq? for many things
Diffstat (limited to 'parser.d')
| -rw-r--r-- | parser.d | 28 |
1 files changed, 28 insertions, 0 deletions
@@ -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 }; |
