Implement collapse operators.

This commit is contained in:
2022-10-30 01:38:00 +08:00
parent 4101ee8c8e
commit 0a0be73ea7

View File

@@ -95,6 +95,14 @@ namespace Cryville.Crtr {
else throw new KeyNotFoundException(string.Format("Undefined operator {0}({1})", name, pc));
}
protected override bool Collapse(string name, PdtVariableMemory param) {
switch (name) {
case "&": return param.AsNumber() == 0;
case "|": return param.AsNumber() != 0;
default: throw new KeyNotFoundException(string.Format("Undefined collapse operator {0}", name));
}
}
public ChartEvent ContextEvent { private get; set; }
public Transform ContextTransform { private get; set; }
public Judge ContextJudge { private get; set; }
@@ -120,13 +128,11 @@ namespace Cryville.Crtr {
}
static PdtEvaluator() {
_shortops.Add(new OperatorSignature("*", 2), new op_mul_2());
_shortops.Add(new OperatorSignature("&", 2), new op_mul_2());
_shortops.Add(new OperatorSignature("/", 2), new op_div_2());
_shortops.Add(new OperatorSignature("%", 2), new op_mod_2());
_shortops.Add(new OperatorSignature("+", 1), new op_add_1());
_shortops.Add(new OperatorSignature("+", 2), new op_add_2());
_shortops.Add(new OperatorSignature("|", 2), new op_add_2());
_shortops.Add(new OperatorSignature("-", 1), new op_sub_1());
_shortops.Add(new OperatorSignature("-", 2), new op_sub_2());