3 extern void abort (void);
5 typedef int int32_t __attribute__ ((mode (SI
)));
6 typedef int int64_t __attribute__ ((mode (DI
)));
7 typedef __SIZE_TYPE__
size_t;
16 void fail (int32_t) __attribute__ ((noinline
));
24 struct decode_rune_ret
30 struct decode_rune_ret
decode_rune (struct slice
) __attribute__ ((noinline
));
31 struct decode_rune_ret
32 decode_rune (struct slice s
)
34 struct decode_rune_ret dr
;
40 _Bool
is_space (int32_t) __attribute__ ((noinline
));
53 struct ret
scanwords (struct slice
, _Bool
) __attribute__ ((noinline
));
56 scanwords (struct slice data
, _Bool ateof
)
63 for (width
= 0; start
< data
.len
; start
+= width
)
67 if (start
> data
.cap
|| start
< 0)
69 s
.data
= data
.data
+ (size_t) start
;
70 s
.len
= data
.len
- start
;
71 s
.cap
= data
.cap
- start
;
72 struct decode_rune_ret dr
= decode_rune (s
);
105 for (width
= 0, i
= start
; i
< data
.len
; i
+= width
)
109 if (i
> data
.cap
|| i
< 0)
111 s
.data
= data
.data
+ i
;
112 s
.len
= data
.len
- i
;
113 s
.cap
= data
.cap
- i
;
114 struct decode_rune_ret dr
= decode_rune (s
);
119 if (i
< start
|| i
> data
.cap
|| i
< 0)
121 if (start
> data
.cap
|| start
< 0)
125 token
.data
= data
.data
+ (size_t) start
;
126 token
.len
= i
- start
;
127 token
.cap
= data
.cap
- start
;
148 unsigned char buf
[1000];
150 __builtin_memset (buf
, 0, sizeof (buf
));
156 s
.cap
= sizeof (buf
);
158 r
= scanwords (s
, 1);
159 if (r
.advance
!= 3 || r
.token
.data
[0] != 'a' || r
.token
.len
!= 1)