|
18 | 18 | #include <langapi/language.h> |
19 | 19 | #include <langapi/language_util.h> |
20 | 20 | #include <langapi/mode.h> |
| 21 | +#include <smvlang/smv_ebmc_language.h> |
21 | 22 | #include <trans-word-level/show_module_hierarchy.h> |
22 | 23 | #include <trans-word-level/show_modules.h> |
23 | 24 |
|
@@ -335,39 +336,76 @@ int show_symbol_table( |
335 | 336 | cmdline, message_handler, dummy_transition_system); |
336 | 337 | } |
337 | 338 |
|
338 | | -std::optional<transition_systemt> ebmc_languagest::transition_system() |
| 339 | +static std::set<std::string> file_extensions(const cmdlinet::argst &args) |
339 | 340 | { |
340 | | - if(cmdline.isset("preprocess")) |
341 | | - { |
342 | | - preprocess(cmdline, message_handler); |
343 | | - return {}; |
344 | | - } |
| 341 | + std::set<std::string> result; |
345 | 342 |
|
346 | | - if(cmdline.isset("show-parse")) |
| 343 | + for(auto &arg : args) |
347 | 344 | { |
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 | + } |
350 | 352 | } |
351 | 353 |
|
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) |
355 | 367 | { |
356 | | - show_modules(cmdline, message_handler); |
357 | | - return {}; |
| 368 | + throw ebmc_errort{} << "no support for mixed-language models"; |
358 | 369 | } |
359 | 370 |
|
360 | | - if(cmdline.isset("show-module-hierarchy")) |
| 371 | + if(have_smv) |
361 | 372 | { |
362 | | - show_module_hierarchy(cmdline, message_handler); |
363 | | - return {}; |
| 373 | + return smv_ebmc_languaget{cmdline, message_handler}.transition_system(); |
364 | 374 | } |
365 | | - |
366 | | - if(cmdline.isset("show-symbol-table")) |
| 375 | + else |
367 | 376 | { |
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); |
370 | 410 | } |
371 | | - |
372 | | - return get_transition_system(cmdline, message_handler); |
373 | 411 | } |
0 commit comments