diff options
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 }; |
