Exemplo n.º 1
0
static HRESULT WINAPI unknode_appendChild(
    IXMLDOMNode *iface,
    IXMLDOMNode* newNode, IXMLDOMNode** outNewNode)
{
    unknode *This = unknode_from_IXMLDOMNode( iface );
    return node_append_child(&This->node, newNode, outNewNode);
}
Exemplo n.º 2
0
static HRESULT WINAPI domtext_appendChild(
    IXMLDOMText *iface,
    IXMLDOMNode *child, IXMLDOMNode **outChild)
{
    domtext *This = impl_from_IXMLDOMText( iface );
    TRACE("(%p)->(%p %p)\n", This, child, outChild);
    return node_append_child(&This->node, child, outChild);
}
Exemplo n.º 3
0
static HRESULT WINAPI entityref_appendChild(
    IXMLDOMEntityReference *iface,
    IXMLDOMNode *child, IXMLDOMNode **outChild)
{
    entityref *This = impl_from_IXMLDOMEntityReference( iface );
    TRACE("(%p)->(%p %p)\n", This, child, outChild);
    return node_append_child(&This->node, child, outChild);
}
Exemplo n.º 4
0
static HRESULT WINAPI dom_pi_appendChild(
    IXMLDOMProcessingInstruction *iface,
    IXMLDOMNode *child, IXMLDOMNode **outChild)
{
    dom_pi *This = impl_from_IXMLDOMProcessingInstruction( iface );
    TRACE("(%p)->(%p %p)\n", This, child, outChild);
    return node_append_child(&This->node, child, outChild);
}
Exemplo n.º 5
0
static HRESULT WINAPI domcdata_appendChild(
    IXMLDOMCDATASection *iface,
    IXMLDOMNode *child, IXMLDOMNode **outChild)
{
    domcdata *This = impl_from_IXMLDOMCDATASection( iface );
    TRACE("(%p)->(%p %p)\n", This, child, outChild);
    return node_append_child(&This->node, child, outChild);
}
Exemplo n.º 6
0
static HRESULT WINAPI domfrag_appendChild(
    IXMLDOMDocumentFragment *iface,
    IXMLDOMNode *child, IXMLDOMNode **outChild)
{
    domfrag *This = impl_from_IXMLDOMDocumentFragment( iface );
    TRACE("(%p)->(%p %p)\n", This, child, outChild);
    return node_append_child(&This->node, child, outChild);
}
Exemplo n.º 7
0
node_t* node_add_return(node_t*n)
{
    if(n->type != &node_return) {
        node_t*p = node_new(&node_return, n->parent);
        node_append_child(p, n);
        return p;
    }
    return n;
}
Exemplo n.º 8
0
node_t* node_insert_brackets(node_t*n) 
{
    int t;
    for(t=0;t<n->num_children;t++) {
        node_set_child(n, t, node_insert_brackets(n->child[t]));
    }
    if(n->parent) {
        if(lower_precedence(n, n->parent)) {
            node_t*p = node_new(&node_brackets, n->parent);
            node_append_child(p, n);
            return p;
        }
    }
    return n;
}
Exemplo n.º 9
0
node_t* node_do_cascade_returns(node_t*n) 
{
    switch(node_get_opcode(n)) {
        case opcode_node_block:
            node_set_child(n, n->num_children-1, node_do_cascade_returns(n->child[n->num_children-1]));
            return n;
        case opcode_node_if:
            node_set_child(n, 1, node_do_cascade_returns(n->child[1]));
            node_set_child(n, 2, node_do_cascade_returns(n->child[2]));
            return n;
        case opcode_node_nop:
        case opcode_node_setlocal:
        case opcode_node_inclocal:
            return n;
        case opcode_node_return:
            return n;
        default: {
            node_t*p = node_new(&node_return, n->parent);
            node_append_child(p, n);
            return p;
        }
    }
}
Exemplo n.º 10
0
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;
}