static HRESULT WINAPI unknode_removeChild( IXMLDOMNode *iface, IXMLDOMNode* domNode, IXMLDOMNode** oldNode) { unknode *This = unknode_from_IXMLDOMNode( iface ); return node_remove_child(&This->node, domNode, oldNode); }
static HRESULT WINAPI domtext_removeChild( IXMLDOMText *iface, IXMLDOMNode *child, IXMLDOMNode **oldChild) { domtext *This = impl_from_IXMLDOMText( iface ); TRACE("(%p)->(%p %p)\n", This, child, oldChild); return node_remove_child(&This->node, child, oldChild); }
static HRESULT WINAPI entityref_removeChild( IXMLDOMEntityReference *iface, IXMLDOMNode *child, IXMLDOMNode **oldChild) { entityref *This = impl_from_IXMLDOMEntityReference( iface ); TRACE("(%p)->(%p %p)\n", This, child, oldChild); return node_remove_child(&This->node, child, oldChild); }
static HRESULT WINAPI dom_pi_removeChild( IXMLDOMProcessingInstruction *iface, IXMLDOMNode *child, IXMLDOMNode **oldChild) { dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface ); TRACE("(%p)->(%p %p)\n", This, child, oldChild); return node_remove_child(&This->node, child, oldChild); }
static HRESULT WINAPI domcdata_removeChild( IXMLDOMCDATASection *iface, IXMLDOMNode *child, IXMLDOMNode **oldChild) { domcdata *This = impl_from_IXMLDOMCDATASection( iface ); TRACE("(%p)->(%p %p)\n", This, child, oldChild); return node_remove_child(&This->node, child, oldChild); }
static HRESULT WINAPI domfrag_removeChild( IXMLDOMDocumentFragment *iface, IXMLDOMNode *child, IXMLDOMNode **oldChild) { domfrag *This = impl_from_IXMLDOMDocumentFragment( iface ); TRACE("(%p)->(%p %p)\n", This, child, oldChild); return node_remove_child(&This->node, child, oldChild); }
node_t* node_optimize2(node_t*n, bool*again) { int t,num; switch(node_get_opcode(n)) { case opcode_node_block: for(t=0;t<n->num_children;t++) { if(n->child[t]->type == &node_nop) { node_remove_child(n, t--); } } break; case opcode_node_in: /* convert a in [x] to a == x */ if(node_is_array(n->child[1]) && n->child[1]->value.a->size == 1) { node_t*new_node = node_new(&node_equals, n->parent); node_t*constant = node_new_with_args(&node_constant, n->child[1]->value.a->entries[0]); node_append_child(new_node, n->child[0]); node_append_child(new_node, constant); node_destroy_self(n); return new_node; } break; case opcode_node_mul: /* convert a * 1.0 or 1.0 * a to a */ if(n->child[1]->type == &node_float && float_is_one(n->child[1]->value.f)) { node_t*new_node = n->child[0]; node_destroy(n->child[1]); node_destroy_self(n); return new_node; } if(n->child[0]->type == &node_float && float_is_one(n->child[0]->value.f)) { node_t*new_node = n->child[1]; node_destroy(n->child[0]); node_destroy_self(n); return new_node; } /* convert a * 0.0 or 0.0 * a to 0.0 */ if(n->child[0]->type == &node_float && float_is_zero(n->child[0]->value.f)) { node_t*new_node = n->child[0]; node_destroy(n->child[1]); node_destroy_self(n); return new_node; } if(n->child[1]->type == &node_float && float_is_zero(n->child[1]->value.f)) { node_t*new_node = n->child[1]; node_destroy(n->child[0]); node_destroy_self(n); return new_node; } break; case opcode_node_sub: /* convert a - 0.0 to a */ if(n->child[1]->type == &node_float && float_is_zero(n->child[1]->value.f)) { node_t*new_node = n->child[0]; node_destroy_self(n); return new_node; } break; case opcode_node_div: /* convert a / 1.0 to a */ if(n->child[1]->type == &node_float && float_is_one(n->child[1]->value.f)) { node_t*new_node = n->child[0]; node_destroy_self(n); return new_node; } break; case opcode_node_add: /* convert a + 0.0 to a */ num = 0; for(t=0;t<n->num_children;t++) { node_set_child(n, num, n->child[t]); if(n->child[t]->type != &node_float || !float_is_zero(n->child[t]->value.f)) { num++; } } if(!num) { node_set_child(n, num++, node_new_with_args(&node_float, 0.0)); } n->num_children = num; if(num==1) { node_t*new_node = n->child[0]; node_destroy_self(n); return new_node; } break; case opcode_node_if: /* convert if c then a else a to a */ if(node_equals_node(n->child[1], n->child[2])) { node_t*new_node = n->child[1]; node_destroy_self(n); return new_node; } break; case opcode_node_setlocal: /* convert setlocal i getlocal i to nop */ if(n->child[0]->type == &node_getlocal) { if(n->child[0]->value.i == n->value.i) { node_t*new_node = node_new(&node_nop, n->parent); node_destroy(n); *again = true; return new_node; } } break; } for(t=0;t<n->num_children;t++) { node_set_child(n, t, node_optimize2(n->child[t], again)); } return n; }