@@ -574,51 +574,58 @@ const char* buildflagset_print(buildflagset_t* set)
574574 return set -> text_buffer ;
575575}
576576
577+ // just a thin wrapper around the private flagtab_t
578+ typedef struct userflags_t {
579+ flagtab_t inner ;
580+ } userflags_t ;
577581
578- static flagtab_t * _user_flags = NULL ;
579-
580- bool define_build_flag (const char * name )
582+ userflags_t * userflags_create ()
581583{
582- pony_assert (name != NULL );
584+ userflags_t * u = POOL_ALLOC (userflags_t );
585+ pony_assert (u != NULL );
586+ flagtab_init (& (u -> inner ), 4 );
587+ return u ;
588+ }
583589
584- if (_user_flags == NULL )
590+ void userflags_free (userflags_t * flags )
591+ {
592+ if (flags != NULL )
585593 {
586- // Initialise flags table.
587- _user_flags = POOL_ALLOC (flagtab_t );
588- flagtab_init (_user_flags , 8 );
594+ flagtab_destroy (& flags -> inner );
595+ POOL_FREE (flagtab_t , flags );
589596 }
597+ }
598+
599+ bool define_userflag (userflags_t * flags , const char * name )
600+ {
601+ pony_assert (flags != NULL );
602+ pony_assert (name != NULL );
590603
591604 flag_t f1 = {stringtab (name ), false};
592605 size_t index = HASHMAP_UNKNOWN ;
593- flag_t * f2 = flagtab_get (_user_flags , & f1 , & index );
606+ flag_t * f2 = flagtab_get (& ( flags -> inner ) , & f1 , & index );
594607
595608 if (f2 != NULL ) // Flag already in our table.
596609 return false;
597610
598611 // Add flag to our table.
599612 // didn't find it in the map but index is where we can put the
600613 // new one without another search
601- flagtab_putindex (_user_flags , flag_dup (& f1 ), index );
614+ flagtab_putindex (& ( flags -> inner ) , flag_dup (& f1 ), index );
602615 return true;
603616}
604617
605618
606- bool remove_build_flags ( const char * flags [])
619+ bool remove_userflags ( userflags_t * flags , const char * flags_to_remove [])
607620{
608621 pony_assert (flags != NULL );
609-
610- if (_user_flags == NULL )
611- {
612- // Initialise flags table.
613- _user_flags = POOL_ALLOC (flagtab_t );
614- flagtab_init (_user_flags , 8 );
615- }
622+ pony_assert (flags_to_remove != NULL );
616623
617624 size_t removed = 0 ;
618- for (const char * * next = flags ; * next != NULL ; next += 1 )
625+ for (const char * * next = flags_to_remove ; * next != NULL ; next += 1 )
619626 {
620627 flag_t f1 = {stringtab (* next ), false};
621- flag_t * found = flagtab_remove (_user_flags , & f1 );
628+ flag_t * found = flagtab_remove (& ( flags -> inner ) , & f1 );
622629 if (found != NULL )
623630 {
624631 flag_free (found );
@@ -630,27 +637,20 @@ bool remove_build_flags(const char* flags[])
630637}
631638
632639
633- bool is_build_flag_defined ( const char * name )
640+ bool is_userflag_defined ( userflags_t * flags , const char * name )
634641{
642+ pony_assert (flags != NULL );
635643 pony_assert (name != NULL );
636644
637- if (_user_flags == NULL )
638- // Table is not initialised, so no flags are defined.
639- return false;
640-
641645 flag_t f1 = { stringtab (name ), false };
642646 size_t index = HASHMAP_UNKNOWN ;
643- flag_t * f2 = flagtab_get (_user_flags , & f1 , & index );
647+ flag_t * f2 = flagtab_get (& ( flags -> inner ) , & f1 , & index );
644648
645649 return f2 != NULL ;
646650}
647651
648- void clear_build_flags ( )
652+ void clear_userflags ( userflags_t * flags )
649653{
650- if (_user_flags != NULL )
651- {
652- flagtab_destroy (_user_flags );
653- POOL_FREE (flagtab_t , _user_flags );
654- _user_flags = NULL ;
655- }
654+ pony_assert (flags != NULL );
655+ flagtab_destroy (& (flags -> inner ));
656656}
0 commit comments