⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 divideop.java

📁 A framework written in Java for implementing high-level and dynamic languages, compiling them into J
💻 JAVA
字号:
package gnu.kawa.functions;import gnu.math.*;import gnu.mapping.*;import gnu.expr.*;import gnu.bytecode.*;/** * Implement the Scheme standard function "/". * @author Per Bothner */public class DivideOp extends ProcedureN implements CanInline{  /** True if result shoudl be cast to integer.   * Basically a hack (that should be generalized) for XQuery's   * idiv operator. */  boolean asInteger;  public static final DivideOp $Sl = new DivideOp("/");  public static final DivideOp idiv = new DivideOp("idiv");  static { idiv.asInteger = true; }  public DivideOp(String name)  {    super(name);  }  public Object applyN (Object[] args)  {    Numeric result;    int i = 0;    if (args.length == 1)      result = IntNum.one ();    else      result = (Numeric) (args[i++]);    for (; i < args.length;  i++)      result = result.div (args[i]);    if (asInteger)      result = ((RealNum) result).toExactInt(Numeric.TRUNCATE);    return result;   }  public Expression inline (ApplyExp exp, ExpWalker walker)  {    Expression folded = exp.inlineIfConstant(this, walker);    if (folded != exp)      return folded;    if (asInteger)      return exp;    Expression[] args = exp.getArgs();    if (args.length > 2)      return AddOp.pairwise(this, exp.getFunction(), args, walker);    if (args.length == 2)      {	Type type0 = args[0].getType();	Type type1 = args[1].getType();	int kind0 = AddOp.classify(type0);	int kind1 = AddOp.classify(type1);	if ((kind0 == 4 || type0.isSubtype(typeRatNum))	    && (kind1 == 4 || type1.isSubtype(typeRatNum)))	  return new ApplyExp(typeRatNum.getDeclaredMethod("divide", 2),			      args);	if (kind0 >= 3 && kind1 >= 3)	  {	    Expression opt = AddOp.primInline(108, exp);	    if (opt != exp)	      return opt;	  }	if (kind0 >= 2 &&  kind1 >= 2)	  return new ApplyExp(AddOp.typeRealNum.getDeclaredMethod("divide", 2),			      args);      }    return exp;  }  static ClassType typeRatNum = ClassType.make("gnu.math.RatNum");}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -