aboutsummaryrefslogtreecommitdiffstats
path: root/Compiler.cpp
diff options
context:
space:
mode:
authorLefteris Karapetsas <lefteris@refu.co>2015-01-26 23:58:54 +0800
committerLefteris Karapetsas <lefteris@refu.co>2015-01-29 04:46:16 +0800
commit3ec6c0b1cbe1be0a95f711ce74b0e360fabdaa96 (patch)
tree358617f3063d1194ea0ddefda49c4e8ef57ef94b /Compiler.cpp
parent53ef6900b797cde404faac94af3058669187c115 (diff)
downloaddexon-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.cpp40
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