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