mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Introduce ExperimentalFeatures header
This commit is contained in:
		
							parent
							
								
									690ed37fd4
								
							
						
					
					
						commit
						57c2451130
					
				| @ -18,6 +18,7 @@ | ||||
| #include <libsolidity/analysis/SyntaxChecker.h> | ||||
| #include <memory> | ||||
| #include <libsolidity/ast/AST.h> | ||||
| #include <libsolidity/ast/ExperimentalFeatures.h> | ||||
| #include <libsolidity/analysis/SemVerHandler.h> | ||||
| #include <libsolidity/interface/ErrorReporter.h> | ||||
| #include <libsolidity/interface/Version.h> | ||||
| @ -69,9 +70,6 @@ bool SyntaxChecker::visit(PragmaDirective const& _pragma) | ||||
| 		m_errorReporter.syntaxError(_pragma.location(), "Invalid pragma \"" + _pragma.literals()[0] + "\""); | ||||
| 	else if (_pragma.literals()[0] == "experimental") | ||||
| 	{ | ||||
| 		/// TODO: fill this out
 | ||||
| 		static const set<string> validFeatures = set<string>{}; | ||||
| 
 | ||||
| 		solAssert(m_sourceUnit, ""); | ||||
| 		vector<string> literals(_pragma.literals().begin() + 1, _pragma.literals().end()); | ||||
| 		if (literals.size() == 0) | ||||
| @ -89,13 +87,13 @@ bool SyntaxChecker::visit(PragmaDirective const& _pragma) | ||||
| 			string const literal = literals[0]; | ||||
| 			if (literal.empty()) | ||||
| 				m_errorReporter.syntaxError(_pragma.location(), "Empty experimental feature name is invalid."); | ||||
| 			else if (!validFeatures.count(literal)) | ||||
| 			else if (!ExperimentalFeatureNames.count(literal)) | ||||
| 				m_errorReporter.syntaxError(_pragma.location(), "Unsupported experimental feature name."); | ||||
| 			else if (m_sourceUnit->annotation().experimentalFeatures.count(literal)) | ||||
| 			else if (m_sourceUnit->annotation().experimentalFeatures.count(ExperimentalFeatureNames.at(literal))) | ||||
| 				m_errorReporter.syntaxError(_pragma.location(), "Duplicate experimental feature name."); | ||||
| 			else | ||||
| 			{ | ||||
| 				m_sourceUnit->annotation().experimentalFeatures.insert(literal); | ||||
| 				m_sourceUnit->annotation().experimentalFeatures.insert(ExperimentalFeatureNames.at(literal)); | ||||
| 				m_errorReporter.warning(_pragma.location(), "Experimental features are turned on. Do not use experimental features on live deployments."); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| @ -23,6 +23,7 @@ | ||||
| #pragma once | ||||
| 
 | ||||
| #include <libsolidity/ast/ASTForward.h> | ||||
| #include <libsolidity/ast/ExperimentalFeatures.h> | ||||
| 
 | ||||
| #include <map> | ||||
| #include <memory> | ||||
| @ -61,8 +62,8 @@ struct SourceUnitAnnotation: ASTAnnotation | ||||
| 	std::string path; | ||||
| 	/// The exported symbols (all global symbols).
 | ||||
| 	std::map<ASTString, std::vector<Declaration const*>> exportedSymbols; | ||||
| 	/// Experimental feature pragmas.
 | ||||
| 	std::set<ASTString> experimentalFeatures; | ||||
| 	/// Experimental features.
 | ||||
| 	std::set<ExperimentalFeature> experimentalFeatures; | ||||
| }; | ||||
| 
 | ||||
| struct ImportAnnotation: ASTAnnotation | ||||
|  | ||||
							
								
								
									
										35
									
								
								libsolidity/ast/ExperimentalFeatures.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								libsolidity/ast/ExperimentalFeatures.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | ||||
| /*
 | ||||
| 	This file is part of solidity. | ||||
| 
 | ||||
| 	solidity is free software: you can redistribute it and/or modify | ||||
| 	it under the terms of the GNU General Public License as published by | ||||
| 	the Free Software Foundation, either version 3 of the License, or | ||||
| 	(at your option) any later version. | ||||
| 
 | ||||
| 	solidity is distributed in the hope that it will be useful, | ||||
| 	but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| 	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| 	GNU General Public License for more details. | ||||
| 
 | ||||
| 	You should have received a copy of the GNU General Public License | ||||
| 	along with solidity.  If not, see <http://www.gnu.org/licenses/>.
 | ||||
| */ | ||||
| /**
 | ||||
|  * List of experimental features. | ||||
|  */ | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <map> | ||||
| 
 | ||||
| namespace dev | ||||
| { | ||||
| namespace solidity | ||||
| { | ||||
| 
 | ||||
| enum class ExperimentalFeature {}; | ||||
| 
 | ||||
| static const std::map<std::string, ExperimentalFeature> ExperimentalFeatureNames = {}; | ||||
| 
 | ||||
| } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user