[ooo-build-commit] .: patches/dev300
Cédric Bosdonnat
cbosdo at kemper.freedesktop.org
Sun Sep 12 14:22:55 PDT 2010
patches/dev300/apply | 1
patches/dev300/idlc-error-offset.diff | 235 ++++++++++++++++++++++++++++++++++
2 files changed, 236 insertions(+)
New commits:
commit a3a35ee9936d6c19a5ff36fa14bb5dd9f396bbfc
Author: Cédric Bosdonnat <cedricbosdo at openoffice.org>
Date: Sun Sep 12 23:21:17 2010 +0200
Fixed i#81780: adding offset info to idlc errors
diff --git a/patches/dev300/apply b/patches/dev300/apply
index 4cd94c5..9cff46d 100644
--- a/patches/dev300/apply
+++ b/patches/dev300/apply
@@ -1245,6 +1245,7 @@ psprint_config-no-orig.diff, jholesov
[ SdkFixes ]
# fix configure.pl
odk-configure-honour-ure-link.diff
+idlc-error-offset.diff, cbosdo, i#81780
[ DebianOnly ]
open-url-support-iceanimals.diff
diff --git a/patches/dev300/idlc-error-offset.diff b/patches/dev300/idlc-error-offset.diff
new file mode 100644
index 0000000..e8ef4e8
--- /dev/null
+++ b/patches/dev300/idlc-error-offset.diff
@@ -0,0 +1,235 @@
+Add the offset number on the idlc error messages
+
+From: Cédric Bosdonnat <cedricbosdo at openoffice.org>
+
+
+---
+
+ idlc/inc/idlc/idlc.hxx | 8 ++++++++
+ idlc/source/errorhandler.cxx | 15 ++++++++++++---
+ idlc/source/idlc.cxx | 2 ++
+ idlc/source/parser.y | 7 ++++++-
+ idlc/source/scanner.ll | 35 ++++++++++++++++++++++++-----------
+ 5 files changed, 52 insertions(+), 15 deletions(-)
+
+
+diff --git idlc/inc/idlc/idlc.hxx idlc/inc/idlc/idlc.hxx
+index 051a9e6..b7ae506 100644
+--- idlc/inc/idlc/idlc.hxx
++++ idlc/inc/idlc/idlc.hxx
+@@ -102,6 +102,12 @@ public:
+ { m_warningCount++; }
+ sal_uInt32 getLineNumber()
+ { return m_lineNumber; }
++ sal_uInt32 getOffsetStart()
++ { return m_offsetStart; }
++ sal_uInt32 getOffsetEnd()
++ { return m_offsetEnd; }
++ void setOffset( sal_uInt32 start, sal_uInt32 end)
++ { m_offsetStart = start; m_offsetEnd = end; }
+ void setLineNumber(sal_uInt32 lineNumber)
+ { m_lineNumber = lineNumber; }
+ void incLineNumber()
+@@ -136,6 +142,8 @@ private:
+ sal_uInt32 m_errorCount;
+ sal_uInt32 m_warningCount;
+ sal_uInt32 m_lineNumber;
++ sal_uInt32 m_offsetStart;
++ sal_uInt32 m_offsetEnd;
+ ParseState m_parseState;
+ StringSet m_includes;
+ };
+diff --git idlc/source/errorhandler.cxx idlc/source/errorhandler.cxx
+index a9006b9..de960ad 100644
+--- idlc/source/errorhandler.cxx
++++ idlc/source/errorhandler.cxx
+@@ -488,7 +488,7 @@ static OString flagToString(sal_uInt32 flag)
+ return flagStr;
+ }
+
+-static void errorHeader(ErrorCode eCode, sal_Int32 lineNumber)
++static void errorHeader(ErrorCode eCode, sal_Int32 lineNumber, sal_uInt32 start, sal_uInt32 end)
+ {
+ OString file;
+ if ( idlc()->getFileName() == idlc()->getRealFileName() )
+@@ -496,14 +496,23 @@ static void errorHeader(ErrorCode eCode, sal_Int32 lineNumber)
+ else
+ file = idlc()->getFileName();
+
+- fprintf(stderr, "%s(%lu) : %s", file.getStr(),
++ fprintf(stderr, "%s:%lu [%lu:%lu] : %s", file.getStr(),
+ sal::static_int_cast< unsigned long >(lineNumber),
++ sal::static_int_cast< unsigned long >(start),
++ sal::static_int_cast< unsigned long >(end),
+ errorCodeToMessage(eCode));
+ }
++
++static void errorHeader(ErrorCode eCode, sal_uInt32 lineNumber)
++{
++ errorHeader(eCode, lineNumber,
++ idlc()->getOffsetStart(), idlc()->getOffsetEnd());
++}
+
+ static void errorHeader(ErrorCode eCode)
+ {
+- errorHeader(eCode, idlc()->getLineNumber());
++ errorHeader(eCode, idlc()->getLineNumber(),
++ idlc()->getOffsetStart(), idlc()->getOffsetEnd());
+ }
+
+ static void warningHeader(WarningCode wCode)
+diff --git idlc/source/idlc.cxx idlc/source/idlc.cxx
+index 1cb6ed2..1c75d78 100644
+--- idlc/source/idlc.cxx
++++ idlc/source/idlc.cxx
+@@ -219,6 +219,8 @@ Idlc::Idlc(Options* pOptions)
+ , m_errorCount(0)
+ , m_warningCount(0)
+ , m_lineNumber(0)
++ , m_offsetStart(0)
++ , m_offsetEnd(0)
+ , m_parseState(PS_NoState)
+ {
+ m_pScopes = new AstStack();
+diff --git idlc/source/parser.y idlc/source/parser.y
+index 8da9c7a..b6c56c6 100644
+--- idlc/source/parser.y
++++ idlc/source/parser.y
+@@ -103,13 +103,16 @@
+
+ #include <algorithm>
+ #include <vector>
++
++#include <parser.hxx>
+
+ using namespace ::rtl;
+
+ #define YYDEBUG 1
+ #define YYERROR_VERBOSE 1
++#define YYLEX_PARAM &yylval, &yylloc
+
+-extern int yylex(void);
++extern int yylex (YYSTYPE * yylval_param,YYLTYPE * yylloc_param );
+ void yyerror(char const *);
+
+ void checkIdentifier(::rtl::OString* id)
+@@ -262,6 +265,7 @@ bool includes(AstDeclaration const * type1, AstDeclaration const * type2) {
+ #pragma warning(disable: 4273 4701 4706)
+ #endif
+ %}
++%locations
+ /*
+ * Declare the type of values in the grammar
+ */
+@@ -972,6 +976,7 @@ attribute_get_raises:
+ rtl::OStringToOUString(
+ idlc()->getDocumentation(), RTL_TEXTENCODING_UTF8));
+ $$.exceptions = $2;
++ int line = @2.first_line;
+ }
+ ;
+
+diff --git idlc/source/scanner.ll idlc/source/scanner.ll
+index 4125195..44ce74d 100644
+--- idlc/source/scanner.ll
++++ idlc/source/scanner.ll
+@@ -46,12 +46,21 @@
+
+ #include "attributeexceptions.hxx"
+
++
+ class AstExpression;
+ class AstArray;
+ class AstMember;
+
+ #include <parser.hxx>
+
++/* handle locations */
++int yycolumn = 1;
++
++#define YY_USER_ACTION yylloc->first_line = yylloc->last_line = yylineno; \
++ yylloc->first_column = yycolumn; yylloc->last_column = yycolumn+yyleng-1; \
++ idlc()->setOffset(yylloc->first_column, yylloc->last_column); \
++ yycolumn += yyleng;
++
+ sal_Int32 beginLine = 0;
+ ::rtl::OString docu;
+
+@@ -225,6 +234,7 @@ static void parseLineAndFile(sal_Char* pBuf)
+ for (; *r != '\0' && *r != ' ' && *r != '\t'; r++) ;
+ *r++ = 0;
+ idlc()->setLineNumber((sal_uInt32)atol(h));
++ yylineno = atol(h);
+
+ /* Find file name, if present */
+ for (; *r != '"'; r++)
+@@ -260,6 +270,7 @@ static void parseLineAndFile(sal_Char* pBuf)
+ #endif
+ %}
+
++%option bison-bridge bison-locations
+ %option noyywrap
+ %option never-interactive
+
+@@ -281,8 +292,10 @@ IDENTIFIER ("_"?({ALPHA}|{DIGIT})+)*
+ %%
+
+ [ \t\r]+ ; /* eat up whitespace */
+-[\n] {
+- idlc()->incLineNumber();
++[\n] {
++ idlc()->incLineNumber();
++ yycolumn = 1;
++ yylineno++;
+ }
+
+ attribute return IDL_ATTRIBUTE;
+@@ -347,39 +360,39 @@ published return IDL_PUBLISHED;
+ "..." return IDL_ELLIPSIS;
+
+ ("-")?{INT_LITERAL}+(l|L|u|U)? {
+- return asciiToInteger(yytext, &yylval.ival, &yylval.uval);
++ return asciiToInteger(yytext, &yylval->ival, &yylval->uval);
+ }
+
+ ("-")?{OCT_LITERAL}+(l|L|u|U)? {
+- return asciiToInteger(yytext, &yylval.ival, &yylval.uval);
++ return asciiToInteger(yytext, &yylval->ival, &yylval->uval);
+ }
+
+ ("-")?{HEX_LITERAL}+(l|L|u|U)? {
+- return asciiToInteger(yytext, &yylval.ival, &yylval.uval);
++ return asciiToInteger(yytext, &yylval->ival, &yylval->uval);
+ }
+
+ ("-")?{DIGIT}+(e|E){1}(("+"|"-")?{DIGIT}+)+(f|F)? |
+ ("-")?"."{DIGIT}+((e|E)("+"|"-")?{DIGIT}+)?(f|F)? |
+ ("-")?{DIGIT}*"."{DIGIT}+((e|E)("+"|"-")?{DIGIT}+)?(f|F)? {
+- yylval.dval = asciiToFloat( yytext );
++ yylval->dval = asciiToFloat( yytext );
+ return IDL_FLOATING_PT_LITERAL;
+ }
+
+ {IDENTIFIER} {
+- yylval.sval = new ::rtl::OString(yytext);
+- return IDL_IDENTIFIER;
++ yylval->sval = new ::rtl::OString(yytext);
++ return IDL_IDENTIFIER;
+ }
+
+ \<\< {
+- yylval.strval = yytext;
++ yylval->strval = yytext;
+ return IDL_LEFTSHIFT;
+ }
+ \>\> {
+- yylval.strval = yytext;
++ yylval->strval = yytext;
+ return IDL_RIGHTSHIFT;
+ }
+ \:\: {
+- yylval.strval = yytext;
++ yylval->strval = yytext;
+ return IDL_SCOPESEPARATOR;
+ }
+
More information about the ooo-build-commit
mailing list