The R Project SVN R

Rev

Rev 61827 | Rev 62372 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 61827 Rev 62367
Line 34... Line 34...
34
 
34
 
35
#ifndef min
35
#ifndef min
36
#define min(a, b) (a<b?a:b)
36
#define min(a, b) (a<b?a:b)
37
#endif
37
#endif
38
 
38
 
-
 
39
#if defined(__GNUC__) && __GNUC__ >= 3
-
 
40
#define NORET __attribute__((noreturn))
-
 
41
#else
-
 
42
#define NORET
-
 
43
#endif
-
 
44
 
-
 
45
 
39
/* Total line length, in chars, before splitting in warnings/errors */
46
/* Total line length, in chars, before splitting in warnings/errors */
40
#define LONGWARN 75
47
#define LONGWARN 75
41
 
48
 
42
/*
49
/*
43
Different values of inError are used to indicate different places
50
Different values of inError are used to indicate different places
Line 47... Line 54...
47
static int inWarning = 0;
54
static int inWarning = 0;
48
static int inPrintWarnings = 0;
55
static int inPrintWarnings = 0;
49
static int immediateWarning = 0;
56
static int immediateWarning = 0;
50
 
57
 
51
static void try_jump_to_restart(void);
58
static void try_jump_to_restart(void);
-
 
59
// The next is crucial to the use of NORET attributes.
-
 
60
static void NORET
52
static void jump_to_top_ex(Rboolean, Rboolean, Rboolean, Rboolean, Rboolean);
61
jump_to_top_ex(Rboolean, Rboolean, Rboolean, Rboolean, Rboolean);
53
static void signalInterrupt(void);
62
static void signalInterrupt(void);
54
static char * R_ConciseTraceback(SEXP call, int skip);
63
static char * R_ConciseTraceback(SEXP call, int skip);
55
 
64
 
56
/* Interface / Calling Hierarchy :
65
/* Interface / Calling Hierarchy :
57
 
66
 
Line 567... Line 576...
567
    int *poldval = (int *) data;
576
    int *poldval = (int *) data;
568
    inError = *poldval;
577
    inError = *poldval;
569
    R_Expressions = R_Expressions_keep;
578
    R_Expressions = R_Expressions_keep;
570
}
579
}
571
 
580
 
-
 
581
static void NORET
572
static void verrorcall_dflt(SEXP call, const char *format, va_list ap)
582
verrorcall_dflt(SEXP call, const char *format, va_list ap)
573
{
583
{
574
    RCNTXT cntxt;
584
    RCNTXT cntxt;
575
    const char *dcall;
585
    const char *dcall;
576
    char *p, *tr;
586
    char *p, *tr;
577
    int oldInError;
587
    int oldInError;
Line 692... Line 702...
692
    /* not reached */
702
    /* not reached */
693
    endcontext(&cntxt);
703
    endcontext(&cntxt);
694
    inError = oldInError;
704
    inError = oldInError;
695
}
705
}
696
 
706
 
697
static void errorcall_dflt(SEXP call, const char *format,...)
707
static void NORET errorcall_dflt(SEXP call, const char *format,...)
698
{
708
{
699
    va_list(ap);
709
    va_list(ap);
700
 
710
 
701
    va_start(ap, format);
711
    va_start(ap, format);
702
    verrorcall_dflt(call, format, ap);
712
    verrorcall_dflt(call, format, ap);
703
    va_end(ap);
713
    va_end(ap);
704
}
714
}
705
 
715
 
706
void errorcall(SEXP call, const char *format,...)
716
void NORET errorcall(SEXP call, const char *format,...)
707
{
717
{
708
    va_list(ap);
718
    va_list(ap);
709
 
719
 
710
    va_start(ap, format);
720
    va_start(ap, format);
711
    vsignalError(call, format, ap);
721
    vsignalError(call, format, ap);