VirtualBox

Ignore:
Timestamp:
Jan 2, 2015 12:27:36 PM (10 years ago)
Author:
vboxsync
Message:

VBoxDTrace: dt_lex.l and dt_grammar.y. (r30)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_lex.l

    r53634 r53654  
    2525 */
    2626
     27#ifndef VBOX
    2728#include <string.h>
    2829#include <stdlib.h>
     
    3132#include <ctype.h>
    3233#include <errno.h>
     34#else  /* VBOX */
     35# include <iprt/ctype.h>
     36# define isdigit(a_ch) RT_C_IS_DIGIT(a_ch)
     37#endif /* VBOX */
    3338
    3439#include <dt_impl.h>
     
    3742#include <dt_string.h>
    3843
     44#ifndef USING_FLEX
    3945/*
    4046 * We need to undefine lex's input and unput macros so that references to these
     
    4349#undef input
    4450#undef unput
     51#else  /* USING_FLEX */
     52# define YY_INPUT(buf, result, max_size) \
     53        do { \
     54                if (yypcb->pcb_fileptr != NULL) { \
     55                        result = (int)fread(buf, 1, max_size, yypcb->pcb_fileptr); \
     56                        if (!result && ferror(yypcb->pcb_fileptr)) \
     57                                YY_FATAL_ERROR("input in flex scanner failed"); \
     58                } else { \
     59                        size_t off = yypcb->pcb_strptr - yypcb->pcb_string; \
     60                        if (off < yypcb->pcb_strlen) { \
     61                                result = max_size; \
     62                                if ((size_t)result > yypcb->pcb_strlen) \
     63                                        result = (int)yypcb->pcb_strlen; \
     64                                memcpy(buf, yypcb->pcb_strptr, result); \
     65                                yypcb->pcb_strptr += result; \
     66                        } else \
     67                                result = 0; \
     68                } \
     69        } while (0)
     70#endif /* USING_FLEX */
    4571
    4672static int id_or_type(const char *);
     73#ifndef USING_FLEX
    4774static int input(void);
    4875static void unput(int);
     76#endif
    4977
    5078/*
     
    249277                         */
    250278                        if (isdigit(v[0]) || v[0] == '-' || v[0] == '+') {
     279#ifdef VBOX
     280                                int rc;
     281#endif
    251282                                if (isdigit(v[0]))
    252283                                        yyintprefix = 0;
     
    254285                                        yyintprefix = *v++;
    255286
     287#ifndef VBOX
    256288                                errno = 0;
    257289                                yylval.l_int = strtoull(v, &p, 0);
     290#else
     291                                rc = RTStrToUInt64Ex(v, &p, 0, &yylval.l_int);
     292#endif
    258293                                (void) strncpy(yyintsuffix, p,
    259294                                    sizeof (yyintsuffix));
    260295                                yyintdecimal = *v != '0';
    261296
    262                                 if (errno == ERANGE) {
     297#ifndef VBOX
     298                                if (errno == ERANGE)
     299#else
     300                                if (rc == VWRN_NUMBER_TOO_BIG || rc == VWRN_NEGATIVE_UNSIGNED)
     301#endif
    263302                                        xyerror(D_MACRO_OFLOW, "macro argument"
    264303                                            " %s constant %s results in integer"
    265304                                            " overflow\n", yytext, v);
    266                                 }
    267305
    268306                                return (DT_TOK_INT);
     
    336374                        char *p;
    337375
     376#ifndef VBOX
    338377                        errno = 0;
    339378                        yylval.l_int = strtoull(yytext, &p, 0);
     379#else
     380                        int rc = RTStrToUInt64Ex(yytext, &p, 0, &yylval.l_int);
     381#endif
    340382                        yyintprefix = 0;
    341383                        (void) strncpy(yyintsuffix, p, sizeof (yyintsuffix));
    342384                        yyintdecimal = yytext[0] != '0';
    343385
    344                         if (errno == ERANGE) {
     386#ifndef VBOX
     387                        if (errno == ERANGE)
     388#else
     389                        if (rc == VWRN_NUMBER_TOO_BIG || rc == VWRN_NEGATIVE_UNSIGNED)
     390#endif
    345391                                xyerror(D_INT_OFLOW, "constant %s results in "
    346392                                    "integer overflow\n", yytext);
    347                         }
    348393
    349394                        if (*p != '\0' && strchr("uUlL", *p) == NULL) {
     
    697742        yylineno = 1;
    698743        yypragma = NULL;
     744#ifndef USING_FLEX
    699745        yysptr = yysbuf;
     746#endif
    700747}
    701748
     
    793840}
    794841
     842#ifndef USING_FLEX
     843
    795844static int
    796845input(void)
     
    834883        yytchar = c;
    835884}
     885
     886#endif /* USING_FLEX */
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette