diff options
author | Eric Wong <e@80x24.org> | 2019-02-02 07:35:06 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2019-02-05 10:58:35 +0000 |
commit | 8eb2c4f7c0aed11810280c6dfa63f75fd961e3cd (patch) | |
tree | 8544eeb37994389de4bde873bb9d023d2cb465ba /lib/PublicInbox/HlMod.pm | |
parent | 58db2bbcbc9836fe36c91eff761e31edfd53f866 (diff) | |
download | public-inbox-8eb2c4f7c0aed11810280c6dfa63f75fd961e3cd.tar.gz |
It turns out there's no point in having multiple instances of this or having to worry about destruction or destruction ordering. This will make it easier to reuse the one instance we have across different modules.
Diffstat (limited to 'lib/PublicInbox/HlMod.pm')
-rw-r--r-- | lib/PublicInbox/HlMod.pm | 33 |
1 files changed, 13 insertions, 20 deletions
diff --git a/lib/PublicInbox/HlMod.pm b/lib/PublicInbox/HlMod.pm index 284e4b18..13f27d19 100644 --- a/lib/PublicInbox/HlMod.pm +++ b/lib/PublicInbox/HlMod.pm @@ -16,6 +16,7 @@ package PublicInbox::HlMod; use strict; use warnings; use highlight; # SWIG-generated stuff +my $hl; sub _parse_filetypes ($) { my $ft_conf = $_[0]->searchFile('filetypes.conf') or @@ -52,16 +53,20 @@ sub _parse_filetypes ($) { (\%ext2lang, \@shebang); } +# We only need one instance, so we don't need to do +# highlight::CodeGenerator::deleteInstance sub new { my ($class) = @_; - my $dir = highlight::DataDir->new; - $dir->initSearchDirectories(''); - my ($ext2lang, $shebang) = _parse_filetypes($dir); - bless { - -dir => $dir, - -ext2lang => $ext2lang, - -shebang => $shebang, - }, $class; + $hl ||= do { + my $dir = highlight::DataDir->new; + $dir->initSearchDirectories(''); + my ($ext2lang, $shebang) = _parse_filetypes($dir); + bless { + -dir => $dir, + -ext2lang => $ext2lang, + -shebang => $shebang, + }, $class; + }; } sub _shebang2lang ($$) { @@ -120,16 +125,4 @@ sub do_hl_lang { \$out; } -# SWIG instances aren't reference-counted, but $self is; -# so we need to delete all the CodeGenerator instances manually -# at our own destruction -sub DESTROY { - my ($self) = @_; - foreach my $gen (values %$self) { - if (ref($gen) eq 'highlight::CodeGenerator') { - highlight::CodeGenerator::deleteInstance($gen); - } - } -} - 1; |