Unnamed Fossil Project

Check-in [81a745c894]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:updated
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1:81a745c894b394f1128043e8588475429169d802
User & Date: alexey@sudachen.name 2012-06-09 09:51:32
Context
2012-06-13
01:01
beta.teggo.cl opened check-in: b4acdb14a7 user: alexey@sudachen.name tags: trunk
2012-06-09
09:51
updated check-in: 81a745c894 user: alexey@sudachen.name tags: trunk
2012-05-31
03:01
updated check-in: 3d1dd3c60f user: alexey@sudachen.name tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to dicto.hc.

48
49
50
51
52
53
54


55
56
57
58
59
60
61
...
385
386
387
388
389
390
391




































392
393
394
395
396
397
398

#ifdef _LIBYOYO
#define _YOYO_DICTO_BUILTIN
#endif

#include "yoyo.hc"
#include "crc.hc"



typedef struct _YOYO_DICTO_REC
  {
    struct _YOYO_DICTO_REC *next;
    void *ptr;
    byte_t hashcode;
    char key[1];
................................................................................
              nrec = nrec->next;
            }  
        }
  }
#endif
  ;





































typedef void (*dicto_format_printer_t)(YOYO_BUFFER *bf,void *S);

char *Dicto_Format(YOYO_DICTO *o, dicto_format_printer_t print, YOYO_BUFFER *_bf, int pretty)
#ifdef _YOYO_DICTO_BUILTIN  
  {
    int start = 0, i, j=0;
    YOYO_BUFFER *bf = _bf;







>
>







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
...
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436

#ifdef _LIBYOYO
#define _YOYO_DICTO_BUILTIN
#endif

#include "yoyo.hc"
#include "crc.hc"
#include "buffer.hc"
#include "array.hc"

typedef struct _YOYO_DICTO_REC
  {
    struct _YOYO_DICTO_REC *next;
    void *ptr;
    byte_t hashcode;
    char key[1];
................................................................................
              nrec = nrec->next;
            }  
        }
  }
#endif
  ;

void _Dicto_Filter_Push_Value(char *key, void *value, YOYO_ARRAY *a)
#ifdef _YOYO_DICTO_BUILTIN  
  {
    Array_Push(a,value);
  }
#endif
  ;
    
YOYO_ARRAY *Dicto_Values(YOYO_DICTO *o)
#ifdef _YOYO_DICTO_BUILTIN  
  {
    YOYO_ARRAY *a = Array_Void();
    Dicto_Apply(o,_Dicto_Filter_Push_Value,a);
    return a;
  }
#endif
  ;
    
void _Dicto_Filter_Push_Key(char *key, void *value, YOYO_ARRAY *a)
#ifdef _YOYO_DICTO_BUILTIN  
  {
    Array_Push(a,key);
  }
#endif
  ;
    
YOYO_ARRAY *Dicto_Keys(YOYO_DICTO *o)
#ifdef _YOYO_DICTO_BUILTIN  
  {
    YOYO_ARRAY *a = Array_Void();
    Dicto_Apply(o,_Dicto_Filter_Push_Key,a);
    return a;
  }
#endif
  ;
  
typedef void (*dicto_format_printer_t)(YOYO_BUFFER *bf,void *S);

char *Dicto_Format(YOYO_DICTO *o, dicto_format_printer_t print, YOYO_BUFFER *_bf, int pretty)
#ifdef _YOYO_DICTO_BUILTIN  
  {
    int start = 0, i, j=0;
    YOYO_BUFFER *bf = _bf;

Changes to httpd.hc.

169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
    HTTPD_REJECT           = -1,

    /* HTTPD_RQST_PERFORM result */
    HTTPD_SUCCESS          = 200,
    HTTPD_PARTIAL          = 206,

    /* HTTPD_RQST_PERFORM/HTTPD_RQST_POSTDTA result */
    HTTPD_REDIRECT         = 301,
    HTTPD_FORBIDEN         = 403,
    HTTPD_NOTFOUND         = 404,
    HTTPD_SERVERROR        = 501,

    HTTPD_MAXBUF_LENGTH          = 64*1024,
    HTTPD_MAX_REQUEST_LENGTH     = 8*1024,
    HTTPD_MAXBUF_POSTDATA_LENGTH = 64*1024,







|







169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
    HTTPD_REJECT           = -1,

    /* HTTPD_RQST_PERFORM result */
    HTTPD_SUCCESS          = 200,
    HTTPD_PARTIAL          = 206,

    /* HTTPD_RQST_PERFORM/HTTPD_RQST_POSTDTA result */
    HTTPD_REDIRECT         = 303,
    HTTPD_FORBIDEN         = 403,
    HTTPD_NOTFOUND         = 404,
    HTTPD_SERVERROR        = 501,

    HTTPD_MAXBUF_LENGTH          = 64*1024,
    HTTPD_MAX_REQUEST_LENGTH     = 8*1024,
    HTTPD_MAXBUF_POSTDATA_LENGTH = 64*1024,

Changes to sar.hc.

59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
..
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
..
99
100
101
102
103
104
105

106
107
108
109
110
111
112
113
114
115
116
117
118
...
138
139
140
141
142
143
144





145
146
147
148
149
150
151
...
185
186
187
188
189
190
191
192





193
194
195
196
197
198
199
...
202
203
204
205
206
207
208

209
210
211
212
213
214
215
216
217
218
219

220
221
    int  allocated;
  } YOYO_STRUCTED_ARRAY;

void *Structed_Array_Insert(YOYO_STRUCTED_ARRAY *arr,void *el,int width,int at, int count)
#ifdef _YOYO_SAR_BUITIN
  {
    STRICT_REQUIRE( arr != 0 );
    if ( at < 0 ) at = arr->count-at+1;
    STRICT_REQUIRE( at >= 0 );
    STRICT_REQUIRE( count >= 0 );
    STRICT_REQUIRE( el != 0 );
    STRICT_REQUIRE( width >= 0 );
    
    arr->count = Yo_Elm_Insert_Npl(&arr->at,at,arr->count,el,count,width,&arr->allocated);
    return arr->at+(at*width);
................................................................................
#endif
  ;
  
int Structed_Array_Remove(YOYO_STRUCTED_ARRAY *arr,int width,int at,int count)
#ifdef _YOYO_SAR_BUITIN
  {
    STRICT_REQUIRE( arr != 0 );
    if ( at < 0 ) at = arr->count-at+1;
    STRICT_REQUIRE( at >= 0 );
    STRICT_REQUIRE( count >= 0 );
    STRICT_REQUIRE( el != 0 );
    STRICT_REQUIRE( width >= 0 );
    STRICT_REQUIRE( count <= arr->count );
    
    if ( arr->count < count && at < arr->count - count )
................................................................................
  {
    STRICT_REQUIRE( arr != 0 );
    STRICT_REQUIRE( count >= 0 );
    STRICT_REQUIRE( width >= 0 );

    if ( count*width > arr->allocated )
      Yo_Elm_Resize_Npl(&arr->at,count,width,&arr->allocated);

    arr->count = count;        
    return arr->allocated/width;
  }
#endif
  ;
  
int Structed_Array_Reserve(YOYO_STRUCTED_ARRAY *arr,int width,int count)
#ifdef _YOYO_SAR_BUITIN
  {
    STRICT_REQUIRE( arr != 0 );
    STRICT_REQUIRE( count >= 0 );
    STRICT_REQUIRE( width >= 0 );

................................................................................
    {\
      return Structed_Array_Insert((YOYO_STRUCTED_ARRAY*)arr,el,sizeof(Elm_Tp),at,count);\
    }\
  Elm_Tp *Fpfx##_Push(Arr_Tp *arr,Elm_Tp el)\
    {\
      return Structed_Array_Insert((YOYO_STRUCTED_ARRAY*)arr,&el,sizeof(Elm_Tp),-1,1);\
    }\





  Elm_Tp *Fpfx##_Push_Ptr(Arr_Tp *arr,Elm_Tp *el,int count)\
    {\
      return Structed_Array_Insert((YOYO_STRUCTED_ARRAY*)arr,el,sizeof(Elm_Tp),-1,count);\
    }\
  Elm_Tp *Fpfx##_Push_Front(Arr_Tp *arr,Elm_Tp el)\
    {\
      return Structed_Array_Insert((YOYO_STRUCTED_ARRAY*)arr,&el,sizeof(Elm_Tp),0,1);\
................................................................................
      return Structed_Array_Reserve((YOYO_STRUCTED_ARRAY*)arr,sizeof(Elm_Tp),count);\
    }\
  void Arr_Tp##_Destruct(Arr_Tp *arr)\
    {\
      free(arr->at);\
      __Destruct(arr);\
    }\
  Arr_Tp *Fpfx##_Init(int count)\





    {\
      Arr_Tp *arr = __Object_Dtor(sizeof(Arr_Tp),Arr_Tp##_Destruct);\
      if ( count ) Fpfx##_Resize(arr,count);\
      return arr;\
    }

#define STRUCTED_ARRAY_DEF(Fpfx,Arr_Tp,Elm_Tp) \
................................................................................
      Elm_Tp *at;\
      int count;\
      int _;\
    } Arr_Tp;\
  Elm_Tp *Fpfx##_Insert(Arr_Tp *arr,Elm_Tp el,int at);\
  Elm_Tp *Fpfx##_Insert_Ptr(Arr_Tp *arr,Elm_Tp *el,int at,int count);\
  Elm_Tp *Fpfx##_Push(Arr_Tp *arr,Elm_Tp el);\

  Elm_Tp *Fpfx##_Push_Ptr(Arr_Tp *arr,Elm_Tp *el,int count);\
  Elm_Tp *Fpfx##_Push_Front(Arr_Tp *arr,Elm_Tp el);\
  Elm_Tp *Fpfx##_Push_Front_Ptr(Arr_Tp *arr,Elm_Tp *el,int count);\
  int Fpfx##_Remove(Arr_Tp *arr,int at,int count);\
  int Fpfx##_Empty(Arr_Tp *arr);\
  int Fpfx##_Pop(Arr_Tp *arr,Elm_Tp *top);\
  int Fpfx##_Pop_Front(Arr_Tp *arr,Elm_Tp *top);\
  int Fpfx##_Resize(Arr_Tp *arr,int count);\
  int Fpfx##_Reserve(Arr_Tp *arr,int count);\
  void Arr_Tp##_Destruct(Arr_Tp *arr);\
  Arr_Tp *Fpfx##_Init(int count);


#endif /*C_once_B280024F_42F5_4D98_9F57_2A5BEABC1C88*/







|







 







|







 







>
|




|







 







>
>
>
>
>







 







|
>
>
>
>
>







 







>










|
>


59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
..
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
..
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
...
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
...
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
...
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
    int  allocated;
  } YOYO_STRUCTED_ARRAY;

void *Structed_Array_Insert(YOYO_STRUCTED_ARRAY *arr,void *el,int width,int at, int count)
#ifdef _YOYO_SAR_BUITIN
  {
    STRICT_REQUIRE( arr != 0 );
    if ( at < 0 ) at = arr->count+at+1;
    STRICT_REQUIRE( at >= 0 );
    STRICT_REQUIRE( count >= 0 );
    STRICT_REQUIRE( el != 0 );
    STRICT_REQUIRE( width >= 0 );
    
    arr->count = Yo_Elm_Insert_Npl(&arr->at,at,arr->count,el,count,width,&arr->allocated);
    return arr->at+(at*width);
................................................................................
#endif
  ;
  
int Structed_Array_Remove(YOYO_STRUCTED_ARRAY *arr,int width,int at,int count)
#ifdef _YOYO_SAR_BUITIN
  {
    STRICT_REQUIRE( arr != 0 );
    if ( at < 0 ) at = arr->count+at+1;
    STRICT_REQUIRE( at >= 0 );
    STRICT_REQUIRE( count >= 0 );
    STRICT_REQUIRE( el != 0 );
    STRICT_REQUIRE( width >= 0 );
    STRICT_REQUIRE( count <= arr->count );
    
    if ( arr->count < count && at < arr->count - count )
................................................................................
  {
    STRICT_REQUIRE( arr != 0 );
    STRICT_REQUIRE( count >= 0 );
    STRICT_REQUIRE( width >= 0 );

    if ( count*width > arr->allocated )
      Yo_Elm_Resize_Npl(&arr->at,count,width,&arr->allocated);
    if ( arr->count < count ) memset(arr->at+(arr->count*width),0,(count-arr->count)*width);
    arr->count = count;
    return arr->allocated/width;
  }
#endif
  ;

int Structed_Array_Reserve(YOYO_STRUCTED_ARRAY *arr,int width,int count)
#ifdef _YOYO_SAR_BUITIN
  {
    STRICT_REQUIRE( arr != 0 );
    STRICT_REQUIRE( count >= 0 );
    STRICT_REQUIRE( width >= 0 );

................................................................................
    {\
      return Structed_Array_Insert((YOYO_STRUCTED_ARRAY*)arr,el,sizeof(Elm_Tp),at,count);\
    }\
  Elm_Tp *Fpfx##_Push(Arr_Tp *arr,Elm_Tp el)\
    {\
      return Structed_Array_Insert((YOYO_STRUCTED_ARRAY*)arr,&el,sizeof(Elm_Tp),-1,1);\
    }\
  Elm_Tp *Fpfx##_Push_Zero(Arr_Tp *arr)\
    {\
      byte_t el[sizeof(Elm_Tp)] = {0};\
      return Structed_Array_Insert((YOYO_STRUCTED_ARRAY*)arr,el,sizeof(Elm_Tp),-1,1);\
    }\
  Elm_Tp *Fpfx##_Push_Ptr(Arr_Tp *arr,Elm_Tp *el,int count)\
    {\
      return Structed_Array_Insert((YOYO_STRUCTED_ARRAY*)arr,el,sizeof(Elm_Tp),-1,count);\
    }\
  Elm_Tp *Fpfx##_Push_Front(Arr_Tp *arr,Elm_Tp el)\
    {\
      return Structed_Array_Insert((YOYO_STRUCTED_ARRAY*)arr,&el,sizeof(Elm_Tp),0,1);\
................................................................................
      return Structed_Array_Reserve((YOYO_STRUCTED_ARRAY*)arr,sizeof(Elm_Tp),count);\
    }\
  void Arr_Tp##_Destruct(Arr_Tp *arr)\
    {\
      free(arr->at);\
      __Destruct(arr);\
    }\
  Arr_Tp *Fpfx##_Init()\
    {\
      Arr_Tp *arr = __Object_Dtor(sizeof(Arr_Tp),Arr_Tp##_Destruct);\
      return arr;\
    }\
  Arr_Tp *Fpfx##_Alloc(int count)\
    {\
      Arr_Tp *arr = __Object_Dtor(sizeof(Arr_Tp),Arr_Tp##_Destruct);\
      if ( count ) Fpfx##_Resize(arr,count);\
      return arr;\
    }

#define STRUCTED_ARRAY_DEF(Fpfx,Arr_Tp,Elm_Tp) \
................................................................................
      Elm_Tp *at;\
      int count;\
      int _;\
    } Arr_Tp;\
  Elm_Tp *Fpfx##_Insert(Arr_Tp *arr,Elm_Tp el,int at);\
  Elm_Tp *Fpfx##_Insert_Ptr(Arr_Tp *arr,Elm_Tp *el,int at,int count);\
  Elm_Tp *Fpfx##_Push(Arr_Tp *arr,Elm_Tp el);\
  Elm_Tp *Fpfx##_Push_Zero(Arr_Tp *arr);\
  Elm_Tp *Fpfx##_Push_Ptr(Arr_Tp *arr,Elm_Tp *el,int count);\
  Elm_Tp *Fpfx##_Push_Front(Arr_Tp *arr,Elm_Tp el);\
  Elm_Tp *Fpfx##_Push_Front_Ptr(Arr_Tp *arr,Elm_Tp *el,int count);\
  int Fpfx##_Remove(Arr_Tp *arr,int at,int count);\
  int Fpfx##_Empty(Arr_Tp *arr);\
  int Fpfx##_Pop(Arr_Tp *arr,Elm_Tp *top);\
  int Fpfx##_Pop_Front(Arr_Tp *arr,Elm_Tp *top);\
  int Fpfx##_Resize(Arr_Tp *arr,int count);\
  int Fpfx##_Reserve(Arr_Tp *arr,int count);\
  void Arr_Tp##_Destruct(Arr_Tp *arr);\
  Arr_Tp *Fpfx##_Init();\
  Arr_Tp *Fpfx##_Alloc(int count);

#endif /*C_once_B280024F_42F5_4D98_9F57_2A5BEABC1C88*/

Changes to string.hc.

203
204
205
206
207
208
209


210
211
212
213
214
215
216
....
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
  }
#endif
  ;

char *Str_Split_Once_Into(char *S,char *delims,void *arr)
#ifdef _YOYO_STRING_BUILTIN
  {


    if ( delims )
      {
        char *d;
        int j = 0;
        for ( ; S[j]; ++j )
          for ( d = delims; *d; ++d )
            if ( S[j] == *d )
................................................................................
        for( E = S+L; S < E; ) 
          { 
            int wc_L = 0;
            byte_t b[8];
            wchar_t wc = Utf8_Get_Wide(&S); 
            wc = transform(wc);
            Utf8_Wide_Encode(b,wc,&wc_L);
            R_count += __Elm_Append_Npl(&R,R_count,b,1,wc_L,&R_capacity);
          }
      }
    
    __Elm_Append_Npl(&R,R_count,"\0",1,1,&R_capacity);
    return R;
  }
#endif







>
>







 







|







203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
....
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
  }
#endif
  ;

char *Str_Split_Once_Into(char *S,char *delims,void *arr)
#ifdef _YOYO_STRING_BUILTIN
  {
    if ( !S || !*S ) return 0;
    
    if ( delims )
      {
        char *d;
        int j = 0;
        for ( ; S[j]; ++j )
          for ( d = delims; *d; ++d )
            if ( S[j] == *d )
................................................................................
        for( E = S+L; S < E; ) 
          { 
            int wc_L = 0;
            byte_t b[8];
            wchar_t wc = Utf8_Get_Wide(&S); 
            wc = transform(wc);
            Utf8_Wide_Encode(b,wc,&wc_L);
            R_count += __Elm_Append_Npl(&R,R_count,b,wc_L,1,&R_capacity);
          }
      }
    
    __Elm_Append_Npl(&R,R_count,"\0",1,1,&R_capacity);
    return R;
  }
#endif

Changes to webget.hc.

232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
#ifdef _YOYO_WEBGET_BUILTIN
  {
    int completed = 0;
    memset(st,0,sizeof(*st));
    if ( stmap ) __Auto_Release
      if ( File_Exists(stmap) )
        {
          YOYO_WEBGET_STATE st = {0};
          void *f = Cfile_Open(stmap,"r"); 
          Oj_Read_Full(f,&st,sizeof(YOYO_WEBGET_STATE));
          if ( st.h.signature == WEBGET_SIGNATURE
            && st.h.ready == st.h.file_length ) 
            {
              YOYO_FILE_STATS fst = {0};
              if ( File_Get_Stats(output,&fst,1)->f.exists
                && fst.length == st.h.file_length ) 
                completed = 1;
            }
        }
    return completed;
  }
#endif
  ;







<

|
|
|



|







232
233
234
235
236
237
238

239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
#ifdef _YOYO_WEBGET_BUILTIN
  {
    int completed = 0;
    memset(st,0,sizeof(*st));
    if ( stmap ) __Auto_Release
      if ( File_Exists(stmap) )
        {

          void *f = Cfile_Open(stmap,"r"); 
          Oj_Read_Full(f,st,sizeof(YOYO_WEBGET_STATE));
          if ( st->h.signature == WEBGET_SIGNATURE
            && st->h.ready == st->h.file_length ) 
            {
              YOYO_FILE_STATS fst = {0};
              if ( File_Get_Stats(output,&fst,1)->f.exists
                && fst.length == st->h.file_length ) 
                completed = 1;
            }
        }
    return completed;
  }
#endif
  ;

Changes to xdata.hc.

1376
1377
1378
1379
1380
1381
1382














1383
1384
1385
1386
1387
    
    value = Xnode_Query_Value(n,query);
    if ( value )
      return Xvalue_Copy_Str(value,"");
      
    return 0;
  }














#endif
  ;

#endif /*C_once_E46D6A8A_889E_4AE9_9F89_5B0AB5263C95*/








>
>
>
>
>
>
>
>
>
>
>
>
>
>





1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
    
    value = Xnode_Query_Value(n,query);
    if ( value )
      return Xvalue_Copy_Str(value,"");
      
    return 0;
  }
#endif
  ;

int Xnode_Query_Int(YOYO_XNODE *n, char *query, int dflt)
#ifdef _YOYO_XDATA_BUILTIN
  {
    YOYO_XVALUE *value;
    
    value = Xnode_Query_Value(n,query);
    if ( value )
      return Xvalue_Get_Int(value,dflt);
      
    return dflt;
  }
#endif
  ;

#endif /*C_once_E46D6A8A_889E_4AE9_9F89_5B0AB5263C95*/

Changes to yoyo.hc.

1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
  {
    YOYO_C_SUPPORT_INFO *nfo = Yo_Tls_Get(Yo_Csup_Nfo_Tls);
    STRICT_REQUIRE( !nfo || nfo->jb_top < nfo->jb_count );

    printf(__yoTa("err: %d, msg: %s, filename: %s, lineno: %d\n",0),err,msg,filename,lineno);
  
  #if defined _DEBUG && defined __windoze
    if ( IsDebuggerPresent() ) DebugBreak();
  #endif  
  
    if ( err == YO_RERAISE_CURRENT_ERROR && (!nfo || !nfo->err.code) )
      Yo_Fatal(YOYO_ERROR_UNEXPECTED,__yoTa("no errors occured yet",0),filename,lineno);

    if ( nfo && nfo->jb_top >= 0 && !nfo->stats.unwinding )
      {







|







1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
  {
    YOYO_C_SUPPORT_INFO *nfo = Yo_Tls_Get(Yo_Csup_Nfo_Tls);
    STRICT_REQUIRE( !nfo || nfo->jb_top < nfo->jb_count );

    printf(__yoTa("err: %d, msg: %s, filename: %s, lineno: %d\n",0),err,msg,filename,lineno);
  
  #if defined _DEBUG && defined __windoze
    if ( IsDebuggerPresent() ) __debugbreak();
  #endif  
  
    if ( err == YO_RERAISE_CURRENT_ERROR && (!nfo || !nfo->err.code) )
      Yo_Fatal(YOYO_ERROR_UNEXPECTED,__yoTa("no errors occured yet",0),filename,lineno);

    if ( nfo && nfo->jb_top >= 0 && !nfo->stats.unwinding )
      {