From 14ebbe25335cb8e18d9a68d635597b24a66d5aec Mon Sep 17 00:00:00 2001 From: Pragmatic Software Date: Sun, 5 Apr 2015 02:29:12 -0700 Subject: [PATCH] Add support for using an optional `name` field to override language Since Perl modules cannot use certain characters in the module name, such as the '+' character, modules cannot have names like "c++". Using a `name` field allows us to use, e.g., "cpp" as the module name and "c++" as the language name to invoke that module. --- modules/compiler_vm/compiler_vm_client.pl | 30 ++++++++++++++++++----- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/modules/compiler_vm/compiler_vm_client.pl b/modules/compiler_vm/compiler_vm_client.pl index 74171023..9058c81f 100755 --- a/modules/compiler_vm/compiler_vm_client.pl +++ b/modules/compiler_vm/compiler_vm_client.pl @@ -12,14 +12,32 @@ eval { use lib 'languages'; require "$language.pm"; } or do { - print "Language '$language' is not supported.\n"; + my @modules = glob 'languages/*.pm'; + my $found = 0; + my ($languages, $comma) = ('', ''); - my @languages = glob 'languages/*.pm'; - print "Supported languages are: "; - print join(", ", grep { $_ = basename $_; $_ =~ s/.pm$//; $_ !~ m/^_/ } sort @languages); - print "\n"; + foreach my $module (sort @modules) { + $module = basename $module; + $module =~ s/.pm$//; + next if $module =~ m/^_/; + require "$module.pm"; + my $mod = $module->new; - exit; + if (exists $mod->{name} and $mod->{name} eq $language) { + $language = $module; + $found = 1; + last; + } + + $module = $mod->{name} if exists $mod->{name}; + $languages .= "$comma$module"; + $comma = ', '; + } + + if (not $found) { + print "Language '$language' is not supported.\nSupported languages are: $languages\n"; + exit; + } }; my $nick = shift @ARGV // (print "Missing nick argument.\n" and die);