public override void Visit(AmlParser.DefDivide defDivide) { const int divisorLocal = AmlStackFrame.FirstReservedLocal; const int dividendLocal = divisorLocal + 1; // Push all operands on stack first, since subexpressions may use the reserved locals if (!IsNullTarget(defDivide.remainder.target)) { defDivide.remainder.target.Accept(this); } if (!IsNullTarget(defDivide.quotient.target)) { defDivide.quotient.target.Accept(this); } result.Add(new PushLocalObj(divisorLocal)); defDivide.divisor.Accept(this); result.Add(new PushLocalObj(dividendLocal)); defDivide.dividend.Accept(this); result.Add(new Store()); // Store dividend expression in dividendLocal result.Add(new Store()); // store divisor expression in divisorLocal if (!IsNullTarget(defDivide.quotient.target)) { result.Add(new PushLocalObj(divisorLocal)); result.Add(new PushLocalObj(dividendLocal)); result.Add(new Divide()); result.Add(new Store()); // Store quotient in quotient.target } if (!IsNullTarget(defDivide.remainder.target)) { result.Add(new PushLocalObj(divisorLocal)); result.Add(new PushLocalObj(dividendLocal)); result.Add(new Remainder()); result.Add(new Store()); // Store remainder in remainder.target } }
public virtual void Visit(AmlParser.DefDivide defDivide) { UnhandledNodeType("DefDivide"); }