From ccddc73b6ac0ad6429812354ebe53ac592544529 Mon Sep 17 00:00:00 2001 From: Thomas Broyer Date: Tue, 14 Aug 2001 03:09:52 +0000 Subject: [PATCH] fixed compilation warnings due to recent changes to the extension * libxslt/xslt.c libxslt/xsltInternals.h libxslt/transform.c libxslt/extra.[ch] libxslt/extensions.c libxslt/preproc.[ch]: fixed compilation warnings due to recent changes to the extension framework. * libxslt/preproc.[ch] libexslt/common.c fixed the precomputation of *:document elements * libxslt/functions.h: fixed a compilation warning --- ChangeLog | 10 ++++++ libexslt/common.c | 4 ++- libxslt/extensions.c | 10 +++--- libxslt/extra.c | 64 ++++++++++++++++++++++++++------------ libxslt/extra.h | 9 +++--- libxslt/functions.h | 3 +- libxslt/preproc.c | 81 ++++++++++++++++++++++++------------------------- libxslt/preproc.h | 5 +++ libxslt/transform.c | 72 ++++++++++++++++++++++++++++--------------- libxslt/xslt.c | 21 ++++++++++++- libxslt/xsltInternals.h | 2 +- 11 files changed, 183 insertions(+), 98 deletions(-) diff --git a/ChangeLog b/ChangeLog index d2316ef..c0f6d6e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +Tue Aug 14 05:01:30 CEST 2001 Thomas Broyer + + * libxslt/xslt.c libxslt/xsltInternals.h libxslt/transform.c + libxslt/extra.[ch] libxslt/extensions.c libxslt/preproc.[ch]: + fixed compilation warnings due to recent changes to the extension + framework. + * libxslt/preproc.[ch] libexslt/common.c + fixed the precomputation of *:document elements + * libxslt/functions.h: fixed a compilation warning + Mon Aug 13 11:41:02 CEST 2001 Daniel Veillard * libxslt/xsltutils.c: applied fix suggested by Tom Moog diff --git a/libexslt/common.c b/libexslt/common.c index 1b2e474..ad83991 100644 --- a/libexslt/common.c +++ b/libexslt/common.c @@ -7,6 +7,7 @@ #include #include #include +#include #include "exslt.h" @@ -68,5 +69,6 @@ exsltCommonRegister (void) { exsltObjectTypeFunction); xsltRegisterExtModuleElement((const xmlChar *) "document", EXSLT_COMMON_NAMESPACE, - NULL, xsltDocumentElem); + (xsltPreComputeFunction) xsltDocumentComp, + (xsltTransformFunction) xsltDocumentElem); } diff --git a/libxslt/extensions.c b/libxslt/extensions.c index c621ae5..9e352f3 100644 --- a/libxslt/extensions.c +++ b/libxslt/extensions.c @@ -1343,7 +1343,7 @@ xsltExtElementPreCompTest(xsltStylesheetPtr style, xmlNodePtr inst, xsltPrintErrorContext(NULL, NULL, inst); xsltGenericError(xsltGenericErrorContext, "xsltExtElementTest: no transformation context\n"); - return; + return (NULL); } if (testStyleData == NULL) { xsltGenericDebug(xsltGenericDebugContext, @@ -1351,19 +1351,19 @@ xsltExtElementPreCompTest(xsltStylesheetPtr style, xmlNodePtr inst, " calling xsltStyleGetExtData\n"); xsltStyleGetExtData(style, (const xmlChar *) XSLT_DEFAULT_URL); if (testStyleData == NULL) { - xsltPrintErrorContext(NULL, NULL, inst); + xsltPrintErrorContext(NULL, style, inst); xsltGenericError(xsltGenericErrorContext, "xsltExtElementPreCompTest: not initialized\n"); style->errors++; - return; + return (NULL); } } if (inst == NULL) { - xsltPrintErrorContext(NULL, NULL, inst); + xsltPrintErrorContext(NULL, style, inst); xsltGenericError(xsltGenericErrorContext, "xsltExtElementPreCompTest: no instruction\n"); style->errors++; - return; + return (NULL); } ret = xsltNewElemPreComp (style, inst, function); return (ret); diff --git a/libxslt/extra.c b/libxslt/extra.c index fb03593..36c9501 100644 --- a/libxslt/extra.c +++ b/libxslt/extra.c @@ -33,6 +33,7 @@ #include "variables.h" #include "transform.h" #include "extra.h" +#include "preproc.h" #ifdef WITH_XSLT_DEBUG #define WITH_XSLT_DEBUG_EXTRA @@ -268,28 +269,53 @@ xsltFunctionLocalTime(xmlXPathParserContextPtr ctxt, int nargs) { * xsltRegisterExtras: * @ctxt: a XSLT process context * + * Registers the built-in extensions. This function is deprecated, use + * xsltRegisterAllExtras instead. + */ +void +xsltRegisterExtras(xsltTransformContextPtr ctxt ATTRIBUTE_UNUSED) { + xsltRegisterAllExtras(); +} + +/** + * xsltRegisterAllExtras: + * * Registers the built-in extensions */ void -xsltRegisterExtras(xsltTransformContextPtr ctxt) { - xsltRegisterExtFunction(ctxt, (const xmlChar *) "node-set", - XSLT_LIBXSLT_NAMESPACE, xsltFunctionNodeSet); - xsltRegisterExtFunction(ctxt, (const xmlChar *) "node-set", - XSLT_SAXON_NAMESPACE, xsltFunctionNodeSet); - xsltRegisterExtFunction(ctxt, (const xmlChar *) "node-set", - XSLT_XT_NAMESPACE, xsltFunctionNodeSet); +xsltRegisterAllExtras (void) { + xsltRegisterExtModuleFunction((const xmlChar *) "node-set", + XSLT_LIBXSLT_NAMESPACE, + xsltFunctionNodeSet); + xsltRegisterExtModuleFunction((const xmlChar *) "node-set", + XSLT_SAXON_NAMESPACE, + xsltFunctionNodeSet); + xsltRegisterExtModuleFunction((const xmlChar *) "node-set", + XSLT_XT_NAMESPACE, + xsltFunctionNodeSet); #ifdef WITH_LOCALTIME - xsltRegisterExtFunction(ctxt, (const xmlChar *) "localTime", - XSLT_NORM_SAXON_NAMESPACE, xsltFunctionLocalTime); + xsltRegisterExtModuleFunction((const xmlChar *) "localTime", + XSLT_NORM_SAXON_NAMESPACE, + xsltFunctionLocalTime); #endif - xsltRegisterExtElement(ctxt, (const xmlChar *) "debug", - XSLT_LIBXSLT_NAMESPACE, xsltDebug); - xsltRegisterExtElement(ctxt, (const xmlChar *) "output", - XSLT_SAXON_NAMESPACE, xsltDocumentElem); - xsltRegisterExtElement(ctxt, (const xmlChar *) "write", - XSLT_XALAN_NAMESPACE, xsltDocumentElem); - xsltRegisterExtElement(ctxt, (const xmlChar *) "document", - XSLT_XT_NAMESPACE, xsltDocumentElem); - xsltRegisterExtElement(ctxt, (const xmlChar *) "document", - XSLT_NAMESPACE, xsltDocumentElem); + xsltRegisterExtModuleElement((const xmlChar *) "debug", + XSLT_LIBXSLT_NAMESPACE, + NULL, + (xsltTransformFunction) xsltDebug); + xsltRegisterExtModuleElement((const xmlChar *) "output", + XSLT_SAXON_NAMESPACE, + xsltDocumentComp, + (xsltTransformFunction) xsltDocumentElem); + xsltRegisterExtModuleElement((const xmlChar *) "write", + XSLT_XALAN_NAMESPACE, + xsltDocumentComp, + (xsltTransformFunction) xsltDocumentElem); + xsltRegisterExtModuleElement((const xmlChar *) "document", + XSLT_XT_NAMESPACE, + xsltDocumentComp, + (xsltTransformFunction) xsltDocumentElem); + xsltRegisterExtModuleElement((const xmlChar *) "document", + XSLT_NAMESPACE, + xsltDocumentComp, + (xsltTransformFunction) xsltDocumentElem); } diff --git a/libxslt/extra.h b/libxslt/extra.h index 5bc84cd..6db0f65 100644 --- a/libxslt/extra.h +++ b/libxslt/extra.h @@ -56,14 +56,15 @@ extern "C" { void xsltFunctionNodeSet (xmlXPathParserContextPtr ctxt, int nargs); - -void xsltRegisterExtras (xsltTransformContextPtr ctxt); - - void xsltDebug (xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, xsltStylePreCompPtr comp); + + +void xsltRegisterExtras (xsltTransformContextPtr ctxt); +void xsltRegisterAllExtras (void); + #ifdef __cplusplus } #endif diff --git a/libxslt/functions.h b/libxslt/functions.h index 3d0d59f..98e13e6 100644 --- a/libxslt/functions.h +++ b/libxslt/functions.h @@ -25,7 +25,8 @@ extern "C" { */ #define XSLT_REGISTER_FUNCTION_LOOKUP(ctxt) \ xmlXPathRegisterFuncLookup((ctxt)->xpathCtxt, \ - xsltXPathFunctionLookup, (void *)(ctxt->xpathCtxt)); + (xmlXPathFuncLookupFunc) xsltXPathFunctionLookup, \ + (void *)(ctxt->xpathCtxt)); xmlXPathFunction xsltXPathFunctionLookup (xmlXPathContextPtr ctxt, diff --git a/libxslt/preproc.c b/libxslt/preproc.c index dd97847..e0d92e6 100644 --- a/libxslt/preproc.c +++ b/libxslt/preproc.c @@ -76,39 +76,40 @@ xsltNewStylePreComp(xsltStylesheetPtr style, xsltStyleType type) { cur->type = type; switch (cur->type) { case XSLT_FUNC_COPY: - cur->func = xsltCopy;break; + cur->func = (xsltTransformFunction) xsltCopy;break; case XSLT_FUNC_SORT: - cur->func = xsltSort;break; + cur->func = (xsltTransformFunction) xsltSort;break; case XSLT_FUNC_TEXT: - cur->func = xsltText;break; + cur->func = (xsltTransformFunction) xsltText;break; case XSLT_FUNC_ELEMENT: - cur->func = xsltElement;break; + cur->func = (xsltTransformFunction) xsltElement;break; case XSLT_FUNC_ATTRIBUTE: - cur->func = xsltAttribute;break; + cur->func = (xsltTransformFunction) xsltAttribute;break; case XSLT_FUNC_COMMENT: - cur->func = xsltComment;break; + cur->func = (xsltTransformFunction) xsltComment;break; case XSLT_FUNC_PI: - cur->func = xsltProcessingInstruction;break; + cur->func = (xsltTransformFunction) xsltProcessingInstruction; + break; case XSLT_FUNC_COPYOF: - cur->func = xsltCopyOf;break; + cur->func = (xsltTransformFunction) xsltCopyOf;break; case XSLT_FUNC_VALUEOF: - cur->func = xsltValueOf;break; + cur->func = (xsltTransformFunction) xsltValueOf;break; case XSLT_FUNC_NUMBER: - cur->func = xsltNumber;break; + cur->func = (xsltTransformFunction) xsltNumber;break; case XSLT_FUNC_APPLYIMPORTS: - cur->func = xsltApplyImports;break; + cur->func = (xsltTransformFunction) xsltApplyImports;break; case XSLT_FUNC_CALLTEMPLATE: - cur->func = xsltCallTemplate;break; + cur->func = (xsltTransformFunction) xsltCallTemplate;break; case XSLT_FUNC_APPLYTEMPLATES: - cur->func = xsltApplyTemplates;break; + cur->func = (xsltTransformFunction) xsltApplyTemplates;break; case XSLT_FUNC_CHOOSE: - cur->func = xsltChoose;break; + cur->func = (xsltTransformFunction) xsltChoose;break; case XSLT_FUNC_IF: - cur->func = xsltIf;break; + cur->func = (xsltTransformFunction) xsltIf;break; case XSLT_FUNC_FOREACH: - cur->func = xsltForEach;break; + cur->func = (xsltTransformFunction) xsltForEach;break; case XSLT_FUNC_DOCUMENT: - cur->func = xsltDocumentElem;break; + cur->func = (xsltTransformFunction) xsltDocumentElem;break; case XSLT_FUNC_WITHPARAM: cur->func = NULL;break; case XSLT_FUNC_PARAM: @@ -126,7 +127,7 @@ xsltNewStylePreComp(xsltStylesheetPtr style, xsltStyleType type) { } } cur->next = style->preComps; - style->preComps = cur; + style->preComps = (xsltElemPreCompPtr) cur; return(cur); } @@ -195,8 +196,9 @@ xsltFreeStylePreComp(xsltStylePreCompPtr comp) { * * Pre process an XSLT-1.1 document element */ -static void -xsltDocumentComp(xsltStylesheetPtr style, xmlNodePtr inst) { +xsltElemPreCompPtr +xsltDocumentComp(xsltStylesheetPtr style, xmlNodePtr inst, + xsltTransformFunction function ATTRIBUTE_UNUSED) { xsltStylePreCompPtr comp; xmlChar *filename = NULL; xmlChar *base = NULL; @@ -204,8 +206,7 @@ xsltDocumentComp(xsltStylesheetPtr style, xmlNodePtr inst) { comp = xsltNewStylePreComp(style, XSLT_FUNC_DOCUMENT); if (comp == NULL) - return; - inst->_private = comp; + return (NULL); comp->inst = inst; comp->ver11 = 0; @@ -274,6 +275,8 @@ error: xmlFree(base); if (filename != NULL) xmlFree(filename); + + return ((xsltElemPreCompPtr) comp); } /************************************************************************ @@ -1206,7 +1209,7 @@ xsltParamComp(xsltStylesheetPtr style, xmlNodePtr inst) { */ void xsltFreeStylePreComps(xsltStylesheetPtr style) { - xsltStylePreCompPtr cur, next; + xsltElemPreCompPtr cur, next; if (style == NULL) return; @@ -1214,9 +1217,9 @@ xsltFreeStylePreComps(xsltStylesheetPtr style) { while (cur != NULL) { next = cur->next; if (cur->type == XSLT_FUNC_EXTENSION) - ((xsltElemPreCompPtr)cur)->free(cur); + cur->free(cur); else - xsltFreeStylePreComp(cur); + xsltFreeStylePreComp((xsltStylePreCompPtr) cur); cur = next; } } @@ -1321,7 +1324,8 @@ xsltStylePreCompute(xsltStylesheetPtr style, xmlNodePtr inst) { /* no computation needed */ return; } else if (IS_XSLT_NAME(inst, "document")) { - xsltDocumentComp(style, inst); + inst->_private = (void *) xsltDocumentComp(style, inst, + (xsltTransformFunction) xsltDocumentElem); } else { xsltPrintErrorContext(NULL, style, inst); xsltGenericError(xsltGenericDebugContext, @@ -1332,7 +1336,7 @@ xsltStylePreCompute(xsltStylesheetPtr style, xmlNodePtr inst) { * Add the namespace lookup here, this code can be shared by * all precomputations. */ - cur = inst->_private; + cur = (xsltStylePreCompPtr) inst->_private; if (cur != NULL) { int i = 0; @@ -1344,19 +1348,14 @@ xsltStylePreCompute(xsltStylesheetPtr style, xmlNodePtr inst) { cur->nsNr = i; } } else { - /* FIXME */ - if (IS_XSLT_NAME(inst, "document")) { - xsltDocumentComp(style, inst); - } else { - inst->_private = - (void *) xsltPreComputeExtModuleElement(style, inst); - - /* - * Unknown element, maybe registered at the context - * level. Mark it for later recognition. - */ - if (inst->_private == NULL) - inst->_private = (void *) xsltExtMarker; - } + inst->_private = + (void *) xsltPreComputeExtModuleElement(style, inst); + + /* + * Unknown element, maybe registered at the context + * level. Mark it for later recognition. + */ + if (inst->_private == NULL) + inst->_private = (void *) xsltExtMarker; } } diff --git a/libxslt/preproc.h b/libxslt/preproc.h index cd7f203..1349132 100644 --- a/libxslt/preproc.h +++ b/libxslt/preproc.h @@ -21,6 +21,11 @@ extern "C" { */ extern const xmlChar *xsltExtMarker; +xsltElemPreCompPtr + xsltDocumentComp (xsltStylesheetPtr style, + xmlNodePtr inst, + xsltTransformFunction function); + void xsltStylePreCompute (xsltStylesheetPtr style, xmlNodePtr inst); void xsltFreeStylePreComps (xsltStylesheetPtr style); diff --git a/libxslt/transform.c b/libxslt/transform.c index a0ae7ad..438dee0 100644 --- a/libxslt/transform.c +++ b/libxslt/transform.c @@ -1085,7 +1085,7 @@ xsltApplyOneTemplate(xsltTransformContextPtr ctxt, xmlNodePtr node, if (info->func != NULL) { ctxt->insert = insert; - info->func(ctxt, node, cur, info); + info->func(ctxt, node, cur, (xsltElemPreCompPtr) info); ctxt->insert = oldInsert; goto skip_children; } @@ -3163,7 +3163,6 @@ xsltApplyStylesheetInternal(xsltStylesheetPtr style, xmlDocPtr doc, if (profile != NULL) ctxt->profile = 1; - xsltRegisterExtras(ctxt); if (output != NULL) ctxt->outputFile = output; else @@ -3476,37 +3475,53 @@ void xsltRegisterAllElement(xsltTransformContextPtr ctxt) { xsltRegisterExtElement(ctxt, (const xmlChar *) "apply-templates", - XSLT_NAMESPACE, xsltApplyTemplates); + XSLT_NAMESPACE, + (xsltTransformFunction) xsltApplyTemplates); xsltRegisterExtElement(ctxt, (const xmlChar *) "apply-imports", - XSLT_NAMESPACE, xsltApplyImports); + XSLT_NAMESPACE, + (xsltTransformFunction) xsltApplyImports); xsltRegisterExtElement(ctxt, (const xmlChar *) "call-template", - XSLT_NAMESPACE, xsltCallTemplate); + XSLT_NAMESPACE, + (xsltTransformFunction) xsltCallTemplate); xsltRegisterExtElement(ctxt, (const xmlChar *) "element", - XSLT_NAMESPACE, xsltElement); + XSLT_NAMESPACE, + (xsltTransformFunction) xsltElement); xsltRegisterExtElement(ctxt, (const xmlChar *) "attribute", - XSLT_NAMESPACE, xsltAttribute); + XSLT_NAMESPACE, + (xsltTransformFunction) xsltAttribute); xsltRegisterExtElement(ctxt, (const xmlChar *) "text", - XSLT_NAMESPACE, xsltText); + XSLT_NAMESPACE, + (xsltTransformFunction) xsltText); xsltRegisterExtElement(ctxt, (const xmlChar *) "processing-instruction", - XSLT_NAMESPACE, xsltProcessingInstruction); + XSLT_NAMESPACE, + (xsltTransformFunction) xsltProcessingInstruction); xsltRegisterExtElement(ctxt, (const xmlChar *) "comment", - XSLT_NAMESPACE, xsltComment); + XSLT_NAMESPACE, + (xsltTransformFunction) xsltComment); xsltRegisterExtElement(ctxt, (const xmlChar *) "copy", - XSLT_NAMESPACE, xsltCopy); + XSLT_NAMESPACE, + (xsltTransformFunction) xsltCopy); xsltRegisterExtElement(ctxt, (const xmlChar *) "value-of", - XSLT_NAMESPACE, xsltValueOf); + XSLT_NAMESPACE, + (xsltTransformFunction) xsltValueOf); xsltRegisterExtElement(ctxt, (const xmlChar *) "number", - XSLT_NAMESPACE, xsltNumber); + XSLT_NAMESPACE, + (xsltTransformFunction) xsltNumber); xsltRegisterExtElement(ctxt, (const xmlChar *) "for-each", - XSLT_NAMESPACE, xsltForEach); + XSLT_NAMESPACE, + (xsltTransformFunction) xsltForEach); xsltRegisterExtElement(ctxt, (const xmlChar *) "if", - XSLT_NAMESPACE, xsltIf); + XSLT_NAMESPACE, + (xsltTransformFunction) xsltIf); xsltRegisterExtElement(ctxt, (const xmlChar *) "choose", - XSLT_NAMESPACE, xsltChoose); + XSLT_NAMESPACE, + (xsltTransformFunction) xsltChoose); xsltRegisterExtElement(ctxt, (const xmlChar *) "sort", - XSLT_NAMESPACE, xsltSort); + XSLT_NAMESPACE, + (xsltTransformFunction) xsltSort); xsltRegisterExtElement(ctxt, (const xmlChar *) "copy-of", - XSLT_NAMESPACE, xsltCopyOf); + XSLT_NAMESPACE, + (xsltTransformFunction) xsltCopyOf); xsltRegisterExtElement(ctxt, (const xmlChar *) "message", XSLT_NAMESPACE, (xsltTransformFunction) xsltMessage); @@ -3515,18 +3530,25 @@ xsltRegisterAllElement(xsltTransformContextPtr ctxt) * Those don't have callable entry points but are registered anyway */ xsltRegisterExtElement(ctxt, (const xmlChar *) "variable", - XSLT_NAMESPACE, xsltDebug); + XSLT_NAMESPACE, + (xsltTransformFunction) xsltDebug); xsltRegisterExtElement(ctxt, (const xmlChar *) "param", - XSLT_NAMESPACE, xsltDebug); + XSLT_NAMESPACE, + (xsltTransformFunction) xsltDebug); xsltRegisterExtElement(ctxt, (const xmlChar *) "with-param", - XSLT_NAMESPACE, xsltDebug); + XSLT_NAMESPACE, + (xsltTransformFunction) xsltDebug); xsltRegisterExtElement(ctxt, (const xmlChar *) "decimal-format", - XSLT_NAMESPACE, xsltDebug); + XSLT_NAMESPACE, + (xsltTransformFunction) xsltDebug); xsltRegisterExtElement(ctxt, (const xmlChar *) "when", - XSLT_NAMESPACE, xsltDebug); + XSLT_NAMESPACE, + (xsltTransformFunction) xsltDebug); xsltRegisterExtElement(ctxt, (const xmlChar *) "otherwise", - XSLT_NAMESPACE, xsltDebug); + XSLT_NAMESPACE, + (xsltTransformFunction) xsltDebug); xsltRegisterExtElement(ctxt, (const xmlChar *) "fallback", - XSLT_NAMESPACE, xsltDebug); + XSLT_NAMESPACE, + (xsltTransformFunction) xsltDebug); } diff --git a/libxslt/xslt.c b/libxslt/xslt.c index 0042498..5e0dca8 100644 --- a/libxslt/xslt.c +++ b/libxslt/xslt.c @@ -38,6 +38,7 @@ #include "documents.h" #include "extensions.h" #include "preproc.h" +#include "extra.h" #ifdef WITH_XSLT_DEBUG #define WITH_XSLT_DEBUG_PARSING @@ -120,6 +121,22 @@ PUSH_AND_POP(static, xmlChar *, exclPrefix) ************************************************************************/ /** + * xsltInit: + * + * Initializes the processor (e.g. registers built-in extensions, + * etc.) + */ +static void +xsltInit (void) { + static int initialized = 0; + + if (initialized == 0) { + initialized = 1; + xsltRegisterAllExtras(); + } +} + +/** * xsltIsBlank: * @str: a string * @@ -329,6 +346,9 @@ xsltNewStylesheet(void) { cur->exclPrefixMax = 0; cur->exclPrefixTab = NULL; cur->extInfos = NULL; + + xsltInit(); + return(cur); } @@ -2125,4 +2145,3 @@ xsltLoadStylesheetPI(xmlDocPtr doc) { } return(ret); } - diff --git a/libxslt/xsltInternals.h b/libxslt/xsltInternals.h index 0e5f8fb..08e5805 100644 --- a/libxslt/xsltInternals.h +++ b/libxslt/xsltInternals.h @@ -339,7 +339,7 @@ struct _xsltStylesheet { /* * Precomputed blocks */ - xsltStylePreCompPtr preComps; /* list of precomputed blocks */ + xsltElemPreCompPtr preComps;/* list of precomputed blocks */ int warnings; /* number of warnings found at compilation */ int errors; /* number of errors found at compilation */ -- 2.7.4