@@ -822,15 +822,11 @@ llama_grammar_stacks & llama_grammar_get_stacks(struct llama_grammar * grammar)
822822    return  grammar->stacks ;
823823}
824824
825- void  llama_grammar_accept (
826-         const  llama_grammar_rules  & rules,
827-         const  llama_grammar_stacks & stacks,
828-         const  uint32_t                chr,
829-               llama_grammar_stacks & stacks_new) {
830-     stacks_new.clear ();
831-     stacks_new.reserve (stacks.size ());
825+ void  llama_grammar_accept (struct  llama_grammar  * grammar, uint32_t  chr) {
826+     llama_grammar_stacks stacks_new;
827+     stacks_new.reserve (grammar->stacks .size ());
832828
833-     for  (const  auto  & stack : stacks) {
829+     for  (const  auto  & stack : grammar-> stacks ) {
834830        if  (stack.empty ()) {
835831            continue ;
836832        }
@@ -844,9 +840,11 @@ void llama_grammar_accept(
844840            if  (!llama_grammar_is_end_of_sequence (pos)) {
845841                new_stack.push_back (pos);
846842            }
847-             llama_grammar_advance_stack (rules, new_stack, stacks_new);
843+             llama_grammar_advance_stack (grammar-> rules , new_stack, stacks_new);
848844        }
849845    }
846+ 
847+     grammar->stacks  = std::move (stacks_new);
850848}
851849
852850llama_grammar_candidates llama_grammar_reject_candidates_for_stack (
@@ -1051,15 +1049,20 @@ void llama_grammar_free_impl(struct llama_grammar * grammar) {
10511049}
10521050
10531051struct  llama_grammar  * llama_grammar_clone_impl (const  struct  llama_grammar  & grammar) {
1054-     llama_grammar * result = new  llama_grammar { grammar.vocab , grammar.rules , grammar.stacks , grammar.partial_utf8 , };
1052+     llama_grammar * result = new  llama_grammar {
1053+         grammar.vocab ,
1054+         grammar.rules ,
1055+         grammar.stacks ,
1056+         grammar.partial_utf8 ,
1057+     };
10551058
10561059    //  redirect elements in stacks to point to new rules
10571060    for  (size_t  is = 0 ; is < result->stacks .size (); is++) {
10581061        for  (size_t  ie = 0 ; ie < result->stacks [is].size (); ie++) {
10591062            for  (size_t  ir0 = 0 ; ir0 < grammar.rules .size (); ir0++) {
10601063                for  (size_t  ir1 = 0 ; ir1 < grammar.rules [ir0].size (); ir1++) {
10611064                    if  (grammar.stacks [is][ie] == &grammar.rules [ir0][ir1]) {
1062-                           result->stacks [is][ie]   =  &result->rules [ir0][ir1];
1065+                         result->stacks [is][ie] =  &result->rules [ir0][ir1];
10631066                    }
10641067                }
10651068            }
@@ -1126,11 +1129,8 @@ void llama_grammar_accept_impl(struct llama_grammar & grammar, llama_token token
11261129    const  auto    decoded     = decode_utf8 (piece, grammar.partial_utf8 );
11271130    const  auto  & code_points = decoded.first ;
11281131
1129-     llama_grammar_stacks stacks_new;
1130- 
11311132    for  (auto  it = code_points.begin (), end = code_points.end () - 1 ; it != end; ++it) {
1132-         llama_grammar_accept (grammar.rules , grammar.stacks , *it, stacks_new);
1133-         grammar.stacks  = std::move (stacks_new);
1133+         llama_grammar_accept (&grammar, *it);
11341134    }
11351135
11361136    grammar.partial_utf8  = decoded.second ;
0 commit comments