mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Document more of the codegen features
This commit is contained in:
		
							parent
							
								
									b364bd048f
								
							
						
					
					
						commit
						3c24dcfe45
					
				| @ -40,6 +40,8 @@ public: | ||||
| 		m_context(&m_runtimeContext) | ||||
| 	{ } | ||||
| 
 | ||||
| 	/// Compiles a contract.
 | ||||
| 	/// @arg _metadata contains the to be injected metadata CBOR
 | ||||
| 	void compileContract( | ||||
| 		ContractDefinition const& _contract, | ||||
| 		std::map<ContractDefinition const*, eth::Assembly const*> const& _contracts, | ||||
| @ -51,8 +53,11 @@ public: | ||||
| 		ContractDefinition const& _contract, | ||||
| 		std::map<ContractDefinition const*, eth::Assembly const*> const& _contracts | ||||
| 	); | ||||
| 	/// @returns Entire assembly.
 | ||||
| 	eth::Assembly const& assembly() const { return m_context.assembly(); } | ||||
| 	/// @returns The entire assembled object (with constructor).
 | ||||
| 	eth::LinkerObject assembledObject() const { return m_context.assembledObject(); } | ||||
| 	/// @returns Only the runtime object (without constructor).
 | ||||
| 	eth::LinkerObject runtimeObject() const { return m_context.assembledRuntimeObject(m_runtimeSub); } | ||||
| 	/// @arg _sourceCodes is the map of input files to source code strings
 | ||||
| 	/// @arg _inJsonFromat shows whether the out should be in Json format
 | ||||
|  | ||||
| @ -56,7 +56,9 @@ public: | ||||
| 			m_runtimeSub = size_t(m_asm->newSub(m_runtimeContext->m_asm).data()); | ||||
| 	} | ||||
| 
 | ||||
| 	/// Update currently enabled set of experimental features.
 | ||||
| 	void setExperimentalFeatures(std::set<ExperimentalFeature> const& _features) { m_experimentalFeatures = _features; } | ||||
| 	/// @returns true if the given feature is enabled.
 | ||||
| 	bool experimentalFeatureActive(ExperimentalFeature _feature) const { return m_experimentalFeatures.count(_feature); } | ||||
| 
 | ||||
| 	void addStateVariable(VariableDeclaration const& _declaration, u256 const& _storageOffset, unsigned _byteOffset); | ||||
| @ -78,13 +80,15 @@ public: | ||||
| 	/// @returns the entry label of the given function. Might return an AssemblyItem of type
 | ||||
| 	/// UndefinedItem if it does not exist yet.
 | ||||
| 	eth::AssemblyItem functionEntryLabelIfExists(Declaration const& _declaration) const; | ||||
| 	void setInheritanceHierarchy(std::vector<ContractDefinition const*> const& _hierarchy) { m_inheritanceHierarchy = _hierarchy; } | ||||
| 	/// @returns the entry label of the given function and takes overrides into account.
 | ||||
| 	FunctionDefinition const& resolveVirtualFunction(FunctionDefinition const& _function); | ||||
| 	/// @returns the function that overrides the given declaration from the most derived class just
 | ||||
| 	/// above _base in the current inheritance hierarchy.
 | ||||
| 	FunctionDefinition const& superFunction(FunctionDefinition const& _function, ContractDefinition const& _base); | ||||
| 	/// @returns the next constructor in the inheritance hierarchy.
 | ||||
| 	FunctionDefinition const* nextConstructor(ContractDefinition const& _contract) const; | ||||
| 	/// Sets the current inheritance hierarchy from derived to base.
 | ||||
| 	void setInheritanceHierarchy(std::vector<ContractDefinition const*> const& _hierarchy) { m_inheritanceHierarchy = _hierarchy; } | ||||
| 
 | ||||
| 	/// @returns the next function in the queue of functions that are still to be compiled
 | ||||
| 	/// (i.e. that were referenced during compilation but where we did not yet generate code for).
 | ||||
| @ -155,6 +159,7 @@ public: | ||||
| 	/// Adds a subroutine to the code (in the data section) and pushes its size (via a tag)
 | ||||
| 	/// on the stack. @returns the pushsub assembly item.
 | ||||
| 	eth::AssemblyItem addSubroutine(eth::AssemblyPointer const& _assembly) { return m_asm->appendSubroutine(_assembly); } | ||||
| 	/// Pushes the size of the subroutine.
 | ||||
| 	void pushSubroutineSize(size_t _subRoutine) { m_asm->pushSubroutineSize(_subRoutine); } | ||||
| 	/// Pushes the offset of the subroutine.
 | ||||
| 	void pushSubroutineOffset(size_t _subRoutine) { m_asm->pushSubroutineOffset(_subRoutine); } | ||||
| @ -189,6 +194,7 @@ public: | ||||
| 	/// Appends arbitrary data to the end of the bytecode.
 | ||||
| 	void appendAuxiliaryData(bytes const& _data) { m_asm->appendAuxiliaryDataToEnd(_data); } | ||||
| 
 | ||||
| 	/// Run optimisation step.
 | ||||
| 	void optimise(bool _fullOptimsation, unsigned _runs = 200) { m_asm->optimise(_fullOptimsation, true, _runs); } | ||||
| 
 | ||||
| 	/// @returns the runtime context if in creation mode and runtime context is set, nullptr otherwise.
 | ||||
| @ -196,6 +202,7 @@ public: | ||||
| 	/// @returns the identifier of the runtime subroutine.
 | ||||
| 	size_t runtimeSub() const { return m_runtimeSub; } | ||||
| 
 | ||||
| 	/// @returns a const reference to the underlying assembly.
 | ||||
| 	eth::Assembly const& assembly() const { return *m_asm; } | ||||
| 	/// @returns non-const reference to the underlying assembly. Should be avoided in favour of
 | ||||
| 	/// wrappers in this class.
 | ||||
|  | ||||
| @ -38,14 +38,20 @@ public: | ||||
| 	/// Stores the initial value of the free-memory-pointer at its position;
 | ||||
| 	void initialiseFreeMemoryPointer(); | ||||
| 	/// Copies the free memory pointer to the stack.
 | ||||
| 	/// Stack pre:
 | ||||
| 	/// Stack post: <mem_start>
 | ||||
| 	void fetchFreeMemoryPointer(); | ||||
| 	/// Stores the free memory pointer from the stack.
 | ||||
| 	/// Stack pre: <mem_end>
 | ||||
| 	/// Stack post:
 | ||||
| 	void storeFreeMemoryPointer(); | ||||
| 	/// Allocates a number of bytes in memory as given on the stack.
 | ||||
| 	/// Stack pre: <size>
 | ||||
| 	/// Stack post: <mem_start>
 | ||||
| 	void allocateMemory(); | ||||
| 	/// Appends code that transforms memptr to (memptr - free_memptr) memptr
 | ||||
| 	/// Stack pre: <mem_end>
 | ||||
| 	/// Stack post: <size> <mem_start>
 | ||||
| 	void toSizeAfterFreeMemoryPointer(); | ||||
| 
 | ||||
| 	/// Loads data from memory to the stack.
 | ||||
| @ -105,6 +111,8 @@ public: | ||||
| 
 | ||||
| 	/// Special case of @a encodeToMemory which assumes that everything is padded to words
 | ||||
| 	/// and dynamic data is not copied in place (i.e. a proper ABI encoding).
 | ||||
| 	/// Stack pre: <value0> <value1> ... <valueN-1> <head_start>
 | ||||
| 	/// Stack post: <mem_ptr>
 | ||||
| 	void abiEncode( | ||||
| 		TypePointers const& _givenTypes, | ||||
| 		TypePointers const& _targetTypes, | ||||
| @ -185,9 +193,13 @@ public: | ||||
| 	static unsigned sizeOnStack(std::vector<std::shared_ptr<Type const>> const& _variableTypes); | ||||
| 
 | ||||
| 	/// Helper function to shift top value on the stack to the left.
 | ||||
| 	/// Stack pre: <value> <shift_by_bits>
 | ||||
| 	/// Stack post: <shifted_value>
 | ||||
| 	void leftShiftNumberOnStack(unsigned _bits); | ||||
| 
 | ||||
| 	/// Helper function to shift top value on the stack to the right.
 | ||||
| 	/// Stack pre: <value> <shift_by_bits>
 | ||||
| 	/// Stack post: <shifted_value>
 | ||||
| 	void rightShiftNumberOnStack(unsigned _bits, bool _isSigned = false); | ||||
| 
 | ||||
| 	/// Appends code that computes tha Keccak-256 hash of the topmost stack element of 32 byte type.
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user