diff options
Diffstat (limited to 'kxsldbg/kxsldbgpart/libxsldbg/callstack.cpp')
| -rw-r--r-- | kxsldbg/kxsldbgpart/libxsldbg/callstack.cpp | 509 |
1 files changed, 0 insertions, 509 deletions
diff --git a/kxsldbg/kxsldbgpart/libxsldbg/callstack.cpp b/kxsldbg/kxsldbgpart/libxsldbg/callstack.cpp deleted file mode 100644 index cd9e320a..00000000 --- a/kxsldbg/kxsldbgpart/libxsldbg/callstack.cpp +++ /dev/null @@ -1,509 +0,0 @@ - -/*************************************************************************** - callstack.c - call stack implementation - ------------------- - begin : Fri Nov 2 2001 - copyright : (C) 2001 by Keith Isdale - email : k_isdale@tpg.com.au - ***************************************************************************/ - -#include "xsldbg.h" -#include "utils.h" -#include "breakpoint.h" -#include "arraylist.h" -#include "callstack.h" -#include "xsldbgmsg.h" - - -/*------------------------------------------------------ - Private functions - -----------------------------------------------------*/ - -/** - * addCallInfo: - * @templateName: Template name to add - * @templateURI: TQName part of template name to add - * @modeName: Mode of template - * @modeURI: TQName part of node of template - * @url: The url for the template - * - * Add template "call" to call stack - * - * Returns A reference to the added info if successful, - * NULL otherwise - */ -callPointInfoPtr -addCallInfo(const xmlChar * templateName, const xmlChar *templateURI, - const xmlChar * modeName, const xmlChar* modeURI, const xmlChar * url); - - -/*------------------------------------------------------ - Xsl call stack related ------------------------------------------------------*/ - -/* keep track of the top and bottom of call stack*/ - -/* This is the major structure and contains a stack of call points */ -callPointPtr callStackBot, callStackTop; - -/* save memory by keep only one copy of data used for several - items on call stack */ -callPointInfoPtr callInfo; - -/* What frame depth are we to stop at */ -int stopDepth = -1; - - -/** - * callStackInit: - * - * Returns If callStack has been initialized properly and all - * memory required has been obtained, - * 0 otherwise - * - * Returns 1 if callStack has been initialized properly and all - * memory required has been obtained, - * 0 otherwise -*/ -int -callStackInit(void) -{ - - callInfo = (callPointInfoPtr) xmlMalloc(sizeof(callPointInfo)); - if (callInfo) { - callInfo->next = NULL; - callInfo->templateName = NULL; - callInfo->templateURI = NULL; - callInfo->modeName = NULL; - callInfo->modeURI = NULL; - callInfo->url = NULL; - } - callStackBot = (callPointPtr) xmlMalloc(sizeof(callPoint)); - if (callStackBot) { - callStackBot->next = NULL; - callStackBot->info = NULL; - callStackBot->lineNo = -1; - callStackTop = callStackBot; - } - return (callInfo != NULL) && (callStackBot != NULL); -} - - - -/** - * callStackFree: - * - * - * Free all memory used by callStack - */ -void -callStackFree(void) -{ - - callPointInfoPtr curInfo = callInfo, nextInfo; - callPointPtr curCall = callStackBot, nextCall; - - /* remove all call info's */ - while (curInfo) { - nextInfo = curInfo->next; - if (curInfo->templateName) - xmlFree(curInfo->templateName); - if (curInfo->templateURI) - xmlFree(curInfo->templateURI); - if (curInfo->modeName) - xmlFree(curInfo->modeName); - if (curInfo->modeURI) - xmlFree(curInfo->modeURI); - if (curInfo->url) - xmlFree(curInfo->url); - xmlFree(curInfo); - curInfo = nextInfo; - } - curInfo = NULL; - - /* remove all call stack items left. There should be none !! */ - while (curCall) { - nextCall = curCall->next; - xmlFree(curCall); - curCall = nextCall; - } - - callStackBot = NULL; - callStackTop = NULL; - callInfo = NULL; -} - - -/** - * addCallInfo: - * @templateName: Template name to add - * @templateURI: TQName part of template name to add - * @modeName: Mode of template - * @modeURI: TQName part of node of template - * @url: The url for the template - * - * Add template "call" to call stack - * - * Returns A reference to the added info if successful, - * NULL otherwise - */ -callPointInfoPtr -addCallInfo(const xmlChar * templateName, const xmlChar *templateURI, - const xmlChar * modeName, const xmlChar* modeURI, const xmlChar * url) -{ - callPointInfoPtr result = NULL, cur = callInfo; - int found; - - if (!templateName || !url) { -#ifdef WITH_XSLDBG_DEBUG_PROCESS - xsltGenericError(xsltGenericErrorContext, - "Error: Null template name or url: addCallInfo\n"); - if (templateName) - xsltGenericError(xsltGenericErrorContext, "template :\"%s\"\n", - templateName); - if (url) - xsltGenericError(xsltGenericErrorContext, "url :\"%s\"\n", url); - -#endif - return result; - } - - while (cur->next) { - found = 1; - if (templateName && cur->templateName - && !xmlStrEqual(cur->templateName, templateName)) - found = 0; - if (found && !xmlStrEqual(cur->templateURI, templateURI)) - found = 0; - if (found && !xmlStrEqual(cur->modeName, modeName)) - found = 0; - if (found && !xmlStrEqual(cur->modeURI, modeURI)) - found = 0; - if (found && !xmlStrEqual(cur->url, url)) - found = 0; - - if (found){ - result = cur; - break; - } - cur = cur->next; - } - - if (!result && cur) { - result = (callPointInfoPtr) xmlMalloc(sizeof(callPointInfo)); - if (result) { - if ((cur == callInfo) && !cur->templateName && !cur->templateURI - && !cur->modeName && !cur->modeURI - && !cur->url){ - xmlFree(callInfo); - callInfo = result; - } else{ - cur->next = result; - } - result->templateName = - (xmlChar *) xmlMemStrdup((char *) templateName); - result->templateURI = - (xmlChar *) xmlMemStrdup((char *) templateURI); - result->modeName = - (xmlChar *) xmlMemStrdup((char *) modeName); - result->modeURI = - (xmlChar *) xmlMemStrdup((char *) modeURI); - result->url = (xmlChar *) xmlMemStrdup((char *) url); - result->next = NULL; - }else { -#ifdef WITH_XSLDBG_DEBUG_PROCESS - xsltGenericError(xsltGenericErrorContext, - "Error: Unable to create callPointInfo from : addCallInfo\n"); -#endif - } - } - if (!cur){ -#ifdef WITH_XSLDBG_DEBUG_PROCESS - xsltGenericError(xsltGenericErrorContext, - "Error: Unable to create callPointInfo from : addCallInfo\n"); -#endif - } - return result; -} - - -/** - * callStackAdd: - * @templ: The current template being applied - * @source: The source node being processed - * - * Add template "call" to call stack - * - * Returns 1 on success, - * 0 otherwise - */ -int -callStackAdd(xsltTemplatePtr templ, xmlNodePtr source) -{ - int result = 0; - const char *name = "Default template"; - callPointInfoPtr info; - - if (!templ || !source) - return result; - - if (!source->doc || !source->doc->URL) { -#ifdef WITH_XSLDBG_DEBUG_PROCESS - xsltGenericError(xsltGenericErrorContext, - "Error: Invalid document url in call from : callStackAdd\n"); -#endif - return result; - } - - /* are at a "frame" break point ie "step down" */ - if ((xslDebugStatus == DEBUG_STEPDOWN) - && (stopDepth == callStackGetDepth())) { - xslDebugStatus = DEBUG_STOP; - stopDepth = 0; - } - - /* this need not be an error just we've got a text in source */ - if (xmlGetLineNo(source) == -1) { - return result; - } - - if (templ) { - if (templ->name) - name = (char *) templ->name; - else { - if (templ->match) - name = (char *) templ->match; - } - } - - if (!name) { -#ifdef WITH_XSLDBG_DEBUG_PROCESS - xsltGenericError(xsltGenericErrorContext, - "Error: Invalid template name : callStackAdd\n"); -#endif - return result; - } - - info = addCallInfo((xmlChar *) name, (xmlChar *) templ->nameURI, - (xmlChar *) templ->mode, (xmlChar *) templ->modeURI, - source->doc->URL); - - if (info) { - callPointPtr cur; - - cur = (callPointPtr) xmlMalloc(sizeof(callPoint)); - if (cur) { - callStackTop->next = cur; - callStackTop = cur; - cur->info = info; - cur->lineNo = xmlGetLineNo(source); - cur->next = NULL; - result = 1; - } else { -#ifdef WITH_XSLDBG_DEBUG_PROCESS - xsltGenericError(xsltGenericErrorContext, - "Error: Unable to create call point : callStackAdd\n"); -#endif - } - } else { -#ifdef WITH_XSLDBG_DEBUG_PROCESS - xsltGenericError(xsltGenericErrorContext, - "Error: Unable to create call info : callStackAdd\n"); -#endif - } - - return result; -} - - -/** - * callStackDrop: - * - * - * Drop the topmost item off the call stack - */ -void -callStackDrop(void) -{ - - if (!callStackBot) { -#ifdef WITH_XSLDBG_DEBUG_PROCESS - xsltGenericError(xsltGenericErrorContext, - "Error: callStackDrop failed invalid call stack: dbgcallstack.c"); -#endif - return; - } - - /* are we at a "frame" break point ie "step up". if we've gone too - * far stop imediately */ - if ((xslDebugStatus == DEBUG_STEPUP) - && (-1 * callStackGetDepth()) >= stopDepth) { - xslDebugStatus = DEBUG_STOP; - stopDepth = 0; - } - - if (callStackBot->next) { - callPointPtr cur = callStackBot; - - while (cur->next && cur->next->next) { - cur = cur->next; - } - if (cur->next) - xmlFree(cur->next); - cur->next = NULL; - callStackTop = cur; - } else { -#ifdef WITH_XSLDBG_DEBUG_PROCESS - xsltGenericError(xsltGenericErrorContext, - "Error: callStackDrop failed no items on call stack : dbgcallstack.c"); -#endif - } -} - - -/** - * callStackStepup: - * @depth:The frame depth to step up to - * 0 < @depth <= callStackGetDepth() - * - * Set the frame depth to step up to - * - * Returns 1 on success, - * 0 otherwise - */ -int -callStackStepup(int depth) -{ - int result = 0; - - if ((depth > 0) && (depth <= callStackGetDepth())) { - stopDepth = -1 * depth; - xslDebugStatus = DEBUG_STEPUP; - result = 1; - } else { -#ifdef WITH_XSLDBG_DEBUG_PROCESS - xsltGenericError(xsltGenericErrorContext, - "Error: callStackStepup failed invalid depth %d: callstack.c", depth); -#endif - } - return result; -} - - -/** - * callStackStepdown: - * @depth: The frame depth to step down to, - * 0 < @depth <= callStackGetDepth() - * - * Set the frame depth to step down to - * - * Returns 1 on success, - * 0 otherwise - */ -int -callStackStepdown(int depth) -{ - int result = 0; - - if ((depth > 0) && (depth >= callStackGetDepth())) { - stopDepth = depth; - xslDebugStatus = DEBUG_STEPDOWN; - result = 1; - } else { -#ifdef WITH_XSLDBG_DEBUG_PROCESS - xsltGenericError(xsltGenericErrorContext, - "Error: callStackStepdown failed invalid depth %d: dbgcallstack.c", depth); -#endif - } - return result; -} - - -/** - * callStackGet: - * @depth: 0 < @depth <= callStackGetDepth() - * - * Retrieve the call point at specified call depth - - * Returns Non-null if depth is valid, - * NULL otherwise - */ -callPointPtr -callStackGet(int depth) -{ - callPointPtr result = NULL, cur = callStackBot; - - if (!callStackBot) { -#ifdef WITH_XSLDBG_DEBUG_PROCESS - xsltGenericError(xsltGenericErrorContext, - "Error: callStackGet failed invalid call stack: callstack.c"); -#endif - return result; - } - if ((depth < 1) && (depth > callStackGetDepth())) { -#ifdef WITH_XSLDBG_DEBUG_PROCESS - xsltGenericError(xsltGenericErrorContext, - "Error: callStackGet failed invalid call depth: callstack.c"); -#endif - return result; - } - - while (depth > 0 && cur->next) { - cur = cur->next; - depth--; - } - - if (depth == 0) - result = cur; - else { -#ifdef WITH_XSLDBG_DEBUG_PROCESS - xsltGenericError(xsltGenericErrorContext, - "Error: callStackGet failed invalid call depth: callstack.c"); -#endif - } - return result; -} - - -/** - * callStackGetTop: - * - * Get the top item in the call stack - * - * Returns The top of the call stack - */ -callPointPtr -callStackGetTop(void) -{ - return callStackTop; -} - - -/** - * callStackGetDepth: - * - * Return the depth of call stack - * - * Returns The depth of call stack - */ -int -callStackGetDepth(void) -{ - callPointPtr cur = callStackBot; - int depthCount = 0; - - if (!callStackBot) { -#ifdef WITH_XSLDBG_DEBUG_PROCESS - xsltGenericError(xsltGenericErrorContext, - "Error: calldepth failed invalid call stack: dbgcallstack.c"); -#endif - return depthCount; - } - - - while (cur->next) { - depthCount++; - cur = cur->next; - } - return depthCount; -} |
