Lines Matching defs:symptr

57 #define TEMPSYM_INIT(symptr, p, e, f) \
59 (symptr)->patptr = (p); \
60 (symptr)->patend = (e); \
61 (symptr)->grpbeg = NULL; \
62 (symptr)->grpend = NULL; \
63 (symptr)->grpend = NULL; \
64 (symptr)->code = 0; \
65 (symptr)->length = 0; \
66 (symptr)->howlen = e_no_len; \
67 (symptr)->level = 0; \
68 (symptr)->flags = (f); \
69 (symptr)->strbeg = 0; \
70 (symptr)->previous = NULL; \
423 static const char *_action( const tempsym_t* symptr )
425 return (const char *)(( symptr->flags & FLAG_PACK ) ? "pack" : "unpack");
430 S_measure_struct(pTHX_ tempsym_t* symptr)
436 while (next_symbol(symptr)) {
439 switch (symptr->howlen) {
442 _action( symptr ) );
446 len = symptr->length;
450 size = packprops[TYPE_NO_ENDIANNESS(symptr->code)] & PACK_SIZE_MASK;
454 switch(TYPE_NO_ENDIANNESS(symptr->code)) {
458 (int)TYPE_NO_MODIFIERS(symptr->code),
459 _action( symptr ) );
469 (int) TYPE_NO_MODIFIERS(symptr->code),
470 _action( symptr ) );
476 tempsym_t savsym = *symptr;
477 symptr->patptr = savsym.grpbeg;
478 symptr->patend = savsym.grpend;
483 size = measure_struct(symptr);
484 *symptr = savsym;
497 Perl_croak(aTHX_ "'X' outside of string in %s", _action( symptr ) );
590 /* The marvellous template parsing routine: Using state stored in *symptr,
594 S_next_symbol(pTHX_ tempsym_t* symptr )
596 const char* patptr = symptr->patptr;
597 const char* const patend = symptr->patend;
601 symptr->flags &= ~FLAG_SLASH;
620 if (((symptr->flags & FLAG_COMMA) == 0) && ckWARN(WARN_UNPACK)){
621 symptr->flags |= FLAG_COMMA;
624 "Invalid type ',' in %s", _action( symptr ) );
633 _action( symptr ) );
634 symptr->grpbeg = patptr;
635 patptr = 1 + ( symptr->grpend = group_end(patptr, patend, ')') );
636 if( symptr->level >= MAX_SUB_TEMPLATE_LEVEL )
638 _action( symptr ) );
642 if (TYPE_ENDIANNESS(symptr->flags)) {
644 inherited_modifiers |= TYPE_ENDIANNESS(symptr->flags);
675 allowed, _action( symptr ) );
679 (int) TYPE_NO_MODIFIERS(code), _action( symptr ) );
683 *patptr, _action( symptr ) );
689 _action( symptr ) );
702 patptr = get_num( patptr, &symptr->length );
703 symptr->howlen = e_number;
707 symptr->howlen = e_star;
711 symptr->howlen = e_number;
715 lenptr = get_num( lenptr, &symptr->length );
718 _action( symptr ) );
720 tempsym_t savsym = *symptr;
721 symptr->patend = patptr-1;
722 symptr->patptr = lenptr;
723 savsym.length = measure_struct(symptr);
724 *symptr = savsym;
727 symptr->howlen = e_no_len;
728 symptr->length = 1;
743 symptr->flags |= FLAG_SLASH;
748 _action( symptr ) );
755 symptr->howlen = e_no_len;
756 symptr->length = 1;
759 symptr->code = code;
760 symptr->patptr = patptr;
764 symptr->patptr = patptr;
860 S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const char *strend, const char **new_s )
872 const bool unpack_only_one = (symptr->flags & FLAG_UNPACK_ONLY_ONE) != 0;
873 bool utf8 = (symptr->flags & FLAG_PARSE_UTF8) ? 1 : 0;
877 symptr->strbeg = s - strbeg;
879 while (next_symbol(symptr)) {
882 I32 datumtype = symptr->code;
892 switch (howlen = symptr->howlen) {
898 len = symptr->length;
938 tempsym_t savsym = *symptr;
939 const U32 group_modifiers = TYPE_MODIFIERS(datumtype & ~symptr->flags);
940 symptr->flags |= group_modifiers;
941 symptr->patend = savsym.grpend;
943 symptr->previous = &savsym;
944 symptr->level++;
948 symptr->patptr = savsym.grpbeg;
949 if (utf8) symptr->flags |= FLAG_PARSE_UTF8;
950 else symptr->flags &= ~FLAG_PARSE_UTF8;
951 unpack_rec(symptr, s, strbeg, strend, &s);
956 savsym.flags = symptr->flags & ~group_modifiers;
957 *symptr = savsym;
968 tempsym_t *group = symptr;
981 s = strbeg + symptr->strbeg;
1098 if (utf8 && (symptr->flags & FLAG_WAS_UTF8)) {
1122 if (!(symptr->flags & FLAG_WAS_UTF8))
1239 utf8 = (symptr->flags & FLAG_DO_UTF8) ? 1 : 0;
1298 if (symptr->flags & FLAG_DO_UTF8) utf8 = 0;
1635 if (symptr->howlen == e_star)
1822 if (symptr->flags & FLAG_SLASH){
1825 if( next_symbol(symptr) ){
1826 if( symptr->howlen == e_number )
1840 datumtype = symptr->code;
2107 S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist )
2111 bool found = next_symbol(symptr);
2112 bool utf8 = (symptr->flags & FLAG_PARSE_UTF8) ? 1 : 0;
2118 if (symptr->level == 0 && found && symptr->code == 'U') {
2119 marked_upgrade(aTHX_ cat, symptr);
2120 symptr->flags |= FLAG_DO_UTF8;
2123 symptr->strbeg = SvCUR(cat);
2130 I32 datumtype = symptr->code;
2131 howlen_t howlen = symptr->howlen;
2146 len = symptr->length;
2161 lookahead = *symptr;
2163 if (symptr->flags & FLAG_SLASH) {
2203 tempsym_t *group = symptr;
2213 from = start + symptr->strbeg;
2248 tempsym_t savsym = *symptr;
2249 U32 group_modifiers = TYPE_MODIFIERS(datumtype & ~symptr->flags);
2250 symptr->flags |= group_modifiers;
2251 symptr->patend = savsym.grpend;
2252 symptr->level++;
2254 symptr->previous = &lookahead;
2257 if (utf8) symptr->flags |= FLAG_PARSE_UTF8;
2258 else symptr->flags &= ~FLAG_PARSE_UTF8;
2260 symptr->patptr = savsym.grpbeg;
2261 beglist = pack_rec(cat, symptr, beglist, endlist);
2270 lookahead.flags = symptr->flags & ~group_modifiers;
2316 if (cur < start+symptr->strbeg) {
2320 for (group = symptr;
2349 marked_upgrade(aTHX_ cat, symptr);
2351 lookahead.strbeg = symptr->strbeg;
2587 utf8 = (symptr->flags & FLAG_DO_UTF8) ? 1 : 0;
2626 marked_upgrade(aTHX_ cat, symptr);
2628 lookahead.strbeg = symptr->strbeg;
2654 if (!(symptr->flags & FLAG_DO_UTF8)) {
2655 marked_upgrade(aTHX_ cat, symptr);
2657 lookahead.strbeg = symptr->strbeg;
3139 *symptr = lookahead;