diff options
Diffstat (limited to 'kxsldbg/kxsldbgpart/libxsldbg/breakpoint.cpp')
| -rw-r--r-- | kxsldbg/kxsldbgpart/libxsldbg/breakpoint.cpp | 700 |
1 files changed, 0 insertions, 700 deletions
diff --git a/kxsldbg/kxsldbgpart/libxsldbg/breakpoint.cpp b/kxsldbg/kxsldbgpart/libxsldbg/breakpoint.cpp deleted file mode 100644 index 56a3ad20..00000000 --- a/kxsldbg/kxsldbgpart/libxsldbg/breakpoint.cpp +++ /dev/null @@ -1,700 +0,0 @@ - -/*************************************************************************** - breakpoint.c - breakpoint implementation - ------------------- - begin : Fri Nov 2 2001 - copyright : (C) 2001 by Keith Isdale - email : k_isdale@tpg.com.au - ***************************************************************************/ - -#include "xsldbg.h" -#include "breakpoint.h" -#include "arraylist.h" -#include "options.h" - -extern int xsldbgValidateBreakpoints; /*located in debugXSL.c*/ - -/*----------------------------------------------------------- - Private functions ------------------------------------------------------------*/ - -/** - * lineNoItemNew: - * - * Returns a new hash table for break points - */ -xmlHashTablePtr lineNoItemNew(void); - - -/** - * lineNoItemFree: - * @item: valid hashtable of break points - * - * Free @item and all its contents - */ -void lineNoItemFree(void *item); - - -/** - * lineNoItemDelete: - * @breakPointHash: Is valid - * @breakPtr: Is valid - * - * Returns 1 if able to delete @breakPtr from @breakPointHash, - * 0 otherwise - */ -int lineNoItemDelete(xmlHashTablePtr breakPointHash, - breakPointPtr breakPtr); - -/** - * lineNoItemAdd: - * @breakPointHash: is valid - * @breakPtr: is valid - * - * Add breakpoint to hash - * - * Returns 1 if able to add @breakPtr to @breakPointHash, - * 0 otherwise - */ -int lineNoItemAdd(xmlHashTablePtr breakPointHash, breakPointPtr breakPtr); - -/*----------------------------------------------------------- - Breakpoint debugger functions ------------------------------------------------------------*/ - - -/* This is our major structure, it is a list of hash tables. Each - hash table has breakpoints with the same line number. A line - number is used as an index into this list to get the right hash table. - Then its just a matter of a simple hash table lookup */ -arrayListPtr breakList; - -/* keep track of what break point id we're up to*/ -int breakPointCounter = 0; - -/* What is the current breakpoint is only valid up to the start of - xsldbg command prompt. ie don't use it after deletion of breakpoints */ -breakPointPtr activeBreakPointItem = NULL; - - -/** - * lineNoItemNew: - * - * Returns a new hash table for break points - */ -xmlHashTablePtr -lineNoItemNew(void) -{ - xmlHashTablePtr hash; - - hash = xmlHashCreate(4); - - return hash; -} - - -/** - * lineNoItemFree: - * @item: valid hashtable of break points - * - * Free @item and all its contents - */ -void -lineNoItemFree(void *item) -{ - xmlHashTablePtr hash = (xmlHashTablePtr) item; - - if (item) { -#if 0 -#ifdef WITH_XSLDBG_DEBUG_BREAKPOINTS - xsltGenericError(xsltGenericErrorContext, - "Freeing breakpoint line hash" - " with %d elements \n", xmlHashSize(item)); -#endif -#endif - xmlHashFree(hash, breakPointItemFree); - } -} - - -/** - * lineNoItemDelete: - * @breakPointHash: is valid - * @breakPtr: is valid - * - * Returns 1 if able to delete @breakPtr from @breakPointHash, - * 0 otherwise - */ -int -lineNoItemDelete(xmlHashTablePtr breakPointHash, breakPointPtr breakPtr) -{ - int result = 0; - - if (breakPointHash && breakPtr) { - if (xmlHashRemoveEntry(breakPointHash, breakPtr->url, - breakPointItemFree) == 0){ - result = 1; - }else{ -#ifdef WITH_XSLDBG_DEBUG_BREAKPOINTS - xsltGenericError(xsltGenericErrorContext,"lineNoItemDelete failed"); -#endif - } - - }else { -#ifdef WITH_XSLDBG_DEBUG_BREAKPOINTS - xsltGenericError(xsltGenericErrorContext, "lineNoItemDelete failed args %d %d", breakPointHash, breakPtr); -#endif - } - return result; -} - - -/** - * lineNoItemAdd: - * @breakPointHash: is valid - * @breakPtr: is valid - * - * Returns 1 if able to add @breakPtr to @breakPointHash, - * 0 otherwise - */ -int -lineNoItemAdd(xmlHashTablePtr breakPointHash, breakPointPtr breakPtr) -{ - int result = 0; - - if (breakPointHash && breakPtr) { - if (xmlHashAddEntry(breakPointHash, breakPtr->url, breakPtr) == 0) - result = 1; - } - return result; -} - -/** - * breakPointGetLineNoHash: - * @lineNo: Line number of of breakpoints of interest - * - * Return A hash of breakpoints with same line number - * - * Returns A hash of breakpoints with a line number of @lineNo - */ -xmlHashTablePtr -breakPointGetLineNoHash(long lineNo) -{ - if (!breakList) { -#ifdef WITH_XSLDBG_DEBUG_BREAKPOINTS - xsltGenericError(xsltGenericErrorContext, - "Error: Breakpoints structures not initialized\n"); -#endif - return NULL; - } else - return (xmlHashTablePtr) arrayListGet(breakList, lineNo); -} - - -/** - * breakPointInit: - * - * Returns 1 if breakpoints have been initialized properly and all - * memory required has been obtained, - * 0 otherwise -*/ -int -breakPointInit(void) -{ - int result = 0; - - /* the average file has 395 lines of code so add 100 lines now */ - breakList = arrayListNew(100, lineNoItemFree); - if (breakList) { - /* - * We don't need to do any thing else, as its done when we add the - * breakPoints - */ - result = 1; - } else { -#ifdef WITH_XSLDBG_DEBUG_BREAKPOINTS - xsltGenericError(xsltGenericErrorContext, - "Unable to intialize breakPoints: memory error\n"); -#endif - } - return result; -} - - -/** - * breakPointFree: - * - * Free all memory used by breakPoints - */ -void -breakPointFree(void) -{ - if (breakList) - arrayListFree(breakList); - breakList = NULL; -} - - -/** - * breakPointEmpty: - * - * Empty the break point collection - * - * Returns 1 if able to empty the breakpoint list of its contents, - * 0 otherwise - */ -int -breakPointEmpty(void) -{ - return arrayListEmpty(breakList); -} - - -/** - * breakPointItemNew: - * - * Create a new break point item - * Returns valid break point with default values set if successful, - * NULL otherwise - */ -breakPointPtr -breakPointItemNew(void) -{ - breakPointPtr breakPtr = (breakPointPtr) xmlMalloc(sizeof(breakPoint)); - - if (breakPtr) { - breakPtr->url = NULL; - breakPtr->lineNo = -1; - breakPtr->templateName = NULL; - breakPtr->modeName = NULL; - breakPtr->flags = BREAKPOINT_ENABLED; - breakPtr->id = ++breakPointCounter; - breakPtr->type = DEBUG_BREAK_SOURCE; - } - return breakPtr; -} - - -/** - * breakPointItemFree: - * @payload: valid breakPointPtr - * @name: not used - * - * Free memory associated with this break point - */ -void -#if LIBXML_VERSION >= 20908 -breakPointItemFree(void *payload, const xmlChar * name) -#else -breakPointItemFree(void *payload, xmlChar * name) -#endif -{ - Q_UNUSED(name); - if (payload) { - breakPointPtr breakPtr = (breakPointPtr) payload; - - if (breakPtr->url) - xmlFree(breakPtr->url); - if (breakPtr->templateName) - xmlFree(breakPtr->templateName); - if (breakPtr->modeName) - xmlFree(breakPtr->modeName); - xmlFree(breakPtr); - } -} - - -/** - * breakPointActiveBreakPoint: - * - * Get the active break point - * - * Returns The last break point that we stoped at - * - * Depreciated - */ -breakPointPtr -breakPointActiveBreakPoint(void) -{ - /* This function is depreciated */ - return NULL; /* activeBreakPointItem; */ -} - - - -/** - * breakPointSetActiveBreakPoint: - * @breakPtr: Is valid break point or NULL - * - * Set the active break point - * - * Depreciated - */ -void -breakPointSetActiveBreakPoint(breakPointPtr breakPtr) -{ - Q_UNUSED(breakPtr); - /* - * activeBreakPointItem = breakPtr; - */ - -} - - -/** - * breakPointAdd: - * @url: Non-null, non-empty file name that has been loaded by - * debugger - * @lineNumber: @lineNumber >= 0 and is available in url specified and - * points to an xml element - * @templateName: The template name of breakPoint or NULL - * @modeName : The mode of breakpoint or NULL - * @type: Valid BreakPointTypeEnum - * - * Add break point at file and line number specified - * - * Returns 1 if successful, - * 0 otherwise -*/ -int -breakPointAdd(const xmlChar * url, long lineNumber, - const xmlChar * templateName, - const xmlChar * modeName, - BreakPointTypeEnum type) -{ - int result = 0, breakPointType = type; - xmlHashTablePtr breakPointHash = NULL; /* hash of breakPoints */ - breakPointPtr breakPtr; - - if (!breakList) { -#ifdef WITH_XSLDBG_DEBUG_BREAKPOINTS - xsltGenericError(xsltGenericErrorContext, - "Error: Breakpoints structures not initialized\n"); -#endif - return result; - } - - if (!url || (lineNumber == -1)) { -#ifdef WITH_XSLDBG_DEBUG_BREAKPOINTS - xsltGenericError(xsltGenericErrorContext, - "Error: Invalid url or line number to breakPointAdd\n"); -#endif - return result; - } - - /* if breakpoint already exists then don;t add it */ - if (breakPointIsPresent(url, lineNumber)) { -#ifdef WITH_XSLDBG_DEBUG_BREAKPOINTS - xsltGenericError(xsltGenericErrorContext, - "Warning: Breakpoint at file %s: line %d exists\n", - url, lineNumber); -#endif - return result; - } - - breakPtr = breakPointItemNew(); - if (breakPtr) { - breakPtr->url = (xmlChar *) xmlMemStrdup((char *) url); - breakPtr->lineNo = lineNumber; - if (templateName) - breakPtr->templateName = - xmlStrdup( templateName); - else - breakPtr->templateName = NULL; - if (modeName) - breakPtr->modeName = - xmlStrdup(modeName); - else - breakPtr->modeName = NULL; - breakPtr->type = BreakPointTypeEnum(breakPointType); - - /* add new breakPoint to the right hash table */ - breakPointHash = breakPointGetLineNoHash(lineNumber); - if (breakPointHash) { - result = lineNoItemAdd(breakPointHash, breakPtr); - } else { - /* Grow breakList size */ - int lineIndex; - int newEntries = breakList->count; - xmlHashTablePtr hash; - - result = 1; - if ((lineNumber < breakList->count) && breakList->count) { -#ifdef WITH_XSLDBG_DEBUG_BREAKPOINTS - xsltGenericError(xsltGenericErrorContext, - "Error: Unable to find breakpoint line hash at %d\n", - lineNumber); -#endif - } else { - if (breakList->count + newEntries < lineNumber) - newEntries = lineNumber - breakList->count + 1; - - -#ifdef WITH_XSLDBG_DEBUG_BREAKPOINTS - /* - * xsltGenericError(xsltGenericErrorContext, - * "Size of line list was %d adding %d entries\n", - * breakList->count, newEntries); - */ -#endif - lineIndex = 0; - while ((lineIndex < newEntries) && result) { - hash = lineNoItemNew(); - if (hash) { - result = result && arrayListAdd(breakList, hash); - } else { - result = 0; -#ifdef WITH_XSLDBG_DEBUG_BREAKPOINTS - xsltGenericError(xsltGenericErrorContext, - "Error: Unable to create hash table breakPoint list: memory error\n"); -#endif - return result; - } - lineIndex++; - } - /* find the newly added hashtable of breakpoints */ - breakPointHash = breakPointGetLineNoHash(lineNumber); - if (breakPointHash) { - result = lineNoItemAdd(breakPointHash, breakPtr); - } else { -#ifdef WITH_XSLDBG_DEBUG_BREAKPOINTS - xsltGenericError(xsltGenericErrorContext, - "Error: Unable to create new breakPoint:interal error\n"); -#endif - return result; - } - } - - } - } else { -#ifdef WITH_XSLDBG_DEBUG_BREAKPOINTS - xsltGenericError(xsltGenericErrorContext, - "Error: Unable to create new breakPoint: memory error\n"); -#endif - } - - if (result && (optionsGetIntOption(OPTIONS_GDB) > 1) && - (xsldbgValidateBreakpoints != BREAKPOINTS_BEING_VALIDATED)){ - breakPointPrint(breakPtr); - xsldbgGenericErrorFunc("\n"); - } - return result; -} - - -/** - * breakPointDelete: - * @breakPtr: Is valid - * - * Delete the break point specified if it can be found using - * @breakPoint's url and lineNo - * - * Returns 1 if successful, - * 0 otherwise -*/ -int -breakPointDelete(breakPointPtr breakPtr) -{ - int result = 0; - xmlHashTablePtr breakPointHash; /* hash of breakPoints */ - - if (!breakPtr) - return result; - - breakPointHash = breakPointGetLineNoHash(breakPtr->lineNo); - if (breakPointHash) { - result = lineNoItemDelete(breakPointHash, breakPtr); - } else { -#ifdef WITH_XSLDBG_DEBUG_BREAKPOINTS - xsltGenericError(xsltGenericErrorContext, - "Error: Breakpoint not found: xslDeleteBreakPoint\n"); -#endif - } - return result; -} - - -/** - * breakPointEnable: - * @breakPtr: A valid breakpoint - * @enable: Enable break point if 1, disable if 0, toggle if -1 - * - * Enable or disable a break point - * - * Returns 1 if successful, - * 0 otherwise -*/ -int -breakPointEnable(breakPointPtr breakPtr, int enable) -{ - int result = 0; - - if (breakPtr) { - int enableFlag = 1; - if (enable != XSL_TOGGLE_BREAKPOINT){ - enableFlag = enable; - }else { - if (breakPtr->flags & BREAKPOINT_ENABLED) - enableFlag = 0; - } - if (enableFlag) - breakPtr->flags |= BREAKPOINT_ENABLED; - else - breakPtr->flags = breakPtr->flags & (BREAKPOINT_ALLFLAGS ^ BREAKPOINT_ENABLED); - result = 1; - } - return result; -} - - -/** - * breakPointLinesCount: - * - * Return the number of hash tables of break points with the same line number - * - * Returns The number of hash tables of break points with the same line number - */ -int -breakPointLinesCount(void) -{ - if (!breakList) { -#ifdef WITH_XSLDBG_DEBUG_BREAKPOINTS - xsltGenericError(xsltGenericErrorContext, - "Error: Breakpoints structures not initialized\n"); -#endif - return 0; - } else - return arrayListCount(breakList); -} - - -/** - * breakPointLinesList: - * - * Returns The list of hash tables for break points - * Dangerous function to use!! - */ -arrayListPtr -breakPointLineList(void) -{ - return breakList; -} - - -/** - * breakPointGet: - * @url: Non-null, non-empty file name that has been loaded by - * debugger - * @lineNumber: lineNumber >= 0 and is available in @url - * - * Get a break point for the breakpoint collection - * - * Returns break point if break point exists at location specified, - * NULL otherwise -*/ -breakPointPtr -breakPointGet(const xmlChar * url, long lineNumber) -{ - xmlHashTablePtr breakHash = breakPointGetLineNoHash(lineNumber); - breakPointPtr breakPtr = NULL; - - if (!breakHash || !url) - return breakPtr; - - breakPtr = (breakPointPtr)xmlHashLookup(breakHash, url); - return breakPtr; -} - - -/** - * breakPointPrint: - * @breakPtr: A valid break point - * - * Print the details of @breakPtr - * - * Returns 1 if successful, - * 0 otherwise - */ -int -breakPointPrint(breakPointPtr breakPtr) -{ - int result = 0; - const char *breakStatusText[2] = { - I18N_NOOP("disabled"), - I18N_NOOP("enabled") - }; - const char *breakTemplate=""; - const char *breakMode = ""; - const char *breakStatus; - - - if (!breakPtr) - return result; - - if (breakPtr->templateName){ - if (breakPtr->modeName) - breakMode = (const char*)breakPtr->modeName; - breakTemplate = (const char*)breakPtr->templateName; - } - - - breakStatus = breakStatusText[breakPtr->flags & BREAKPOINT_ENABLED]; - if (breakPtr->url) - xsldbgGenericErrorFunc(i18n("Breakpoint %1 %2 for template: \"%3\" mode: \"%4\" in file \"%5\" at line %6").arg(breakPtr->id).arg(i18n(breakStatus)).arg(xsldbgText(breakTemplate)).arg(xsldbgText(breakMode)).arg(xsldbgUrl(breakPtr->url)).arg(breakPtr->lineNo)); - else - xsldbgGenericErrorFunc(i18n("Breakpoint %1 %2 for template: \"%3\" mode: \"%4\"").arg(breakPtr->id).arg(i18n(breakStatus)).arg(xsldbgText(breakTemplate)).arg(xsldbgText(breakMode))); - return ++result; -} - - -/** - * breakPointIsPresent: - * @url: Non-null, non-empty file name that has been loaded by - * debugger - * @lineNumber: @lineNumber >= 0 and is available in @url - * - * Determine if there is a break point at file and line number specified - * - * Returns 1 if successful, - * 0 otherwise -*/ -int -breakPointIsPresent(const xmlChar * url, long lineNumber) -{ - int result = 0; - - if (!url || (lineNumber == -1)) - return result; - - result = (breakPointGet(url, lineNumber) != NULL); - - return result; -} - - -/** - * breakPointIsPresentNode: - * @node: node != NULL - * - * Determine if a node is a break point - * - * Returns 1 on success, - * 0 otherwise - */ -int -breakPointIsPresentNode(xmlNodePtr node) -{ - int result = 0; - - if (!node || !node->doc) - return result; - - if (xmlGetLineNo(node) == -1) - return result; - - if (node->doc->URL) { - result = breakPointIsPresent(node->doc->URL, xmlGetLineNo(node)); - } - - return result; -} |
