7#include "i_parse_blk.h"
10static inline int bitIsSet64(
const uint8_t* mem, uint32_t n )
12 return (n > 63) ? 0 : mem[n>>3] & 1<<(n&7);
21int ur_parseBlockI( UBlockParser* par,
const uint8_t* pc,
const UCell* it )
24 const uint8_t* next = 0;
25 const UCell* start = it;
43 par->report( par, *pc++, start, it );
47 par->report( par, *pc, start, it );
62 n = par->atoms[ *pc++ ];
64 if( ur_isWordType(t) && ur_atom(it) == n )
72 if( ! ur_parseBlockI( par, par->rules + *pc++, it ) )
84 bset = par->rules + *pc++;
85 if( ! bitIsSet64(bset,
ur_type(it)) )
91 if( ur_parseBlockI( par, par->rules + *pc++, it ) )
101 bset = par->rules + *pc++;
102 if( bitIsSet64(bset,
ur_type(it)) )
107 bset = par->rules + *pc++;
108 while( it != par->end && ur_parseBlockI( par, bset, it ) )
114 while( it != par->end &&
ur_type(it) == n )
119 bset = par->rules + *pc++;
120 while( it != par->end && bitIsSet64(bset,
ur_type(it)) )
126 bset = par->rules + *pc++;
127 while( it != par->end && ur_parseBlockI( par, bset, it ) )
136 while( it != par->end &&
ur_type(it) == n )
144 bset = par->rules + *pc++;
145 while( it != par->end && bitIsSet64(bset,
ur_type(it)) )
153 while( it != par->end )
162 bset = par->rules + *pc++;
163 while( it != par->end )
165 if( bitIsSet64(bset,
ur_type(it)) )
172 n = par->atoms[ *pc++ ];
173 while( it != par->end )
176 if( ur_isWordType(t) && ur_atom(it) == n )
184 while( it != par->end )
196 bset = par->rules + *pc++;
197 while( it != par->end )
199 if( bitIsSet64(bset,
ur_type(it)) )
#define ur_type(c)
Return UrlanDataType of cell.
Definition urlan.h:695
A cell holds a single value of a simple type or a reference (often to a UBuffer) for a complex type.
Definition urlan.h:248