Lines 142-148
Link Here
|
142 |
cur = (xsltCompMatchPtr) xmlMalloc(sizeof(xsltCompMatch)); |
142 |
cur = (xsltCompMatchPtr) xmlMalloc(sizeof(xsltCompMatch)); |
143 |
if (cur == NULL) { |
143 |
if (cur == NULL) { |
144 |
xsltTransformError(NULL, NULL, NULL, |
144 |
xsltTransformError(NULL, NULL, NULL, |
145 |
"xsltNewCompMatch : malloc failed\n"); |
145 |
"xsltNewCompMatch : out of memory error\n"); |
146 |
return(NULL); |
146 |
return(NULL); |
147 |
} |
147 |
} |
148 |
memset(cur, 0, sizeof(xsltCompMatch)); |
148 |
memset(cur, 0, sizeof(xsltCompMatch)); |
Lines 2066-2072
Link Here
|
2066 |
int |
2066 |
int |
2067 |
xsltAddTemplate(xsltStylesheetPtr style, xsltTemplatePtr cur, |
2067 |
xsltAddTemplate(xsltStylesheetPtr style, xsltTemplatePtr cur, |
2068 |
const xmlChar *mode, const xmlChar *modeURI) { |
2068 |
const xmlChar *mode, const xmlChar *modeURI) { |
2069 |
xsltCompMatchPtr pat, list, *top = NULL, next; |
2069 |
xsltCompMatchPtr pat, list, next; |
|
|
2070 |
/* |
2071 |
* 'top' will point to style->xxxMatch ptr - declaring as 'void' |
2072 |
* avoids gcc 'type-punned pointer' warning. |
2073 |
*/ |
2074 |
void **top = NULL; |
2070 |
const xmlChar *name = NULL; |
2075 |
const xmlChar *name = NULL; |
2071 |
float priority; /* the priority */ |
2076 |
float priority; /* the priority */ |
2072 |
|
2077 |
|
Lines 2076-2081
Link Here
|
2076 |
priority = cur->priority; |
2081 |
priority = cur->priority; |
2077 |
pat = xsltCompilePatternInternal(cur->match, style->doc, cur->elem, |
2082 |
pat = xsltCompilePatternInternal(cur->match, style->doc, cur->elem, |
2078 |
style, NULL, 1); |
2083 |
style, NULL, 1); |
|
|
2084 |
if (pat == NULL) |
2085 |
return(-1); |
2079 |
while (pat) { |
2086 |
while (pat) { |
2080 |
next = pat->next; |
2087 |
next = pat->next; |
2081 |
pat->next = NULL; |
2088 |
pat->next = NULL; |
Lines 2097-2120
Link Here
|
2097 |
if (pat->steps[0].value != NULL) |
2104 |
if (pat->steps[0].value != NULL) |
2098 |
name = pat->steps[0].value; |
2105 |
name = pat->steps[0].value; |
2099 |
else |
2106 |
else |
2100 |
top = (xsltCompMatchPtr *) &(style->attrMatch); |
2107 |
top = &(style->attrMatch); |
2101 |
break; |
2108 |
break; |
2102 |
case XSLT_OP_CHILD: |
2109 |
case XSLT_OP_CHILD: |
2103 |
case XSLT_OP_PARENT: |
2110 |
case XSLT_OP_PARENT: |
2104 |
case XSLT_OP_ANCESTOR: |
2111 |
case XSLT_OP_ANCESTOR: |
2105 |
top = (xsltCompMatchPtr *) &(style->elemMatch); |
2112 |
top = &(style->elemMatch); |
2106 |
break; |
2113 |
break; |
2107 |
case XSLT_OP_ROOT: |
2114 |
case XSLT_OP_ROOT: |
2108 |
top = (xsltCompMatchPtr *) &(style->rootMatch); |
2115 |
top = &(style->rootMatch); |
2109 |
break; |
2116 |
break; |
2110 |
case XSLT_OP_KEY: |
2117 |
case XSLT_OP_KEY: |
2111 |
top = (xsltCompMatchPtr *) &(style->keyMatch); |
2118 |
top = &(style->keyMatch); |
2112 |
break; |
2119 |
break; |
2113 |
case XSLT_OP_ID: |
2120 |
case XSLT_OP_ID: |
2114 |
/* TODO optimize ID !!! */ |
2121 |
/* TODO optimize ID !!! */ |
2115 |
case XSLT_OP_NS: |
2122 |
case XSLT_OP_NS: |
2116 |
case XSLT_OP_ALL: |
2123 |
case XSLT_OP_ALL: |
2117 |
top = (xsltCompMatchPtr *) &(style->elemMatch); |
2124 |
top = &(style->elemMatch); |
2118 |
break; |
2125 |
break; |
2119 |
case XSLT_OP_END: |
2126 |
case XSLT_OP_END: |
2120 |
case XSLT_OP_PREDICATE: |
2127 |
case XSLT_OP_PREDICATE: |
Lines 2130-2149
Link Here
|
2130 |
if (pat->steps[0].value != NULL) |
2137 |
if (pat->steps[0].value != NULL) |
2131 |
name = pat->steps[0].value; |
2138 |
name = pat->steps[0].value; |
2132 |
else |
2139 |
else |
2133 |
top = (xsltCompMatchPtr *) &(style->piMatch); |
2140 |
top = &(style->piMatch); |
2134 |
break; |
2141 |
break; |
2135 |
case XSLT_OP_COMMENT: |
2142 |
case XSLT_OP_COMMENT: |
2136 |
top = (xsltCompMatchPtr *) &(style->commentMatch); |
2143 |
top = &(style->commentMatch); |
2137 |
break; |
2144 |
break; |
2138 |
case XSLT_OP_TEXT: |
2145 |
case XSLT_OP_TEXT: |
2139 |
top = (xsltCompMatchPtr *) &(style->textMatch); |
2146 |
top = &(style->textMatch); |
2140 |
break; |
2147 |
break; |
2141 |
case XSLT_OP_ELEM: |
2148 |
case XSLT_OP_ELEM: |
2142 |
case XSLT_OP_NODE: |
2149 |
case XSLT_OP_NODE: |
2143 |
if (pat->steps[0].value != NULL) |
2150 |
if (pat->steps[0].value != NULL) |
2144 |
name = pat->steps[0].value; |
2151 |
name = pat->steps[0].value; |
2145 |
else |
2152 |
else |
2146 |
top = (xsltCompMatchPtr *) &(style->elemMatch); |
2153 |
top = &(style->elemMatch); |
2147 |
break; |
2154 |
break; |
2148 |
} |
2155 |
} |
2149 |
if (name != NULL) { |
2156 |
if (name != NULL) { |