Code code = context.getCode();
ConstantPool pool = code.getPool();
DataNode datanode = new DataNode(l_data);
if (_types != null) {
Source istrue = code.getSource();
Source isfalse = null;
int n = _types.childs();
boolean assigned = false;
for(int i=0; i<n; i++) {
if (_types.getChild(i).typeOf() != Node.EXPR_TYPE) {
_assignment.compile(context, datanode);
code.pop();
assigned = true;
}
}
for(int i=0; i<n; i++) {
if (isfalse != null) {
isfalse.bind();
}
Node child = _types.getChild(i);
if (child.typeOf() == Node.EXPR_TYPE) {
code.aload(l_data);
child.compile(context, Node.GET_TYPE);
code.invokevirtual(pool.addMethodRef(context.TYPE_ANY, "isInstanceOf", "(Lanvil/script/Type;)Z"));
} else {
child.compile(context, Node.GET_BOOLEAN);
}
isfalse = code.if_eq();
code.go_to(istrue);
}
istrue.bind();
if (!assigned) {
_assignment.compile(context, datanode);
code.pop();
}
_statement.compile(context);
handler.callFinally();
handler.jumpOut();
isfalse.bind();
} else {
_assignment.compile(context, datanode);
code.pop();
_statement.compile(context);