{"action":"created","comment":{"url":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls/comments/25344342","id":25344342,"diff_hunk":"@@ -37,41 +38,167 @@ namespace dev\n namespace solidity\n {\n \n-void ExpressionCompiler::compileExpression(CompilerContext& _context, Expression const& _expression, bool _optimize)\n+void ExpressionCompiler::compile(Expression const& _expression)\n {\n-\tExpressionCompiler compiler(_context, _optimize);\n-\t_expression.accept(compiler);\n+\t_expression.accept(*this);\n }\n \n-void ExpressionCompiler::appendTypeConversion(CompilerContext& _context, Type const& _typeOnStack,\n-\t\t\t\t\t\t\t\t\t\t\t  Type const& _targetType, bool _cleanupNeeded)\n+void ExpressionCompiler::appendStateVariableInitialization(VariableDeclaration const& _varDecl)\n {\n-\tExpressionCompiler compiler(_context);\n-\tcompiler.appendTypeConversion(_typeOnStack, _targetType, _cleanupNeeded);\n-}\n+\tif (!_varDecl.getValue())\n+\t\treturn;\n+\tsolAssert(!!_varDecl.getValue()->getType(), \"Type information not available.\");\n+\tCompilerContext::LocationSetter locationSetter(m_context, &_varDecl);\n+\t_varDecl.getValue()->accept(*this);\n+\tappendTypeConversion(*_varDecl.getValue()->getType(), *_varDecl.getType(), true);\n \n-void ExpressionCompiler::appendStateVariableAccessor(CompilerContext& _context, VariableDeclaration const& _varDecl, bool _optimize)\n-{\n-\tExpressionCompiler compiler(_context, _optimize);\n-\tcompiler.appendStateVariableAccessor(_varDecl);\n+\tStorageItem(m_context, _varDecl).storeValue(*_varDecl.getType(), _varDecl.getLocation(), true);\n }\n \n-void ExpressionCompiler::appendStateVariableInitialization(CompilerContext& _context, VariableDeclaration const& _varDecl, bool _optimize)\n+void ExpressionCompiler::appendStateVariableAccessor(VariableDeclaration const& _varDecl)\n {\n-\tcompileExpression(_context, *(_varDecl.getValue()), _optimize);\n-\tif (_varDecl.getValue()->getType())\n-\t\tappendTypeConversion(_context, *(_varDecl.getValue())->getType(), *(_varDecl.getValue())->getType());\n+\tCompilerContext::LocationSetter locationSetter(m_context, &_varDecl);\n+\tFunctionType accessorType(_varDecl);\n+\n+\tunsigned length = 0;\n+\tTypePointers const& paramTypes = accessorType.getParameterTypes();\n+\t// move arguments to memory\n+\tfor (TypePointer const& paramType: boost::adaptors::reverse(paramTypes))\n+\t\tlength += CompilerUtils(m_context).storeInMemory(length, *paramType, true);\n+\n+\t// retrieve the position of the variable\n+\tm_context << m_context.getStorageLocationOfVariable(_varDecl);\n+\tTypePointer returnType = _varDecl.getType();\n+\n+\tfor (TypePointer const& paramType: paramTypes)\n+\t{\n+\t\t// move offset to memory\n+\t\tCompilerUtils(m_context).storeInMemory(length);\n+\t\tunsigned argLen = CompilerUtils::getPaddedSize(paramType->getCalldataEncodedSize());\n+\t\tlength -= argLen;\n+\t\tm_context << u256(argLen + 32) << u256(length) << eth::Instruction::SHA3;\n+\n+\t\treturnType = dynamic_cast<MappingType const&>(*returnType).getValueType();\n+\t}\n \n-\tExpressionCompiler compiler(_context, _optimize);\n-\tcompiler.appendStateVariableInitialization(_varDecl);\n+\tunsigned retSizeOnStack = 0;\n+\tsolAssert(accessorType.getReturnParameterTypes().size() >= 1, \"\");\n+\tif (StructType const* structType = dynamic_cast<StructType const*>(returnType.get()))\n+\t{\n+\t\tauto const& names = accessorType.getReturnParameterNames();\n+\t\tauto const& types = accessorType.getReturnParameterTypes();\n+\t\t// struct\n+\t\tfor (size_t i = 0; i < names.size(); ++i)\n+\t\t{\n+\t\t\tm_context << eth::Instruction::DUP1\n+\t\t\t\t\t  << structType->getStorageOffsetOfMember(names[i])\n+\t\t\t\t\t  << eth::Instruction::ADD;\n+\t\t\tStorageItem(m_context, types[i]).retrieveValue(SourceLocation(), true);\n+\t\t\tsolAssert(types[i]->getSizeOnStack() == 1, \"Returning struct elements with stack size != 1 not yet implemented.\");\n+\t\t\tm_context << eth::Instruction::SWAP1;\n+\t\t\tretSizeOnStack += types[i]->getSizeOnStack();\n+\t\t}\n+\t\tm_context << eth::Instruction::POP;\n+\t}\n+\telse\n+\t{\n+\t\t// simple value\n+\t\tsolAssert(accessorType.getReturnParameterTypes().size() == 1, \"\");\n+\t\tStorageItem(m_context, returnType).retrieveValue(SourceLocation(), true);\n+\t\tretSizeOnStack = returnType->getSizeOnStack();\n+\t}\n+\tsolAssert(retSizeOnStack <= 15, \"Stack too deep.\");\n+\tm_context << eth::dupInstruction(retSizeOnStack + 1) << eth::Instruction::JUMP;\n }\n \n-void ExpressionCompiler::appendStateVariableInitialization(VariableDeclaration const& _varDecl)\n+void ExpressionCompiler::appendTypeConversion(Type const& _typeOnStack, Type const& _targetType, bool _cleanupNeeded)\n {\n-\tCompilerContext::LocationSetter locationSetter(m_context, &_varDecl);\n-\tLValue var = LValue(m_context);\n-\tvar.fromDeclaration(_varDecl, _varDecl.getValue()->getLocation());\n-\tvar.storeValue(*_varDecl.getType(), _varDecl.getLocation());\n+\t// For a type extension, we need to remove all higher-order bits that we might have ignored in\n+\t// previous operations.\n+\t// @todo: store in the AST whether the operand might have \"dirty\" higher order bits\n+\n+\tif (_typeOnStack == _targetType && !_cleanupNeeded)\n+\t\treturn;\n+\tType::Category stackTypeCategory = _typeOnStack.getCategory();\n+\tType::Category targetTypeCategory = _targetType.getCategory();\n+\n+\tif (stackTypeCategory == Type::Category::String)\n+\t{\n+\t\tStaticStringType const& typeOnStack = dynamic_cast<StaticStringType const&>(_typeOnStack);\n+\t\tif (targetTypeCategory == Type::Category::Integer)\n+\t\t{\n+\t\t\t// conversion from string to hash. no need to clean the high bit\n+\t\t\t// only to shift right because of opposite alignment\n+\t\t\tIntegerType const& targetIntegerType = dynamic_cast<IntegerType const&>(_targetType);\n+\t\t\tsolAssert(targetIntegerType.isHash(), \"Only conversion between String and Hash is allowed.\");\n+\t\t\tsolAssert(targetIntegerType.getNumBits() == typeOnStack.getNumBytes() * 8, \"The size should be the same.\");\n+\t\t\tm_context << (u256(1) << (256 - typeOnStack.getNumBytes() * 8)) << eth::Instruction::SWAP1 << eth::Instruction::DIV;\n+\t\t}\n+\t\telse\n+\t\t{\n+\t\t\t// clear lower-order bytes for conversion to shorter strings - we always clean\n+\t\t\tsolAssert(targetTypeCategory == Type::Category::String, \"Invalid type conversion requested.\");\n+\t\t\tStaticStringType const& targetType = dynamic_cast<StaticStringType const&>(_targetType);\n+\t\t\tif (targetType.getNumBytes() < typeOnStack.getNumBytes())\n+\t\t\t{\n+\t\t\t\tif (targetType.getNumBytes() == 0)\n+\t\t\t\t\tm_context << eth::Instruction::DUP1 << eth::Instruction::XOR;\n+\t\t\t\telse\n+\t\t\t\t\tm_context << (u256(1) << (256 - targetType.getNumBytes() * 8))\n+\t\t\t\t\t\t\t  << eth::Instruction::DUP1 << eth::Instruction::SWAP2\n+\t\t\t\t\t\t\t  << eth::Instruction::DIV << eth::Instruction::MUL;\n+\t\t\t}\n+\t\t}\n+\t}\n+\telse if (stackTypeCategory == Type::Category::Enum)\n+\t\tsolAssert(targetTypeCategory == Type::Category::Integer ||\n+\t\t\ttargetTypeCategory == Type::Category::Enum, \"\");\n+\telse if (stackTypeCategory == Type::Category::Integer || stackTypeCategory == Type::Category::Contract ||","path":"libsolidity/ExpressionCompiler.cpp","position":150,"original_position":150,"commit_id":"a03ead264eaae86d5cbcfa166f2a2bb24a11385a","original_commit_id":"a03ead264eaae86d5cbcfa166f2a2bb24a11385a","user":{"login":"LefterisJP","id":1658405,"avatar_url":"https://avatars.githubusercontent.com/u/1658405?v=3","gravatar_id":"","url":"https://api.github.com/users/LefterisJP","html_url":"https://github.com/LefterisJP","followers_url":"https://api.github.com/users/LefterisJP/followers","following_url":"https://api.github.com/users/LefterisJP/following{/other_user}","gists_url":"https://api.github.com/users/LefterisJP/gists{/gist_id}","starred_url":"https://api.github.com/users/LefterisJP/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LefterisJP/subscriptions","organizations_url":"https://api.github.com/users/LefterisJP/orgs","repos_url":"https://api.github.com/users/LefterisJP/repos","events_url":"https://api.github.com/users/LefterisJP/events{/privacy}","received_events_url":"https://api.github.com/users/LefterisJP/received_events","type":"User","site_admin":false},"body":"since you already got a line break here why not put each condition in its own line? I think it would be more readable that way.","created_at":"2015-02-25T14:48:16Z","updated_at":"2015-02-25T14:48:16Z","html_url":"https://github.com/ethereum/cpp-ethereum/pull/1140#discussion_r25344342","pull_request_url":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls/1140","_links":{"self":{"href":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls/comments/25344342"},"html":{"href":"https://github.com/ethereum/cpp-ethereum/pull/1140#discussion_r25344342"},"pull_request":{"href":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls/1140"}}},"pull_request":{"url":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls/1140","id":29989905,"html_url":"https://github.com/ethereum/cpp-ethereum/pull/1140","diff_url":"https://github.com/ethereum/cpp-ethereum/pull/1140.diff","patch_url":"https://github.com/ethereum/cpp-ethereum/pull/1140.patch","issue_url":"https://api.github.com/repos/ethereum/cpp-ethereum/issues/1140","number":1140,"state":"open","locked":false,"title":"LValue refactoring.","user":{"login":"chriseth","id":9073706,"avatar_url":"https://avatars.githubusercontent.com/u/9073706?v=3","gravatar_id":"","url":"https://api.github.com/users/chriseth","html_url":"https://github.com/chriseth","followers_url":"https://api.github.com/users/chriseth/followers","following_url":"https://api.github.com/users/chriseth/following{/other_user}","gists_url":"https://api.github.com/users/chriseth/gists{/gist_id}","starred_url":"https://api.github.com/users/chriseth/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chriseth/subscriptions","organizations_url":"https://api.github.com/users/chriseth/orgs","repos_url":"https://api.github.com/users/chriseth/repos","events_url":"https://api.github.com/users/chriseth/events{/privacy}","received_events_url":"https://api.github.com/users/chriseth/received_events","type":"User","site_admin":false},"body":"Create a new virtual class for LValues.","created_at":"2015-02-25T14:16:12Z","updated_at":"2015-02-25T14:48:17Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c83ff2087fd3e685610ce078f8846eaf6636c562","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls/1140/commits","review_comments_url":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls/1140/comments","review_comment_url":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ethereum/cpp-ethereum/issues/1140/comments","statuses_url":"https://api.github.com/repos/ethereum/cpp-ethereum/statuses/a03ead264eaae86d5cbcfa166f2a2bb24a11385a","head":{"label":"chriseth:sol_lvalueRefactoring","ref":"sol_lvalueRefactoring","sha":"a03ead264eaae86d5cbcfa166f2a2bb24a11385a","user":{"login":"chriseth","id":9073706,"avatar_url":"https://avatars.githubusercontent.com/u/9073706?v=3","gravatar_id":"","url":"https://api.github.com/users/chriseth","html_url":"https://github.com/chriseth","followers_url":"https://api.github.com/users/chriseth/followers","following_url":"https://api.github.com/users/chriseth/following{/other_user}","gists_url":"https://api.github.com/users/chriseth/gists{/gist_id}","starred_url":"https://api.github.com/users/chriseth/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chriseth/subscriptions","organizations_url":"https://api.github.com/users/chriseth/orgs","repos_url":"https://api.github.com/users/chriseth/repos","events_url":"https://api.github.com/users/chriseth/events{/privacy}","received_events_url":"https://api.github.com/users/chriseth/received_events","type":"User","site_admin":false},"repo":{"id":24932538,"name":"cpp-ethereum","full_name":"chriseth/cpp-ethereum","owner":{"login":"chriseth","id":9073706,"avatar_url":"https://avatars.githubusercontent.com/u/9073706?v=3","gravatar_id":"","url":"https://api.github.com/users/chriseth","html_url":"https://github.com/chriseth","followers_url":"https://api.github.com/users/chriseth/followers","following_url":"https://api.github.com/users/chriseth/following{/other_user}","gists_url":"https://api.github.com/users/chriseth/gists{/gist_id}","starred_url":"https://api.github.com/users/chriseth/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chriseth/subscriptions","organizations_url":"https://api.github.com/users/chriseth/orgs","repos_url":"https://api.github.com/users/chriseth/repos","events_url":"https://api.github.com/users/chriseth/events{/privacy}","received_events_url":"https://api.github.com/users/chriseth/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/chriseth/cpp-ethereum","description":"Gavin Wood's C++ implementation of the Ethereum yellowpaper.","fork":true,"url":"https://api.github.com/repos/chriseth/cpp-ethereum","forks_url":"https://api.github.com/repos/chriseth/cpp-ethereum/forks","keys_url":"https://api.github.com/repos/chriseth/cpp-ethereum/keys{/key_id}","collaborators_url":"https://api.github.com/repos/chriseth/cpp-ethereum/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/chriseth/cpp-ethereum/teams","hooks_url":"https://api.github.com/repos/chriseth/cpp-ethereum/hooks","issue_events_url":"https://api.github.com/repos/chriseth/cpp-ethereum/issues/events{/number}","events_url":"https://api.github.com/repos/chriseth/cpp-ethereum/events","assignees_url":"https://api.github.com/repos/chriseth/cpp-ethereum/assignees{/user}","branches_url":"https://api.github.com/repos/chriseth/cpp-ethereum/branches{/branch}","tags_url":"https://api.github.com/repos/chriseth/cpp-ethereum/tags","blobs_url":"https://api.github.com/repos/chriseth/cpp-ethereum/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/chriseth/cpp-ethereum/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/chriseth/cpp-ethereum/git/refs{/sha}","trees_url":"https://api.github.com/repos/chriseth/cpp-ethereum/git/trees{/sha}","statuses_url":"https://api.github.com/repos/chriseth/cpp-ethereum/statuses/{sha}","languages_url":"https://api.github.com/repos/chriseth/cpp-ethereum/languages","stargazers_url":"https://api.github.com/repos/chriseth/cpp-ethereum/stargazers","contributors_url":"https://api.github.com/repos/chriseth/cpp-ethereum/contributors","subscribers_url":"https://api.github.com/repos/chriseth/cpp-ethereum/subscribers","subscription_url":"https://api.github.com/repos/chriseth/cpp-ethereum/subscription","commits_url":"https://api.github.com/repos/chriseth/cpp-ethereum/commits{/sha}","git_commits_url":"https://api.github.com/repos/chriseth/cpp-ethereum/git/commits{/sha}","comments_url":"https://api.github.com/repos/chriseth/cpp-ethereum/comments{/number}","issue_comment_url":"https://api.github.com/repos/chriseth/cpp-ethereum/issues/comments{/number}","contents_url":"https://api.github.com/repos/chriseth/cpp-ethereum/contents/{+path}","compare_url":"https://api.github.com/repos/chriseth/cpp-ethereum/compare/{base}...{head}","merges_url":"https://api.github.com/repos/chriseth/cpp-ethereum/merges","archive_url":"https://api.github.com/repos/chriseth/cpp-ethereum/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/chriseth/cpp-ethereum/downloads","issues_url":"https://api.github.com/repos/chriseth/cpp-ethereum/issues{/number}","pulls_url":"https://api.github.com/repos/chriseth/cpp-ethereum/pulls{/number}","milestones_url":"https://api.github.com/repos/chriseth/cpp-ethereum/milestones{/number}","notifications_url":"https://api.github.com/repos/chriseth/cpp-ethereum/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/chriseth/cpp-ethereum/labels{/name}","releases_url":"https://api.github.com/repos/chriseth/cpp-ethereum/releases{/id}","created_at":"2014-10-08T09:01:35Z","updated_at":"2014-10-10T15:01:57Z","pushed_at":"2015-02-25T14:41:28Z","git_url":"git://github.com/chriseth/cpp-ethereum.git","ssh_url":"git@github.com:chriseth/cpp-ethereum.git","clone_url":"https://github.com/chriseth/cpp-ethereum.git","svn_url":"https://github.com/chriseth/cpp-ethereum","homepage":"www.gavwood.com/Paper.pdf","size":33405,"stargazers_count":1,"watchers_count":1,"language":null,"has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":1,"mirror_url":null,"open_issues_count":0,"forks":1,"open_issues":0,"watchers":1,"default_branch":"develop"}},"base":{"label":"ethereum:develop","ref":"develop","sha":"fc1281229be5cb477d70c3ebb14472cf896d40b5","user":{"login":"ethereum","id":6250754,"avatar_url":"https://avatars.githubusercontent.com/u/6250754?v=3","gravatar_id":"","url":"https://api.github.com/users/ethereum","html_url":"https://github.com/ethereum","followers_url":"https://api.github.com/users/ethereum/followers","following_url":"https://api.github.com/users/ethereum/following{/other_user}","gists_url":"https://api.github.com/users/ethereum/gists{/gist_id}","starred_url":"https://api.github.com/users/ethereum/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ethereum/subscriptions","organizations_url":"https://api.github.com/users/ethereum/orgs","repos_url":"https://api.github.com/users/ethereum/repos","events_url":"https://api.github.com/users/ethereum/events{/privacy}","received_events_url":"https://api.github.com/users/ethereum/received_events","type":"Organization","site_admin":false},"repo":{"id":15460666,"name":"cpp-ethereum","full_name":"ethereum/cpp-ethereum","owner":{"login":"ethereum","id":6250754,"avatar_url":"https://avatars.githubusercontent.com/u/6250754?v=3","gravatar_id":"","url":"https://api.github.com/users/ethereum","html_url":"https://github.com/ethereum","followers_url":"https://api.github.com/users/ethereum/followers","following_url":"https://api.github.com/users/ethereum/following{/other_user}","gists_url":"https://api.github.com/users/ethereum/gists{/gist_id}","starred_url":"https://api.github.com/users/ethereum/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ethereum/subscriptions","organizations_url":"https://api.github.com/users/ethereum/orgs","repos_url":"https://api.github.com/users/ethereum/repos","events_url":"https://api.github.com/users/ethereum/events{/privacy}","received_events_url":"https://api.github.com/users/ethereum/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ethereum/cpp-ethereum","description":"Gavin Wood's C++ implementation of the Ethereum yellowpaper.","fork":false,"url":"https://api.github.com/repos/ethereum/cpp-ethereum","forks_url":"https://api.github.com/repos/ethereum/cpp-ethereum/forks","keys_url":"https://api.github.com/repos/ethereum/cpp-ethereum/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ethereum/cpp-ethereum/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ethereum/cpp-ethereum/teams","hooks_url":"https://api.github.com/repos/ethereum/cpp-ethereum/hooks","issue_events_url":"https://api.github.com/repos/ethereum/cpp-ethereum/issues/events{/number}","events_url":"https://api.github.com/repos/ethereum/cpp-ethereum/events","assignees_url":"https://api.github.com/repos/ethereum/cpp-ethereum/assignees{/user}","branches_url":"https://api.github.com/repos/ethereum/cpp-ethereum/branches{/branch}","tags_url":"https://api.github.com/repos/ethereum/cpp-ethereum/tags","blobs_url":"https://api.github.com/repos/ethereum/cpp-ethereum/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ethereum/cpp-ethereum/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ethereum/cpp-ethereum/git/refs{/sha}","trees_url":"https://api.github.com/repos/ethereum/cpp-ethereum/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ethereum/cpp-ethereum/statuses/{sha}","languages_url":"https://api.github.com/repos/ethereum/cpp-ethereum/languages","stargazers_url":"https://api.github.com/repos/ethereum/cpp-ethereum/stargazers","contributors_url":"https://api.github.com/repos/ethereum/cpp-ethereum/contributors","subscribers_url":"https://api.github.com/repos/ethereum/cpp-ethereum/subscribers","subscription_url":"https://api.github.com/repos/ethereum/cpp-ethereum/subscription","commits_url":"https://api.github.com/repos/ethereum/cpp-ethereum/commits{/sha}","git_commits_url":"https://api.github.com/repos/ethereum/cpp-ethereum/git/commits{/sha}","comments_url":"https://api.github.com/repos/ethereum/cpp-ethereum/comments{/number}","issue_comment_url":"https://api.github.com/repos/ethereum/cpp-ethereum/issues/comments{/number}","contents_url":"https://api.github.com/repos/ethereum/cpp-ethereum/contents/{+path}","compare_url":"https://api.github.com/repos/ethereum/cpp-ethereum/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ethereum/cpp-ethereum/merges","archive_url":"https://api.github.com/repos/ethereum/cpp-ethereum/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ethereum/cpp-ethereum/downloads","issues_url":"https://api.github.com/repos/ethereum/cpp-ethereum/issues{/number}","pulls_url":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls{/number}","milestones_url":"https://api.github.com/repos/ethereum/cpp-ethereum/milestones{/number}","notifications_url":"https://api.github.com/repos/ethereum/cpp-ethereum/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ethereum/cpp-ethereum/labels{/name}","releases_url":"https://api.github.com/repos/ethereum/cpp-ethereum/releases{/id}","created_at":"2013-12-26T21:26:06Z","updated_at":"2015-02-25T14:24:16Z","pushed_at":"2015-02-25T14:24:16Z","git_url":"git://github.com/ethereum/cpp-ethereum.git","ssh_url":"git@github.com:ethereum/cpp-ethereum.git","clone_url":"https://github.com/ethereum/cpp-ethereum.git","svn_url":"https://github.com/ethereum/cpp-ethereum","homepage":"www.gavwood.com/Paper.pdf","size":82180,"stargazers_count":407,"watchers_count":407,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":145,"mirror_url":null,"open_issues_count":125,"forks":145,"open_issues":125,"watchers":407,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls/1140"},"html":{"href":"https://github.com/ethereum/cpp-ethereum/pull/1140"},"issue":{"href":"https://api.github.com/repos/ethereum/cpp-ethereum/issues/1140"},"comments":{"href":"https://api.github.com/repos/ethereum/cpp-ethereum/issues/1140/comments"},"review_comments":{"href":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls/1140/comments"},"review_comment":{"href":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls/1140/commits"},"statuses":{"href":"https://api.github.com/repos/ethereum/cpp-ethereum/statuses/a03ead264eaae86d5cbcfa166f2a2bb24a11385a"}}}}