From 0931289287f8f5ad97dbb82e12972d2efb371a9d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pawe=C5=82=20Bylica?= <pawel.bylica@imapp.pl>
Date: Tue, 14 Oct 2014 15:19:27 +0200
Subject: [PATCH] Convenient Memory::require() overload

---
 evmcc/Memory.cpp | 11 ++++++++---
 evmcc/Memory.h   |  4 ++++
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/evmcc/Memory.cpp b/evmcc/Memory.cpp
index cbc349250..66a18e43f 100644
--- a/evmcc/Memory.cpp
+++ b/evmcc/Memory.cpp
@@ -173,10 +173,15 @@ void Memory::require(llvm::Value* _size)
 	m_builder.CreateCall(m_require, _size);
 }
 
-void Memory::registerReturnData(llvm::Value* _index, llvm::Value* _size)
+void Memory::require(llvm::Value* _offset, llvm::Value* _size)
 {
-	auto sizeRequired = m_builder.CreateAdd(_index, _size, "sizeRequired");
-	require(sizeRequired); // Make sure that memory is allocated and count gas
+	auto sizeRequired = m_builder.CreateAdd(_offset, _size, "sizeRequired");
+	require(sizeRequired);
+}
+
+void Memory::registerReturnData(llvm::Value* _index, llvm::Value* _size)
+{ 
+	require(_index, _size); // Make sure that memory is allocated and count gas
 
 	m_builder.CreateStore(_index, m_returnDataOffset);
 	m_builder.CreateStore(_size, m_returnDataSize);
diff --git a/evmcc/Memory.h b/evmcc/Memory.h
index e973d1016..8ea9bf082 100644
--- a/evmcc/Memory.h
+++ b/evmcc/Memory.h
@@ -20,8 +20,12 @@ public:
 	void storeByte(llvm::Value* _addr, llvm::Value* _byte);
 	llvm::Value* getSize();
 
+	/// Requires this amount of memory. And counts gas fee for that memory.
 	void require(llvm::Value* _size);
 
+	/// Requires the amount of memory to for data defined by offset and size. And counts gas fee for that memory.
+	void require(llvm::Value* _offset, llvm::Value* _size);
+
 	void registerReturnData(llvm::Value* _index, llvm::Value* _size);
 	static dev::bytesConstRef getReturnData();