< prev index next >

src/com/sun/org/apache/xalan/internal/xsltc/compiler/WithParam.java

Print this page
rev 1481 : 8169112: java.lang.VerifyError: (class: GregorSamsa, method: template-bash signature: (LGregorSamsa8;)V) Register 10 contains wrong type
Reviewed-by: joehw

*** 126,137 **** ErrorMsg err = new ErrorMsg(ErrorMsg.INVALID_QNAME_ERR, name, this); parser.reportError(Constants.ERROR, err); } setName(parser.getQNameIgnoreDefaultNs(name)); ! } ! else { reportError(this, parser, ErrorMsg.REQUIRED_ATTR_ERR, "name"); } final String select = getAttribute("select"); if (select.length() > 0) { --- 126,136 ---- ErrorMsg err = new ErrorMsg(ErrorMsg.INVALID_QNAME_ERR, name, this); parser.reportError(Constants.ERROR, err); } setName(parser.getQNameIgnoreDefaultNs(name)); ! } else { reportError(this, parser, ErrorMsg.REQUIRED_ATTR_ERR, "name"); } final String select = getAttribute("select"); if (select.length() > 0) {
*** 149,187 **** if (_select != null) { final Type tselect = _select.typeCheck(stable); if (tselect instanceof ReferenceType == false) { _select = new CastExpr(_select, Type.Reference); } ! } ! else { typeCheckContents(stable); } return Type.Void; } /** * Compile the value of the parameter, which is either in an expression in * a 'select' attribute, or in the with-param element's body */ public void translateValue(ClassGenerator classGen, ! MethodGenerator methodGen) { // Compile expression is 'select' attribute if present if (_select != null) { _select.translate(classGen, methodGen); _select.startIterator(classGen, methodGen); - } // If not, compile result tree from parameter body if present. // Store result tree into local variable for releasing it later ! else if (hasContents()) { final InstructionList il = methodGen.getInstructionList(); compileResultTree(classGen, methodGen); ! _domAdapter = methodGen.addLocalVariable2("@" + _escapedName, Type.ResultTree.toJCType(), il.getEnd()); il.append(DUP); il.append(new ASTORE(_domAdapter.getIndex())); - } // If neither are present then store empty string in parameter slot ! else { final ConstantPoolGen cpg = classGen.getConstantPool(); final InstructionList il = methodGen.getInstructionList(); il.append(new PUSH(cpg, Constants.EMPTYSTRING)); } } --- 148,186 ---- if (_select != null) { final Type tselect = _select.typeCheck(stable); if (tselect instanceof ReferenceType == false) { _select = new CastExpr(_select, Type.Reference); } ! } else { typeCheckContents(stable); } return Type.Void; } /** * Compile the value of the parameter, which is either in an expression in * a 'select' attribute, or in the with-param element's body */ public void translateValue(ClassGenerator classGen, ! MethodGenerator methodGen) ! { // Compile expression is 'select' attribute if present if (_select != null) { _select.translate(classGen, methodGen); _select.startIterator(classGen, methodGen); // If not, compile result tree from parameter body if present. // Store result tree into local variable for releasing it later ! } else if (hasContents()) { final InstructionList il = methodGen.getInstructionList(); compileResultTree(classGen, methodGen); ! _domAdapter = methodGen.addLocalVariable2("@" + _escapedName, ! Type.ResultTree.toJCType(), ! il.getEnd()); il.append(DUP); il.append(new ASTORE(_domAdapter.getIndex())); // If neither are present then store empty string in parameter slot ! } else { final ConstantPoolGen cpg = classGen.getConstantPool(); final InstructionList il = methodGen.getInstructionList(); il.append(new PUSH(cpg, Constants.EMPTYSTRING)); } }
*** 221,244 **** } /** * Release the compiled result tree. */ ! public void releaseResultTree(ClassGenerator classGen, MethodGenerator methodGen) { if (_domAdapter != null) { final ConstantPoolGen cpg = classGen.getConstantPool(); final InstructionList il = methodGen.getInstructionList(); ! if (classGen.getStylesheet().callsNodeset() && classGen.getDOMClass().equals(MULTI_DOM_CLASS)) { ! final int removeDA = cpg.addMethodref(MULTI_DOM_CLASS, "removeDOMAdapter", "(" + DOM_ADAPTER_SIG + ")V"); il.append(methodGen.loadDOM()); il.append(new CHECKCAST(cpg.addClass(MULTI_DOM_CLASS))); il.append(new ALOAD(_domAdapter.getIndex())); il.append(new CHECKCAST(cpg.addClass(DOM_ADAPTER_CLASS))); il.append(new INVOKEVIRTUAL(removeDA)); } ! final int release = cpg.addInterfaceMethodref(DOM_IMPL_CLASS, "release", "()V"); il.append(new ALOAD(_domAdapter.getIndex())); il.append(new INVOKEINTERFACE(release, 1)); _domAdapter = null; ! } ! } } --- 220,252 ---- } /** * Release the compiled result tree. */ ! public void releaseResultTree(ClassGenerator classGen, ! MethodGenerator methodGen) ! { if (_domAdapter != null) { final ConstantPoolGen cpg = classGen.getConstantPool(); final InstructionList il = methodGen.getInstructionList(); ! if (classGen.getStylesheet().callsNodeset() && ! classGen.getDOMClass().equals(MULTI_DOM_CLASS)) ! { ! final int removeDA = ! cpg.addMethodref(MULTI_DOM_CLASS, "removeDOMAdapter", ! "(" + DOM_ADAPTER_SIG + ")V"); il.append(methodGen.loadDOM()); il.append(new CHECKCAST(cpg.addClass(MULTI_DOM_CLASS))); il.append(new ALOAD(_domAdapter.getIndex())); il.append(new CHECKCAST(cpg.addClass(DOM_ADAPTER_CLASS))); il.append(new INVOKEVIRTUAL(removeDA)); } ! final int release = ! cpg.addInterfaceMethodref(DOM_IMPL_CLASS, "release", "()V"); il.append(new ALOAD(_domAdapter.getIndex())); il.append(new INVOKEINTERFACE(release, 1)); + _domAdapter.setEnd(il.getEnd()); + methodGen.removeLocalVariable(_domAdapter); _domAdapter = null; ! } ! } }
< prev index next >