mirror of
https://gitlab.gnome.org/GNOME/libxslt
synced 2025-08-07 10:42:55 +03:00
Applied Keith Isdale patch for the debugger support, make it the default,
* Makefile.am acconfig.h config.h.in configure.in xsltproc/Makefile.am breakpoint/* libxslt/transform.[ch] libxslt/xsltconfig.h.in: Applied Keith Isdale patch for the debugger support, make it the default, added the WITH_XSLT_DEBUGGER define to xsltconfig.h.in, small cleanups Daniel
This commit is contained in:
@@ -1,3 +1,11 @@
|
|||||||
|
Mon Nov 5 14:29:26 CET 2001 Daniel Veillard <daniel@veillard.com>
|
||||||
|
|
||||||
|
* Makefile.am acconfig.h config.h.in configure.in
|
||||||
|
xsltproc/Makefile.am breakpoint/* libxslt/transform.[ch]
|
||||||
|
libxslt/xsltconfig.h.in: Applied Keith Isdale patch for
|
||||||
|
the debugger support, make it the default, added the
|
||||||
|
WITH_XSLT_DEBUGGER define to xsltconfig.h.in, small cleanups
|
||||||
|
|
||||||
Fri Nov 2 11:19:49 CET 2001 Daniel Veillard <daniel@veillard.com>
|
Fri Nov 2 11:19:49 CET 2001 Daniel Veillard <daniel@veillard.com>
|
||||||
|
|
||||||
* libxslt/libxslt.h: make sure LIBXSLT_PUBLIC is defined
|
* libxslt/libxslt.h: make sure LIBXSLT_PUBLIC is defined
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
SUBDIRS = \
|
SUBDIRS = \
|
||||||
libxslt \
|
libxslt \
|
||||||
|
breakpoint \
|
||||||
libexslt \
|
libexslt \
|
||||||
xsltproc \
|
xsltproc \
|
||||||
tests \
|
tests \
|
||||||
|
@@ -3,3 +3,4 @@
|
|||||||
#undef HAVE_POW
|
#undef HAVE_POW
|
||||||
#undef HAVE_FLOOR
|
#undef HAVE_FLOOR
|
||||||
#undef HAVE_FABS
|
#undef HAVE_FABS
|
||||||
|
#undef WITH_DEBUGGER
|
||||||
|
30
breakpoint/Makefile.am
Normal file
30
breakpoint/Makefile.am
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/libxslt $(LIBXML_CFLAGS)
|
||||||
|
|
||||||
|
lib_LTLIBRARIES = libxsltbreakpoint.la
|
||||||
|
|
||||||
|
xsltbreakpointincdir = $(includedir)/breakpoint
|
||||||
|
|
||||||
|
xsltbreakpointinc_HEADERS = \
|
||||||
|
breakpoint.h
|
||||||
|
|
||||||
|
libxsltbreakpoint_la_SOURCES = \
|
||||||
|
dbgbreakpoint.c \
|
||||||
|
dbgcallstack.c \
|
||||||
|
dbgsearch.c \
|
||||||
|
dbgmain.c
|
||||||
|
|
||||||
|
|
||||||
|
libxsltbreakpoint_la_LIBADD = $(EXTRA_LIBS)
|
||||||
|
libxsltbreakpoint_la_LDFLAGS = -version-info @LIBXSLT_VERSION_INFO@
|
||||||
|
|
||||||
|
man_MANS = #breakpoint.4
|
||||||
|
|
||||||
|
EXTRA_DIST = $(man_MANS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.lo
|
||||||
|
rm -f *.o
|
||||||
|
rm -rf .libs
|
||||||
|
rm -f *.la
|
||||||
|
|
||||||
|
|
397
breakpoint/breakpoint.h
Normal file
397
breakpoint/breakpoint.h
Normal file
@@ -0,0 +1,397 @@
|
|||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
breakpoint.h - description
|
||||||
|
-------------------
|
||||||
|
begin : Sun Sep 16 2001
|
||||||
|
copyright : (C) 2001 by Keith Isdale
|
||||||
|
email : k_isdale@tpg.com.au
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#ifdef WITH_DEBUGGER
|
||||||
|
#ifndef BREAKPOINT_H
|
||||||
|
#define BREAKPOINT_H
|
||||||
|
|
||||||
|
#ifdef WITH_XSLT_DEBUG
|
||||||
|
#define WITH_XSLT_DEBUG_BREAKPOINTS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <libxml/tree.h>
|
||||||
|
|
||||||
|
#include <libxslt/xsltInternals.h>
|
||||||
|
#include <libxml/xpath.h>
|
||||||
|
#include <libxml/list.h>
|
||||||
|
|
||||||
|
/* Define the types of status whilst debugging*/
|
||||||
|
typedef enum {
|
||||||
|
DEBUG_NONE, /* no debugging allowed */
|
||||||
|
DEBUG_INIT,
|
||||||
|
DEBUG_STEP,
|
||||||
|
DEBUG_STEPUP,
|
||||||
|
DEBUG_STEPDOWN,
|
||||||
|
DEBUG_NEXT,
|
||||||
|
DEBUG_STOP,
|
||||||
|
DEBUG_CONT,
|
||||||
|
DEBUG_RUN,
|
||||||
|
DEBUG_RUN_RESTART,
|
||||||
|
DEBUG_QUIT
|
||||||
|
} DebugStatus;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
DEBUG_BREAK_SOURCE = 1,
|
||||||
|
DEBUG_BREAK_DATA
|
||||||
|
} BreakPointType;
|
||||||
|
|
||||||
|
#define XSL_TOGGLE_BREAKPOINT -1
|
||||||
|
extern int xslDebugStatus;
|
||||||
|
|
||||||
|
typedef struct _xslBreakPoint xslBreakPoint;
|
||||||
|
typedef xslBreakPoint *xslBreakPointPtr;
|
||||||
|
struct _xslBreakPoint {
|
||||||
|
xmlChar *url;
|
||||||
|
long lineNo;
|
||||||
|
xmlChar *templateName; /* only used when printing break point */
|
||||||
|
int enabled;
|
||||||
|
int type;
|
||||||
|
int id;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
-----------------------------------------------------------
|
||||||
|
Break point related functions
|
||||||
|
----------------------------------------------------------
|
||||||
|
*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslFindTemplateNode:
|
||||||
|
* @style : valid stylesheet collection to look into
|
||||||
|
* @name : template name to look for
|
||||||
|
*
|
||||||
|
* Returns : template node found if successfull,
|
||||||
|
* NULL otherwise
|
||||||
|
*/
|
||||||
|
xmlNodePtr xslFindTemplateNode(const xsltStylesheetPtr style,
|
||||||
|
const xmlChar * name);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslActiveBreakPoint:
|
||||||
|
*
|
||||||
|
* Return the break point number that we stoped at
|
||||||
|
*/
|
||||||
|
int xslActiveBreakPoint();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslSetActiveBreakPoint:
|
||||||
|
* @breakPointNumber : 0 < breakPointNumber <= xslBreakPointCount()
|
||||||
|
*
|
||||||
|
* Sets the active break point number
|
||||||
|
* Returns 1 on success,
|
||||||
|
* 0 otherwise
|
||||||
|
*/
|
||||||
|
int xslSetActiveBreakPoint(int breakPointNumber);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslAddBreakPoint:
|
||||||
|
* @url : a valid url that has been loaded by debugger
|
||||||
|
* @lineNumber : number >= 0 and is available in url specified and points to
|
||||||
|
* an xml element
|
||||||
|
* @temlateName : the template name of breakpoint or NULL if not adding
|
||||||
|
* a template break point
|
||||||
|
* @type : DEBUG_BREAK_SOURCE if are we stopping at a xsl source line
|
||||||
|
* DEBUG_BREAK_DATA otherwise
|
||||||
|
*
|
||||||
|
* Add break point at file and line number specified
|
||||||
|
* Returns break point number if successfull,
|
||||||
|
* 0 otherwise
|
||||||
|
*/
|
||||||
|
int xslAddBreakPoint(const xmlChar * url, long lineNumber,
|
||||||
|
const xmlChar * templateName, int type);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslDeleteBreakPoint:
|
||||||
|
* @breakPointNumber : 0 < breakPointNumber <= xslBreakPointCount()
|
||||||
|
*
|
||||||
|
* Delete the break point with breakPointNumber specified
|
||||||
|
* Returns 1 if successfull,
|
||||||
|
* 0 otherwise
|
||||||
|
*/
|
||||||
|
int xslDeleteBreakPoint(int breakPointNumber);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslFindBreakPointById:
|
||||||
|
* @id : The break point id to look for
|
||||||
|
*
|
||||||
|
* Find the break point number for given break point id
|
||||||
|
* Returns break point number can be found for given the break point id
|
||||||
|
* 0 otherwise
|
||||||
|
*/
|
||||||
|
int xslFindBreakPointById(int id);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslFindBreakPointByLineNo:
|
||||||
|
* @url : a valid url that has been loaded by debugger
|
||||||
|
* @lineNumber : lineNumber >= 0 and is available in url specified
|
||||||
|
*
|
||||||
|
* Find the break point number for a given url and line number
|
||||||
|
* Returns breakpoint number number if successfull,
|
||||||
|
* 0 otherwise
|
||||||
|
*/
|
||||||
|
int xslFindBreakPointByLineNo(const xmlChar * url, long lineNumber);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslFindBreakPointByName:
|
||||||
|
* @templateName : template name to look for
|
||||||
|
*
|
||||||
|
* Find the breakpoint at template with "match" or "name" equal
|
||||||
|
* to templateName
|
||||||
|
* Returns the break point number given the template name is found
|
||||||
|
* 0 otherwise
|
||||||
|
*/
|
||||||
|
int xslFindBreakPointByName(const xmlChar * templateName);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslEnableBreakPoint:
|
||||||
|
* @breakPointNumber : 0 < breakPointNumber <= xslBreakPointCount()
|
||||||
|
* @enable : enable break point if 1, disable if 0, toggle if -1
|
||||||
|
*
|
||||||
|
* Enable or disable a break point
|
||||||
|
* Returns 1 if successfull,
|
||||||
|
* 0 otherwise
|
||||||
|
*/
|
||||||
|
int xslEnableBreakPoint(int breakPointNumber, int enable);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslIsBreakPointEnabled:
|
||||||
|
* @breakPointNumber : 0 < breakPointNumber <= xslBreakPointCount()
|
||||||
|
*
|
||||||
|
* Is the breakpoint at breakPointNumber specified enabled
|
||||||
|
* Returns -1 if breakPointNumber is invalid
|
||||||
|
* 0 if break point is disabled
|
||||||
|
* 1 if break point is enabled
|
||||||
|
*/
|
||||||
|
int xslIsBreakPointEnabled(int breakPointNumber);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslBreakPointCount:
|
||||||
|
*
|
||||||
|
* Returns the number of break points present
|
||||||
|
*/
|
||||||
|
int xslBreakPointCount();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslGetBreakPoint:
|
||||||
|
* @breakPointNumber : 0 < breakPointNumber <= xslBreakPointCount()
|
||||||
|
*
|
||||||
|
* Lookup the value of break point at breakPointNumber specified
|
||||||
|
* Returns break point if breakPointNumber is valid,
|
||||||
|
* NULL otherwise
|
||||||
|
*/
|
||||||
|
xslBreakPointPtr xslGetBreakPoint(int breakPointNumber);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslPrintBreakPoint:
|
||||||
|
* @file : file != NULL
|
||||||
|
* @breakPointNumber : 0 < breakPointNumber <= xslBreakPointCount()
|
||||||
|
*
|
||||||
|
* Print the details of break point to file specified
|
||||||
|
*
|
||||||
|
* Returns 1 if successfull,
|
||||||
|
* 0 otherwise
|
||||||
|
*/
|
||||||
|
int xslPrintBreakPoint(FILE * file, int breakPointNumber);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslIsBreakPoint:
|
||||||
|
* @url : url non-null, non-empty file name that has been loaded by
|
||||||
|
* debugger
|
||||||
|
* @lineNumber : number >= 0 and is available in url specified
|
||||||
|
*
|
||||||
|
* Determine if there is a break point at file and line number specifiec
|
||||||
|
* Returns 1 if successfull,
|
||||||
|
* 0 otherwise
|
||||||
|
*/
|
||||||
|
int xslIsBreakPoint(const xmlChar * url, long lineNumber);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslIsBreakPointNode:
|
||||||
|
* @node : node != NULL
|
||||||
|
*
|
||||||
|
* Determine if a node is a break point
|
||||||
|
* Returns : 1 on sucess, 0 otherwise
|
||||||
|
*/
|
||||||
|
int xslIsBreakPointNode(xmlNodePtr node);
|
||||||
|
|
||||||
|
/*
|
||||||
|
-----------------------------------------------------------
|
||||||
|
Main debugger functions
|
||||||
|
-----------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslDebugBreak:
|
||||||
|
* @templ : The source node being executed
|
||||||
|
* @node : The data node being processed
|
||||||
|
* @root : The template being applide to "node"
|
||||||
|
* @ctxt : stylesheet being processed
|
||||||
|
*
|
||||||
|
* A break point has been found so pass control to user
|
||||||
|
*/
|
||||||
|
void xslDebugBreak(xmlNodePtr templ, xmlNodePtr node, xsltTemplatePtr root,
|
||||||
|
xsltTransformContextPtr ctxt);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslDebugInit :
|
||||||
|
*
|
||||||
|
* Initialize debugger allocating any memory needed by debugger
|
||||||
|
*/
|
||||||
|
void xslDebugInit();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslDebugFree :
|
||||||
|
*
|
||||||
|
* Free up any memory taken by debugger
|
||||||
|
*/
|
||||||
|
void xslDebugFree();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslDebugGotControl :
|
||||||
|
* @reached : true if debugger has received control
|
||||||
|
*
|
||||||
|
* Set flag that debuger has received control to value of @reached
|
||||||
|
* Returns true if any breakpoint was reached previously
|
||||||
|
*/
|
||||||
|
int xslDebugGotControl(int reached);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
------------------------------------------------------
|
||||||
|
Xsl call stack related
|
||||||
|
-----------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct _xslCallPointInfo xslCallPointInfo;
|
||||||
|
typedef xslCallPointInfo *xslCallPointInfoPtr;
|
||||||
|
|
||||||
|
struct _xslCallPointInfo {
|
||||||
|
const xmlChar *templateName; /* will be unique */
|
||||||
|
const xmlChar *url;
|
||||||
|
xslCallPointInfoPtr next;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslAddCallInfo:
|
||||||
|
* @templateName : template name to add
|
||||||
|
* @url : url for the template
|
||||||
|
*
|
||||||
|
* Returns a reference to the added info if sucessfull,
|
||||||
|
* NULL otherwise
|
||||||
|
*/
|
||||||
|
xslCallPointInfoPtr xslAddCallInfo(const xmlChar * templateName,
|
||||||
|
const xmlChar * url);
|
||||||
|
|
||||||
|
typedef struct _xslCallPoint xslCallPoint;
|
||||||
|
typedef xslCallPoint *xslCallPointPtr;
|
||||||
|
|
||||||
|
struct _xslCallPoint {
|
||||||
|
xslCallPointInfoPtr info;
|
||||||
|
long lineNo;
|
||||||
|
xslCallPointPtr next;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslAddCall:
|
||||||
|
* @templ : current template being applied
|
||||||
|
* @source : the source node being processed
|
||||||
|
*
|
||||||
|
* Add template "call" to call stack
|
||||||
|
* Returns 1 on sucess,
|
||||||
|
* 0 otherwise
|
||||||
|
*/
|
||||||
|
int xslAddCall(xsltTemplatePtr templ, xmlNodePtr source);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslDropCall :
|
||||||
|
*
|
||||||
|
* Drop the topmost item off the call stack
|
||||||
|
*/
|
||||||
|
void xslDropCall();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslStepupToDepth :
|
||||||
|
* @depth :the frame depth to step up to
|
||||||
|
*
|
||||||
|
* Set the frame depth to step up to
|
||||||
|
* Returns 1 on sucess,
|
||||||
|
* 0 otherwise
|
||||||
|
*/
|
||||||
|
int xslStepupToDepth(int depth);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslStepdownToDepth :
|
||||||
|
* @depth : the frame depth to step down to
|
||||||
|
*
|
||||||
|
* Set the frame depth to step down to
|
||||||
|
* Returns 1 on sucess,
|
||||||
|
* 0 otherwise
|
||||||
|
*/
|
||||||
|
int xslStepdownToDepth(int depth);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslGetCall :
|
||||||
|
* @depth : 0 < depth <= xslCallDepth()
|
||||||
|
*
|
||||||
|
* Retrieve the call point at specified call depth
|
||||||
|
|
||||||
|
* Return non-null a if depth is valid,
|
||||||
|
* NULL otherwise
|
||||||
|
*/
|
||||||
|
xslCallPointPtr xslGetCall(int depth);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslGetCallStackTop :
|
||||||
|
*
|
||||||
|
* Returns the top of the call stack
|
||||||
|
*/
|
||||||
|
xslCallPointPtr xslGetCallStackTop();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslCallDepth :
|
||||||
|
*
|
||||||
|
* Returns the depth of call stack
|
||||||
|
*/
|
||||||
|
int xslCallDepth();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
224
breakpoint/dbgbreakpoint.c
Normal file
224
breakpoint/dbgbreakpoint.c
Normal file
@@ -0,0 +1,224 @@
|
|||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
breakpoint.c - description
|
||||||
|
-------------------
|
||||||
|
begin : Fri Nov 2 2001
|
||||||
|
copyright : (C) 2001 by Keith Isdale
|
||||||
|
email : k_isdale@tpg.com.au
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#ifdef WITH_DEBUGGER
|
||||||
|
|
||||||
|
/*
|
||||||
|
-----------------------------------------------------------
|
||||||
|
Breakpoint debugger functions
|
||||||
|
-----------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "xsltutils.h"
|
||||||
|
#include "breakpoint.h"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslActiveBreakPoint();
|
||||||
|
* Return the break point number that we stoped at
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
xslActiveBreakPoint()
|
||||||
|
{
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslDebugInit' not overloaded\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslSetActiveBreakPoint:
|
||||||
|
* @breakPointNumber : 0 < breakPointNumber <= xslBreakPointCount()
|
||||||
|
*
|
||||||
|
* Return 1 on success,
|
||||||
|
* 0 otherwise
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
xslSetActiveBreakPoint(int breakPointNumber)
|
||||||
|
{
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslSetActiveBreakPoint' not overloaded\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslAddBreakPoint:
|
||||||
|
* @url : url non-null, non-empty file name that has been loaded by
|
||||||
|
* debugger
|
||||||
|
* @lineNumber : number >= 0 and is available in url specified and points to
|
||||||
|
* an xml element
|
||||||
|
* @temlateName : the template name of breakpoint or NULL
|
||||||
|
* @type : DEBUG_BREAK_SOURCE if are we stopping at a xsl source line
|
||||||
|
* DEBUG_BREAK_DATA otherwise
|
||||||
|
*
|
||||||
|
* Add break point at file and line number specifiec
|
||||||
|
* Returns break point number if successfull,
|
||||||
|
* 0 otherwise
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
xslAddBreakPoint(const xmlChar * url, long lineNumber,
|
||||||
|
const xmlChar * templateName, int type)
|
||||||
|
{
|
||||||
|
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslAddBreakPoint' not overloaded\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslDeleteBreakPoint:
|
||||||
|
* @breakPointNumber : 0 < breakPointNumber <= xslBreakPointCount()
|
||||||
|
*
|
||||||
|
* Delete the break point specified
|
||||||
|
* Returns 1 if successfull,
|
||||||
|
* 0 otherwise
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
xslDeleteBreakPoint(int breakPointNumber)
|
||||||
|
{
|
||||||
|
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslDeleteBreakPoint' not overloaded\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslEnableBreakPoint:
|
||||||
|
* @breakPointNumber : 0 < breakPointNumber <= xslBreakPointCount()
|
||||||
|
* @enable : enable break point if 1, disable if 0, toggle if -1
|
||||||
|
*
|
||||||
|
* Enable or disable a break point
|
||||||
|
* Returns 1 if successfull,
|
||||||
|
* 0 otherwise
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
xslEnableBreakPoint(int breakPointNumber, int enable)
|
||||||
|
{
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslEnableBreakPoint' not overloaded\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslIsBreakPointEnabled:
|
||||||
|
* @breakPointNumber : 0 < breakPointNumber <= xslBreakPointCount()
|
||||||
|
*
|
||||||
|
* Is the breakpoint at breakPointNumber specified enabled
|
||||||
|
* Returns -1 if breakPointNumber is invalid
|
||||||
|
* 0 if break point is disabled
|
||||||
|
* 1 if break point is enabled
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
xslIsBreakPointEnabled(int breakPointNumber)
|
||||||
|
{
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslIsBreakPointEnabled' not overloaded\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslBreakPointCount:
|
||||||
|
*
|
||||||
|
* Return the number of breakpoints present
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
xslBreakPointCount()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslGetBreakPoint:
|
||||||
|
* @breakPointNumber : 0 < breakPointNumber <= xslBreakPointCount()
|
||||||
|
*
|
||||||
|
* Lookup the value of break point at breakPointNumber specified
|
||||||
|
* Returns break point if breakPointNumber is valid,
|
||||||
|
* NULL otherwise
|
||||||
|
*/
|
||||||
|
xslBreakPointPtr
|
||||||
|
xslGetBreakPoint(int breakPointNumber)
|
||||||
|
{
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslGetBreakPoint' not overloaded\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslPrintBreakPoint:
|
||||||
|
* @file : file != NULL
|
||||||
|
* @breakPointNumber : 0 < breakPointNumber <= xslBreakPointCount()
|
||||||
|
*
|
||||||
|
* Print the details of break point to file specified
|
||||||
|
*
|
||||||
|
* Returns 1 if successfull,
|
||||||
|
* 0 otherwise
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
xslPrintBreakPoint(FILE * file, int breakPointNumber)
|
||||||
|
{
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslPrintBreakPoint' not overloaded\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslIsBreakPoint:
|
||||||
|
* @url : url non-null, non-empty file name that has been loaded by
|
||||||
|
* debugger
|
||||||
|
* @lineNumber : number >= 0 and is available in url specified
|
||||||
|
*
|
||||||
|
* Determine if there is a break point at file and line number specified
|
||||||
|
* Returns 1 if successfull,
|
||||||
|
* 0 otherwise
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
xslIsBreakPoint(const xmlChar * url, long lineNumber)
|
||||||
|
{
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslIsBreakPoint' not overloaded\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslIsBreakPointNode:
|
||||||
|
* @node : node != NULL
|
||||||
|
*
|
||||||
|
* Determine if a node is a break point
|
||||||
|
* Returns : 1 on sucess,
|
||||||
|
* 0 otherwise
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
xslIsBreakPointNode(xmlNodePtr node)
|
||||||
|
{
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslIsBreakPointNode' not overloaded\n");
|
||||||
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
153
breakpoint/dbgcallstack.c
Normal file
153
breakpoint/dbgcallstack.c
Normal file
@@ -0,0 +1,153 @@
|
|||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
dbgcallstack.c - description
|
||||||
|
-------------------
|
||||||
|
begin : Fri Nov 2 2001
|
||||||
|
copyright : (C) 2001 by Keith Isdale
|
||||||
|
email : k_isdale@tpg.com.au
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#ifdef WITH_DEBUGGER
|
||||||
|
|
||||||
|
/*
|
||||||
|
------------------------------------------------------
|
||||||
|
Xsl call stack related
|
||||||
|
-----------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "xsltutils.h"
|
||||||
|
#include "breakpoint.h"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslAddCallInfo:
|
||||||
|
* @templateName : template name to add
|
||||||
|
* @url : url for templateName
|
||||||
|
*
|
||||||
|
* Returns a reference to the added info if sucessfull, otherwise NULL
|
||||||
|
*/
|
||||||
|
xslCallPointInfoPtr
|
||||||
|
xslAddCallInfo(const xmlChar * templateName, const xmlChar * url)
|
||||||
|
{
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslAddCallInfo' not overloaded\n");
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslAddCall:
|
||||||
|
* @templ : current template being applied
|
||||||
|
* @source : the source node being processed
|
||||||
|
*
|
||||||
|
* Add template "call" to call stack
|
||||||
|
* Returns : 1 on sucess, 0 otherwise
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
xslAddCall(xsltTemplatePtr templ, xmlNodePtr source)
|
||||||
|
{
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslAddCall' not overloaded\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslDropCall :
|
||||||
|
*
|
||||||
|
* Drop the topmost item off the call stack
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
xslDropCall()
|
||||||
|
{
|
||||||
|
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslDropCall' not overloaded\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslStepupToDepth :
|
||||||
|
* @depth :the frame depth to step up to
|
||||||
|
*
|
||||||
|
* Set the frame depth to step up to
|
||||||
|
* Returns 1 on sucess , 0 otherwise
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
xslStepupToDepth(int depth)
|
||||||
|
{
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslStepupToDepth' not overloaded\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslStepdownToDepth :
|
||||||
|
* @depth : the frame depth to step down to
|
||||||
|
*
|
||||||
|
* Set the frame depth to step down to
|
||||||
|
* Returns 1 on sucess , 0 otherwise
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
xslStepdownToDepth(int depth)
|
||||||
|
{
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslStepdownToDepth' not overloaded\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslGetCall :
|
||||||
|
* @depth : 0 < depth <= xslCallDepth()
|
||||||
|
*
|
||||||
|
* Retrieve the call point at specified call depth
|
||||||
|
|
||||||
|
* Return non-null a if depth is valid
|
||||||
|
* NULL otherwise
|
||||||
|
*/
|
||||||
|
xslCallPointPtr
|
||||||
|
xslGetCall(int depth)
|
||||||
|
{
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslGetCall' not overloaded\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslGetCallStackTop :
|
||||||
|
*
|
||||||
|
* Returns the top of the call stack
|
||||||
|
*/
|
||||||
|
xslCallPointPtr
|
||||||
|
xslGetCallStackTop()
|
||||||
|
{
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslGetCallStackTop' not overloaded\n");
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslCallDepth :
|
||||||
|
*
|
||||||
|
* Return the depth of call stack
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
xslCallDepth()
|
||||||
|
{
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslCallDepth' not overloaded\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
88
breakpoint/dbgmain.c
Normal file
88
breakpoint/dbgmain.c
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
dbgmain.c - description
|
||||||
|
-------------------
|
||||||
|
begin : Fri Nov 2 2001
|
||||||
|
copyright : (C) 2001 by Keith Isdale
|
||||||
|
email : k_isdale@tpg.com.au
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#ifdef WITH_DEBUGGER
|
||||||
|
|
||||||
|
/*
|
||||||
|
-----------------------------------------------------------
|
||||||
|
Main debugger functions
|
||||||
|
-----------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "xsltutils.h"
|
||||||
|
#include "breakpoint.h"
|
||||||
|
|
||||||
|
int xslDebugStatus = DEBUG_NONE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslDebugInit :
|
||||||
|
*
|
||||||
|
* Initialize debugger
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
xslDebugInit()
|
||||||
|
{
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslDebugInit' not overloaded\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslDebugFree :
|
||||||
|
*
|
||||||
|
* Free up any memory taken by debugging
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
xslDebugFree()
|
||||||
|
{
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslDebugFree' not overloaded\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
extern char *xslShellReadline(char *prompt);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @templ : The source node being executed
|
||||||
|
* @node : The data node being processed
|
||||||
|
* @root : The template being applide to "node"
|
||||||
|
* @ctxt : stylesheet being processed
|
||||||
|
*
|
||||||
|
* A break point has been found so pass control to user
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
xslDebugBreak(xmlNodePtr templ, xmlNodePtr node, xsltTemplatePtr root,
|
||||||
|
xsltTransformContextPtr ctxt)
|
||||||
|
{
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslDebugBreak' not overloaded\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslDebugGotControl :
|
||||||
|
* @reached : true if debugger has received control
|
||||||
|
*
|
||||||
|
* Set flag that debuger has received control to value of @reached
|
||||||
|
* Returns true if any breakpoint was reached previously
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
xslDebugGotControl(int reached)
|
||||||
|
{
|
||||||
|
static int got_control = 0;
|
||||||
|
int result = got_control;
|
||||||
|
got_control = reached;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
119
breakpoint/dbgsearch.c
Normal file
119
breakpoint/dbgsearch.c
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
dbgsearch.c - description
|
||||||
|
-------------------
|
||||||
|
begin : Fri Nov 2 2001
|
||||||
|
copyright : (C) 2001 by Keith Isdale
|
||||||
|
email : k_isdale@tpg.com.au
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#ifdef WITH_DEBUGGER
|
||||||
|
|
||||||
|
/*
|
||||||
|
-----------------------------------------------------------
|
||||||
|
Search/Find debugger functions
|
||||||
|
-----------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "xsltutils.h"
|
||||||
|
#include "breakpoint.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslFindTemplateNode:
|
||||||
|
* @style : valid stylesheet collection context to look into
|
||||||
|
* @name : template name to look for
|
||||||
|
*
|
||||||
|
* Returns : template node found if successfull
|
||||||
|
* NULL otherwise
|
||||||
|
*/
|
||||||
|
xmlNodePtr
|
||||||
|
xslFindTemplateNode(xsltStylesheetPtr style, const xmlChar * name)
|
||||||
|
{
|
||||||
|
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslFindTemplateNode' not overloaded\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslFindBreakPointByLineNo:
|
||||||
|
* @ctxt : valid ctxt to look into
|
||||||
|
* @url : url non-null, non-empty file name that has been loaded by
|
||||||
|
* debugger
|
||||||
|
* @lineNumber : number >= 0 and is available in url specified
|
||||||
|
*
|
||||||
|
* Find the closest line number in file specified that can be a point
|
||||||
|
* Returns line number number if successfull,
|
||||||
|
* 0 otherwise
|
||||||
|
*/
|
||||||
|
xmlNodePtr
|
||||||
|
xslFindNodeByLineNo(xsltTransformContextPtr ctxt,
|
||||||
|
const xmlChar * url, long lineNumber)
|
||||||
|
{
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslFindNodeByLineNo' not overloaded\n");
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslFindBreakPointById:
|
||||||
|
* @id : The break point id to look for
|
||||||
|
*
|
||||||
|
* Find the break point number for given break point id
|
||||||
|
* Returns break point number can be found for given the break point id
|
||||||
|
* 0 otherwise
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
xslFindBreakPointById(int id)
|
||||||
|
{
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslFindBreakPointById' not overloaded\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslFindBreakPointByLineNo:
|
||||||
|
* @url : a valid url that has been loaded by debugger
|
||||||
|
* @lineNumber : lineNumber >= 0 and is available in url specified
|
||||||
|
*
|
||||||
|
* Find the break point number for a given url and line number
|
||||||
|
* Returns break point number number if successfull,
|
||||||
|
* 0 otherwise
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
xslFindBreakPointByLineNo(const xmlChar * url, long lineNumber)
|
||||||
|
{
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslFindBreakPointByLineNo' not overloaded\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslFindBreakPointByName:
|
||||||
|
* @templateName : template name to look for
|
||||||
|
*
|
||||||
|
* Find the breakpoint at template with "match" or "name" or equal to
|
||||||
|
* templateName
|
||||||
|
* Returns break point number given the template name is found
|
||||||
|
* 0 otherwise
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
xslFindBreakPointByName(const xmlChar * templateName)
|
||||||
|
{
|
||||||
|
xsltGenericError(xsltGenericErrorContext,
|
||||||
|
"Error!: Debugger function 'xslFindBreakPointByName' not overloaded\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@@ -8,6 +8,7 @@
|
|||||||
#undef HAVE_POW
|
#undef HAVE_POW
|
||||||
#undef HAVE_FLOOR
|
#undef HAVE_FLOOR
|
||||||
#undef HAVE_FABS
|
#undef HAVE_FABS
|
||||||
|
#undef WITH_DEBUGGER
|
||||||
|
|
||||||
/* Define if you have the _stat function. */
|
/* Define if you have the _stat function. */
|
||||||
#undef HAVE__STAT
|
#undef HAVE__STAT
|
||||||
|
24
configure.in
24
configure.in
@@ -133,6 +133,21 @@ else
|
|||||||
fi
|
fi
|
||||||
AC_SUBST(WITH_MEM_DEBUG)
|
AC_SUBST(WITH_MEM_DEBUG)
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl Is debugger support requested
|
||||||
|
dnl
|
||||||
|
AC_ARG_WITH(with_debugger, [ --with-debugger Add the debugging module (off)])
|
||||||
|
if test "$with_debugger" = "no" ; then
|
||||||
|
echo Disabling debugger
|
||||||
|
WITH_DEBUGGER=0
|
||||||
|
else
|
||||||
|
echo Enabling debugger
|
||||||
|
WITH_DEBUGGER=1
|
||||||
|
AC_DEFINE(WITH_DEBUGGER)
|
||||||
|
fi
|
||||||
|
AM_CONDITIONAL(WITH_DEBUGGER, test "${WITH_DEBUGGER}" = "1")
|
||||||
|
AC_SUBST(WITH_DEBUGGER)
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl The following new parameters were added to offer
|
dnl The following new parameters were added to offer
|
||||||
dnl the ability to specify the location of the libxml
|
dnl the ability to specify the location of the libxml
|
||||||
@@ -250,18 +265,25 @@ esac
|
|||||||
|
|
||||||
XSLT_INCLUDEDIR='-I${includedir}'
|
XSLT_INCLUDEDIR='-I${includedir}'
|
||||||
EXTRA_LIBS="$M_LIBS"
|
EXTRA_LIBS="$M_LIBS"
|
||||||
XSLT_LIBS="-lxslt $LIBXML_LIBS $M_LIBS"
|
if test "${WITH_DEBUGGER}" = "1" ; then
|
||||||
|
XSLT_LIBS="-lxslt -lxsltbreakpoint $LIBXML_LIBS $M_LIBS"
|
||||||
|
else
|
||||||
|
XSLT_LIBS="-lxslt $LIBXML_LIBS $M_LIBS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
AC_SUBST(XSLT_LIBDIR)
|
AC_SUBST(XSLT_LIBDIR)
|
||||||
AC_SUBST(XSLT_INCLUDEDIR)
|
AC_SUBST(XSLT_INCLUDEDIR)
|
||||||
AC_SUBST(EXTRA_LIBS)
|
AC_SUBST(EXTRA_LIBS)
|
||||||
AC_SUBST(XSLT_LIBS)
|
AC_SUBST(XSLT_LIBS)
|
||||||
|
|
||||||
|
|
||||||
AC_OUTPUT([
|
AC_OUTPUT([
|
||||||
Makefile
|
Makefile
|
||||||
libxslt/Makefile
|
libxslt/Makefile
|
||||||
libxslt/xsltconfig.h
|
libxslt/xsltconfig.h
|
||||||
libxslt/xsltwin32config.h
|
libxslt/xsltwin32config.h
|
||||||
|
breakpoint/Makefile
|
||||||
libexslt/Makefile
|
libexslt/Makefile
|
||||||
libexslt/exsltconfig.h
|
libexslt/exsltconfig.h
|
||||||
xsltproc/Makefile
|
xsltproc/Makefile
|
||||||
|
@@ -60,6 +60,18 @@ static int xsltGetHTMLIDs(const xmlChar *version, const xmlChar **publicID,
|
|||||||
const xmlChar **systemID);
|
const xmlChar **systemID);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WITH_DEBUGGER
|
||||||
|
|
||||||
|
/* -- breakpoint code --- */
|
||||||
|
#include "../breakpoint/breakpoint.h"
|
||||||
|
|
||||||
|
int xslDebugStatus;
|
||||||
|
|
||||||
|
/* -------- end ---------- */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int xsltMaxDepth = 500;
|
int xsltMaxDepth = 500;
|
||||||
|
|
||||||
@@ -1008,6 +1020,68 @@ xsltProcessOneNode(xsltTransformContextPtr ctxt, xmlNodePtr node,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WITH_DEBUGGER
|
||||||
|
|
||||||
|
/* make it eaier to reuse the code for handling checking of debug
|
||||||
|
status and breaking to debugger if needed */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* xslHandleDebugger:
|
||||||
|
* @cur : source node being executed
|
||||||
|
* @node : data node being processed
|
||||||
|
* @templ : temlate that applies to node
|
||||||
|
* @ctxt : the xslt transform context
|
||||||
|
*
|
||||||
|
* If either cur or node are a breakpoint, or xslDebugStatus in state
|
||||||
|
* where debugging must occcur at this time then transfer control
|
||||||
|
* to the xslDebugBreak function
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
xslHandleDebugger(xmlNodePtr cur, xmlNodePtr node,
|
||||||
|
xsltTemplatePtr templ, xsltTransformContextPtr ctxt)
|
||||||
|
{
|
||||||
|
|
||||||
|
xslSetActiveBreakPoint(0);
|
||||||
|
|
||||||
|
switch (xslDebugStatus) {
|
||||||
|
|
||||||
|
/* A temparary stopping point */
|
||||||
|
case DEBUG_STOP:
|
||||||
|
xslDebugStatus = DEBUG_CONT;
|
||||||
|
/* only allow breakpoints at xml elements */
|
||||||
|
if (xmlGetLineNo(cur) != -1)
|
||||||
|
xslDebugBreak(cur, node, templ, ctxt);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DEBUG_STEP:
|
||||||
|
/* only allow breakpoints at xml elements */
|
||||||
|
if (xmlGetLineNo(cur) != -1)
|
||||||
|
xslDebugBreak(cur, node, templ, ctxt);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DEBUG_CONT:
|
||||||
|
{
|
||||||
|
int breakPoint = xslIsBreakPointNode(cur);
|
||||||
|
|
||||||
|
if (breakPoint) {
|
||||||
|
if (xslIsBreakPointEnabled(breakPoint) == 1) {
|
||||||
|
xslSetActiveBreakPoint(breakPoint);
|
||||||
|
xslDebugBreak(cur, node, templ, ctxt);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
breakPoint = xslIsBreakPointNode(node);
|
||||||
|
if (xslIsBreakPointEnabled(breakPoint) == 1) {
|
||||||
|
xslSetActiveBreakPoint(breakPoint);
|
||||||
|
xslDebugBreak(cur, node, templ, ctxt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* xsltApplyOneTemplate:
|
* xsltApplyOneTemplate:
|
||||||
* @ctxt: a XSLT process context
|
* @ctxt: a XSLT process context
|
||||||
@@ -1031,8 +1105,39 @@ xsltApplyOneTemplate(xsltTransformContextPtr ctxt, xmlNodePtr node,
|
|||||||
xmlNodePtr oldInst = NULL;
|
xmlNodePtr oldInst = NULL;
|
||||||
xmlAttrPtr attrs;
|
xmlAttrPtr attrs;
|
||||||
int oldBase;
|
int oldBase;
|
||||||
|
|
||||||
|
#ifdef WITH_DEBUGGER
|
||||||
|
int addCallResult = 0;
|
||||||
|
#endif
|
||||||
long start = 0;
|
long start = 0;
|
||||||
|
|
||||||
|
#ifdef WITH_DEBUGGER
|
||||||
|
/* --- break point code --- */
|
||||||
|
if (xslDebugStatus != DEBUG_NONE) {
|
||||||
|
if (templ) {
|
||||||
|
addCallResult = xslAddCall(templ, templ->elem);
|
||||||
|
} else {
|
||||||
|
addCallResult = xslAddCall(NULL, list);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (xslDebugStatus) {
|
||||||
|
|
||||||
|
case DEBUG_RUN_RESTART:
|
||||||
|
case DEBUG_QUIT:
|
||||||
|
if (addCallResult)
|
||||||
|
xslDropCall();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (templ)
|
||||||
|
xslHandleDebugger(templ->elem, node, templ, ctxt);
|
||||||
|
else
|
||||||
|
xslHandleDebugger(list, node, templ, ctxt);
|
||||||
|
|
||||||
|
}
|
||||||
|
/* -- end --- */
|
||||||
|
#endif
|
||||||
|
|
||||||
if ((ctxt == NULL) || (list == NULL))
|
if ((ctxt == NULL) || (list == NULL))
|
||||||
return;
|
return;
|
||||||
CHECK_STOPPED;
|
CHECK_STOPPED;
|
||||||
@@ -1078,6 +1183,16 @@ xsltApplyOneTemplate(xsltTransformContextPtr ctxt, xmlNodePtr node,
|
|||||||
cur = list;
|
cur = list;
|
||||||
while (cur != NULL) {
|
while (cur != NULL) {
|
||||||
ctxt->inst = cur;
|
ctxt->inst = cur;
|
||||||
|
#ifdef WITH_DEBUGGER
|
||||||
|
/* --- break point code --- */
|
||||||
|
switch (xslDebugStatus) {
|
||||||
|
case DEBUG_RUN_RESTART:
|
||||||
|
case DEBUG_QUIT:
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
/* --- end --- */
|
||||||
|
#endif
|
||||||
/*
|
/*
|
||||||
* test, we must have a valid insertion point
|
* test, we must have a valid insertion point
|
||||||
*/
|
*/
|
||||||
@@ -1088,6 +1203,10 @@ xsltApplyOneTemplate(xsltTransformContextPtr ctxt, xmlNodePtr node,
|
|||||||
#endif
|
#endif
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
#ifdef WITH_DEBUGGER
|
||||||
|
if (xslDebugStatus != DEBUG_NONE)
|
||||||
|
xslHandleDebugger(cur, node, templ, ctxt);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (IS_XSLT_ELEM(cur)) {
|
if (IS_XSLT_ELEM(cur)) {
|
||||||
/*
|
/*
|
||||||
@@ -1336,6 +1455,11 @@ error:
|
|||||||
ctxt->profTab[ctxt->profNr - 1] += total;
|
ctxt->profTab[ctxt->profNr - 1] += total;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef WITH_DEBUGGER
|
||||||
|
if (xslDebugStatus != DEBUG_NONE && addCallResult) {
|
||||||
|
xslDropCall();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2388,6 +2512,10 @@ xsltCallTemplate(xsltTransformContextPtr ctxt, xmlNodePtr node,
|
|||||||
|
|
||||||
cur = inst->children;
|
cur = inst->children;
|
||||||
while (cur != NULL) {
|
while (cur != NULL) {
|
||||||
|
#ifdef WITH_DEBUGGER
|
||||||
|
if (xslDebugStatus != DEBUG_NONE)
|
||||||
|
xslHandleDebugger(cur, node, comp->templ, ctxt);
|
||||||
|
#endif
|
||||||
if (ctxt->state == XSLT_STATE_STOPPED) break;
|
if (ctxt->state == XSLT_STATE_STOPPED) break;
|
||||||
if (IS_XSLT_ELEM(cur)) {
|
if (IS_XSLT_ELEM(cur)) {
|
||||||
if (IS_XSLT_NAME(cur, "with-param")) {
|
if (IS_XSLT_NAME(cur, "with-param")) {
|
||||||
@@ -2584,6 +2712,10 @@ xsltApplyTemplates(xsltTransformContextPtr ctxt, xmlNodePtr node,
|
|||||||
*/
|
*/
|
||||||
cur = inst->children;
|
cur = inst->children;
|
||||||
while (cur!=NULL) {
|
while (cur!=NULL) {
|
||||||
|
#ifdef WITH_DEBUGGER
|
||||||
|
if (xslDebugStatus != DEBUG_NONE)
|
||||||
|
xslHandleDebugger(cur, node, comp->templ, ctxt);
|
||||||
|
#endif
|
||||||
if (ctxt->state == XSLT_STATE_STOPPED) break;
|
if (ctxt->state == XSLT_STATE_STOPPED) break;
|
||||||
if (IS_XSLT_ELEM(cur)) {
|
if (IS_XSLT_ELEM(cur)) {
|
||||||
if (IS_XSLT_NAME(cur, "with-param")) {
|
if (IS_XSLT_NAME(cur, "with-param")) {
|
||||||
@@ -2712,6 +2844,13 @@ xsltChoose(xsltTransformContextPtr ctxt, xmlNodePtr node,
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
when = replacement;
|
when = replacement;
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef WITH_DEBUGGER
|
||||||
|
if (xslDebugStatus != DEBUG_NONE)
|
||||||
|
xslHandleDebugger(when, node, comp->templ, ctxt);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef WITH_XSLT_DEBUG_PROCESS
|
#ifdef WITH_XSLT_DEBUG_PROCESS
|
||||||
xsltGenericDebug(xsltGenericDebugContext,
|
xsltGenericDebug(xsltGenericDebugContext,
|
||||||
"xsltChoose: test %s\n", wcomp->test);
|
"xsltChoose: test %s\n", wcomp->test);
|
||||||
@@ -2763,6 +2902,11 @@ xsltChoose(xsltTransformContextPtr ctxt, xmlNodePtr node,
|
|||||||
replacement = replacement->next;
|
replacement = replacement->next;
|
||||||
}
|
}
|
||||||
if (IS_XSLT_ELEM(replacement) && (IS_XSLT_NAME(replacement, "otherwise"))) {
|
if (IS_XSLT_ELEM(replacement) && (IS_XSLT_NAME(replacement, "otherwise"))) {
|
||||||
|
#ifdef WITH_DEBUGGER
|
||||||
|
if (xslDebugStatus != DEBUG_NONE)
|
||||||
|
xslHandleDebugger(replacement, node, comp->templ, ctxt);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef WITH_XSLT_DEBUG_PROCESS
|
#ifdef WITH_XSLT_DEBUG_PROCESS
|
||||||
xsltGenericDebug(xsltGenericDebugContext,
|
xsltGenericDebug(xsltGenericDebugContext,
|
||||||
"evaluating xsl:otherwise\n");
|
"evaluating xsl:otherwise\n");
|
||||||
@@ -2947,6 +3091,10 @@ xsltForEach(xsltTransformContextPtr ctxt, xmlNodePtr node,
|
|||||||
} else {
|
} else {
|
||||||
sorts[nbsorts++] = replacement;
|
sorts[nbsorts++] = replacement;
|
||||||
}
|
}
|
||||||
|
#ifdef WITH_DEBUGGER
|
||||||
|
if (xslDebugStatus != DEBUG_NONE)
|
||||||
|
xslHandleDebugger(replacement, node, NULL, ctxt);
|
||||||
|
#endif
|
||||||
replacement = replacement->next;
|
replacement = replacement->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -134,6 +134,15 @@ void xsltForEach (xsltTransformContextPtr ctxt,
|
|||||||
xmlNodePtr inst,
|
xmlNodePtr inst,
|
||||||
xsltStylePreCompPtr comp);
|
xsltStylePreCompPtr comp);
|
||||||
void xsltRegisterAllElement (xsltTransformContextPtr ctxt);
|
void xsltRegisterAllElement (xsltTransformContextPtr ctxt);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Hook for the debugger if activated.
|
||||||
|
*/
|
||||||
|
void xslHandleDebugger (xmlNodePtr cur,
|
||||||
|
xmlNodePtr node,
|
||||||
|
xsltTemplatePtr templ,
|
||||||
|
xsltTransformContextPtr ctxt);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -65,6 +65,17 @@ extern "C" {
|
|||||||
#define DEBUG_MEMORY_LOCATION
|
#define DEBUG_MEMORY_LOCATION
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WITH_XSLT_DEBUGGER:
|
||||||
|
*
|
||||||
|
* Activate the compilation of the debugger support. Speed penalty
|
||||||
|
* is insignifiant.
|
||||||
|
* On by default unless --without-debugger is passed to configure
|
||||||
|
*/
|
||||||
|
#if @WITH_DEBUGGER@
|
||||||
|
#define WITH_XSLT_DEBUGGER
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ATTRIBUTE_UNUSED:
|
* ATTRIBUTE_UNUSED:
|
||||||
*
|
*
|
||||||
|
@@ -8,8 +8,13 @@ if DV_STATIC_LINK
|
|||||||
#
|
#
|
||||||
all: xsltproc
|
all: xsltproc
|
||||||
|
|
||||||
|
if WITH_DEBUGGER
|
||||||
|
xsltproc: xsltproc.o ../libxslt/.libs/libxslt.a ../libexslt/.libs/libexslt.a ../breakpoint/.libs/libxsltbreakpoint.a ../../XML/.libs/libxml2.a
|
||||||
|
gcc -g -O -o xsltproc xsltproc.o ../libxslt/.libs/libxslt.a ../breakpoint/.libs/libxsltbreakpoint.a ../libexslt/.libs/libexslt.a ../../XML/.libs/libxml2.a -lz -lm
|
||||||
|
else
|
||||||
xsltproc: xsltproc.o ../libxslt/.libs/libxslt.a ../libexslt/.libs/libexslt.a ../../XML/.libs/libxml2.a
|
xsltproc: xsltproc.o ../libxslt/.libs/libxslt.a ../libexslt/.libs/libexslt.a ../../XML/.libs/libxml2.a
|
||||||
gcc -g -O -o xsltproc xsltproc.o ../libxslt/.libs/libxslt.a ../libexslt/.libs/libexslt.a ../../XML/.libs/libxml2.a -lz -lm
|
gcc -g -O -o xsltproc xsltproc.o ../libxslt/.libs/libxslt.a ../libexslt/.libs/libexslt.a ../../XML/.libs/libxml2.a -lz -lm
|
||||||
|
endif
|
||||||
|
|
||||||
programs=
|
programs=
|
||||||
else
|
else
|
||||||
@@ -23,6 +28,22 @@ xsltproc_LDFLAGS =
|
|||||||
xsltproc_DEPENDENCIES = $(DEPS)
|
xsltproc_DEPENDENCIES = $(DEPS)
|
||||||
xsltproc_LDADD = $(LDADDS)
|
xsltproc_LDADD = $(LDADDS)
|
||||||
|
|
||||||
DEPS = $(top_builddir)/libxslt/libxslt.la $(top_builddir)/libexslt/libexslt.la
|
if WITH_DEBUGGER
|
||||||
|
DEPS = $(top_builddir)/libxslt/libxslt.la \
|
||||||
|
$(top_builddir)/breakpoint/libxsltbreakpoint.la \
|
||||||
|
$(top_builddir)/libexslt/libexslt.la
|
||||||
|
else
|
||||||
|
DEPS = $(top_builddir)/libxslt/libxslt.la \
|
||||||
|
$(top_builddir)/libexslt/libexslt.la
|
||||||
|
endif
|
||||||
|
|
||||||
|
if WITH_DEBUGGER
|
||||||
LDADDS = $(top_builddir)/libxslt/libxslt.la \
|
LDADDS = $(top_builddir)/libxslt/libxslt.la \
|
||||||
$(top_builddir)/libexslt/libexslt.la @LIBXML_LIBS@ $(EXTRA_LIBS)
|
$(top_builddir)/libexslt/libexslt.la \
|
||||||
|
$(top_builddir)/breakpoint/libxsltbreakpoint.la \
|
||||||
|
@LIBXML_LIBS@ $(EXTRA_LIBS)
|
||||||
|
else
|
||||||
|
LDADDS = $(top_builddir)/libxslt/libxslt.la \
|
||||||
|
$(top_builddir)/libexslt/libexslt.la \
|
||||||
|
@LIBXML_LIBS@ $(EXTRA_LIBS)
|
||||||
|
endif
|
||||||
|
Reference in New Issue
Block a user