@@ -18,6 +18,7 @@ Author: Daniel Kroening, dkr@amazon.com
1818#include < langapi/language.h>
1919#include < langapi/language_util.h>
2020#include < langapi/mode.h>
21+ #include < smvlang/smv_ebmc_language.h>
2122#include < trans-word-level/show_module_hierarchy.h>
2223#include < trans-word-level/show_modules.h>
2324
@@ -335,39 +336,76 @@ int show_symbol_table(
335336 cmdline, message_handler, dummy_transition_system);
336337}
337338
338- std::optional<transition_systemt> ebmc_languagest::transition_system ( )
339+ static std::set<std::string> file_extensions ( const cmdlinet::argst &args )
339340{
340- if (cmdline.isset (" preprocess" ))
341- {
342- preprocess (cmdline, message_handler);
343- return {};
344- }
341+ std::set<std::string> result;
345342
346- if (cmdline. isset ( " show-parse " ) )
343+ for ( auto &arg : args )
347344 {
348- show_parse (cmdline, message_handler);
349- return {};
345+ std::size_t ext_pos = arg.rfind (' .' );
346+
347+ if (ext_pos != std::string::npos)
348+ {
349+ auto ext = std::string (arg, ext_pos + 1 , std::string::npos);
350+ result.insert (ext);
351+ }
350352 }
351353
352- if (
353- cmdline.isset (" show-modules" ) || cmdline.isset (" modules-xml" ) ||
354- cmdline.isset (" json-modules" ))
354+ return result;
355+ }
356+
357+ std::optional<transition_systemt> ebmc_languagest::transition_system ()
358+ {
359+ auto extensions = file_extensions (cmdline.args );
360+ auto ext_used = [&extensions](const char *ext)
361+ { return extensions.find (ext) != extensions.end (); };
362+
363+ bool have_smv = ext_used (" smv" );
364+ bool have_verilog = ext_used (" v" ) || ext_used (" sv" );
365+
366+ if (have_smv && have_verilog)
355367 {
356- show_modules (cmdline, message_handler);
357- return {};
368+ throw ebmc_errort{} << " no support for mixed-language models" ;
358369 }
359370
360- if (cmdline. isset ( " show-module-hierarchy " ) )
371+ if (have_smv )
361372 {
362- show_module_hierarchy (cmdline, message_handler);
363- return {};
373+ return smv_ebmc_languaget{cmdline, message_handler}.transition_system ();
364374 }
365-
366- if (cmdline.isset (" show-symbol-table" ))
375+ else
367376 {
368- show_symbol_table (cmdline, message_handler);
369- return {};
377+ if (cmdline.isset (" preprocess" ))
378+ {
379+ preprocess (cmdline, message_handler);
380+ return {};
381+ }
382+
383+ if (cmdline.isset (" show-parse" ))
384+ {
385+ show_parse (cmdline, message_handler);
386+ return {};
387+ }
388+
389+ if (
390+ cmdline.isset (" show-modules" ) || cmdline.isset (" modules-xml" ) ||
391+ cmdline.isset (" json-modules" ))
392+ {
393+ show_modules (cmdline, message_handler);
394+ return {};
395+ }
396+
397+ if (cmdline.isset (" show-module-hierarchy" ))
398+ {
399+ show_module_hierarchy (cmdline, message_handler);
400+ return {};
401+ }
402+
403+ if (cmdline.isset (" show-symbol-table" ))
404+ {
405+ show_symbol_table (cmdline, message_handler);
406+ return {};
407+ }
408+
409+ return get_transition_system (cmdline, message_handler);
370410 }
371-
372- return get_transition_system (cmdline, message_handler);
373411}
0 commit comments