diff options
author | Lefteris Karapetsas <lefteris@refu.co> | 2015-01-26 23:58:54 +0800 |
---|---|---|
committer | Lefteris Karapetsas <lefteris@refu.co> | 2015-01-29 04:46:16 +0800 |
commit | 3ec6c0b1cbe1be0a95f711ce74b0e360fabdaa96 (patch) | |
tree | 358617f3063d1194ea0ddefda49c4e8ef57ef94b /Compiler.cpp | |
parent | 53ef6900b797cde404faac94af3058669187c115 (diff) | |
download | dexon-solidity-3ec6c0b1cbe1be0a95f711ce74b0e360fabdaa96.tar dexon-solidity-3ec6c0b1cbe1be0a95f711ce74b0e360fabdaa96.tar.gz dexon-solidity-3ec6c0b1cbe1be0a95f711ce74b0e360fabdaa96.tar.bz2 dexon-solidity-3ec6c0b1cbe1be0a95f711ce74b0e360fabdaa96.tar.lz dexon-solidity-3ec6c0b1cbe1be0a95f711ce74b0e360fabdaa96.tar.xz dexon-solidity-3ec6c0b1cbe1be0a95f711ce74b0e360fabdaa96.tar.zst dexon-solidity-3ec6c0b1cbe1be0a95f711ce74b0e360fabdaa96.zip |
All interface functions are external.
Diffstat (limited to 'Compiler.cpp')
-rw-r--r-- | Compiler.cpp | 40 |
1 files changed, 32 insertions, 8 deletions
diff --git a/Compiler.cpp b/Compiler.cpp index 28a9b3d1..c419f484 100644 --- a/Compiler.cpp +++ b/Compiler.cpp @@ -43,23 +43,30 @@ void Compiler::compileContract(ContractDefinition const& _contract, for (ContractDefinition const* contract: _contract.getLinearizedBaseContracts()) { - for (auto const& it: contract->getInterfaceFunctions()) - { - auto funcDef = it.second.getFunctionDefinition(); - if (funcDef && funcDef->isConstructor()) - continue; - m_context.addFunction(*it.second.getDeclaration()); - } - for (ASTPointer<ModifierDefinition> const& modifier: contract->getFunctionModifiers()) + for (ASTPointer<FunctionDefinition> const& function: contract->getDefinedFunctions()) + if (!function->isConstructor()) + m_context.addFunction(*function); + + for (ASTPointer<VariableDeclaration> const& vardecl: contract->getStateVariables()) + if (vardecl->isPublic()) + m_context.addFunction(*vardecl); + + for (ASTPointer<ModifierDefinition> const& modifier: contract->getFunctionModifiers()) m_context.addModifier(*modifier); } appendFunctionSelector(_contract); for (ContractDefinition const* contract: _contract.getLinearizedBaseContracts()) + { for (ASTPointer<FunctionDefinition> const& function: contract->getDefinedFunctions()) if (!function->isConstructor()) function->accept(*this); + for (ASTPointer<VariableDeclaration> const& vardecl: contract->getStateVariables()) + if (vardecl->isPublic()) + generateAccessorCode(*vardecl); + } + // Swap the runtime context with the creation-time context swap(m_context, m_runtimeContext); initializeContext(_contract, _contracts); @@ -285,6 +292,23 @@ void Compiler::registerStateVariables(ContractDefinition const& _contract) m_context.addStateVariable(*variable); } +bool Compiler::generateAccessorCode(VariableDeclaration const& _varDecl) +{ + m_context.startNewFunction(); + m_returnTag = m_context.newTag(); + m_breakTags.clear(); + m_continueTags.clear(); + + // TODO: Work in progress + m_context << m_context.getFunctionEntryLabel(_varDecl); + // CompilerUtils(m_context).moveToStackVariable(firstVariable); + m_context.appendJumpTo(m_returnTag); + m_context << m_returnTag; + + // TODO: perhaps return void if there are no checks? + return true; +} + bool Compiler::visit(FunctionDefinition const& _function) { //@todo to simplify this, the calling convention could by changed such that |