1 16 19 20 package org.apache.xalan.xsltc.compiler; 21 22 import java.util.Vector ; 23 24 import org.apache.bcel.generic.InstructionList; 25 import org.apache.xalan.xsltc.compiler.util.ClassGenerator; 26 import org.apache.xalan.xsltc.compiler.util.MethodGenerator; 27 import org.apache.xalan.xsltc.compiler.util.Type; 28 import org.apache.xalan.xsltc.compiler.util.TypeCheckError; 29 30 34 final class NumberCall extends FunctionCall { 35 36 public NumberCall(QName fname, Vector arguments) { 37 super(fname, arguments); 38 } 39 40 public Type typeCheck(SymbolTable stable) throws TypeCheckError { 41 if (argumentCount() > 0) { 42 argument().typeCheck(stable); 43 } 44 return _type = Type.Real; 45 } 46 47 public void translate(ClassGenerator classGen, MethodGenerator methodGen) { 48 final InstructionList il = methodGen.getInstructionList(); 49 Type targ; 50 51 if (argumentCount() == 0) { 52 il.append(methodGen.loadContextNode()); 53 targ = Type.Node; 54 } 55 else { 56 final Expression arg = argument(); 57 arg.translate(classGen, methodGen); 58 arg.startIterator(classGen, methodGen); 59 targ = arg.getType(); 60 } 61 62 if (!targ.identicalTo(Type.Real)) { 63 targ.translateTo(classGen, methodGen, Type.Real); 64 } 65 } 66 } 67 | Popular Tags |