| 751 | } |
| 752 | |
| 753 | bool AsmAnalyzer::validateInstructions(std::string_view _instructionIdentifier, langutil::SourceLocation const& _location) |
| 754 | { |
| 755 | // NOTE: This function uses the default EVM version instead of the currently selected one. |
| 756 | auto const& defaultEVMDialect = EVMDialect::strictAssemblyForEVMObjects(EVMVersion{}, std::nullopt); |
| 757 | auto const builtinHandle = defaultEVMDialect.findBuiltin(_instructionIdentifier); |
| 758 | if (builtinHandle && defaultEVMDialect.builtin(*builtinHandle).instruction.has_value()) |
| 759 | return validateInstructions(*defaultEVMDialect.builtin(*builtinHandle).instruction, _location); |
| 760 | |
| 761 | solAssert(!m_eofVersion.has_value() || *m_eofVersion == 1); |
| 762 | auto const& eofDialect = EVMDialect::strictAssemblyForEVMObjects(EVMVersion::firstWithEOF(), 1); |
| 763 | auto const eofBuiltinHandle = eofDialect.findBuiltin(_instructionIdentifier); |
| 764 | if (eofBuiltinHandle) |
| 765 | { |
| 766 | auto const builtin = eofDialect.builtin(*eofBuiltinHandle); |
| 767 | if (builtin.instruction.has_value()) |
| 768 | return validateInstructions(*builtin.instruction, _location); |
| 769 | // If builtin is available in EOF but not available in legacy (and we build to legacy) generate custom error. |
| 770 | else if (!m_eofVersion.has_value() && !builtinHandle) |
| 771 | { |
| 772 | m_errorReporter.declarationError( |
| 773 | 7223_error, |
| 774 | _location, |
| 775 | fmt::format( |
| 776 | "Builtin function \"{function}\" is only available in EOF.", |
| 777 | fmt::arg("function", _instructionIdentifier) |
| 778 | ) |
| 779 | ); |
| 780 | return true; |
| 781 | } |
| 782 | } |
| 783 | |
| 784 | return false; |
| 785 | } |
| 786 | |
| 787 | bool AsmAnalyzer::validateInstructions(evmasm::Instruction _instr, SourceLocation const& _location) |
| 788 | { |
nothing calls this directly
no test coverage detected