< 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 >