public override void checkIsPercent(CheckingContext context) { operand.checkIsPercent(context); }
public override void checkIsPercent(CheckingContext context) { }
public override void checkIsBoolean(CheckingContext context) { throw operator_.parseThing.createError("cannot evaluate '" + operator_.text + operand.ToString() + "' as a conditional expression"); }
public override void checkIsBoolean(CheckingContext context) { CheckingContext.throwNotABooleanError(value); }
public override void checkIsInt(CheckingContext context) { CheckingContext.throwNotAnIntError(value); }
public override void checkIsInt(CheckingContext context) { context.checkIsInt(token); }
public override void checkIsPercent(CheckingContext context) { CheckingContext.throwNotAPercentError(token); }
public override void checkIsPercent(CheckingContext context) { condition.checkIsBoolean(context); thenPart.checkIsPercent(context); operand.checkIsPercent(context); }
public override void checkIsBoolean(CheckingContext context) { context.checkIsBoolean(token); }
public override void checkIsBoolean(CheckingContext context) { }
public override void checkIsPercent(CheckingContext context) { // this is really tricky if (operator_.text != "*") throw operator_.parseThing.createError("operator '" + operator_.text + "' does not produce a percent"); if (left.usedNames().Contains("level")) { left.checkIsInt(context); right.checkIsPercent(context); } else if (right.usedNames().Contains("level")) { left.checkIsPercent(context); right.checkIsInt(context); } else { throw operator_.parseThing.createError("multiplication can only produce a percent by multiplying a percent by something with 'level' in it"); } }
public override void checkIsInt(CheckingContext context) { switch (operator_.text) { case "*": case "+": case "-": left.checkIsInt(context); right.checkIsInt(context); return; case "/": left.checkIsInt(context); if (!(right is IntLiteral)) throw operator_.parseThing.createError("denominator must be a literal integer, not '" + left.ToString() + "'"); if (((IntLiteral)right).value.value == 0) throw operator_.parseThing.createError("divide by 0"); return; } throw operator_.parseThing.createError("operator '" + operator_.text + "' does not produce an integer"); }
public override void checkIsBoolean(CheckingContext context) { switch (operator_.text) { case "<=": case "<": case ">=": case ">": left.checkIsInt(context); right.checkIsInt(context); return; case "AND": case "OR": left.checkIsBoolean(context); right.checkIsBoolean(context); return; } throw operator_.parseThing.createError("operator '" + operator_.text + "' does not produce a conditional expresion"); }
public virtual void checkIsPercent(CheckingContext context) { throw new NotImplementedException(); }