From a33a5e3c0846e7db8d87fdd5de890a63d359581d Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Fri, 9 Jun 2017 13:55:17 +0100 Subject: [PATCH 1/2] Run analyzer in Julia mode if requested in AssemblyStack --- libsolidity/interface/AssemblyStack.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsolidity/interface/AssemblyStack.cpp b/libsolidity/interface/AssemblyStack.cpp index 2d85895ed..7cda096e4 100644 --- a/libsolidity/interface/AssemblyStack.cpp +++ b/libsolidity/interface/AssemblyStack.cpp @@ -72,7 +72,7 @@ bool AssemblyStack::analyze(assembly::Block const& _block, Scanner const* _scann bool AssemblyStack::analyzeParsed() { m_analysisInfo = make_shared(); - assembly::AsmAnalyzer analyzer(*m_analysisInfo, m_errorReporter); + assembly::AsmAnalyzer analyzer(*m_analysisInfo, m_errorReporter, m_language == Language::JULIA); m_analysisSuccessful = analyzer.analyze(*m_parserResult); return m_analysisSuccessful; } From 7798a2711213823de409577226f2f1c7f7f2e861 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Fri, 9 Jun 2017 14:38:23 +0100 Subject: [PATCH 2/2] Add Julia mode as an option to EVMCodeTransform --- libjulia/backends/evm/EVMCodeTransform.cpp | 2 +- libjulia/backends/evm/EVMCodeTransform.h | 5 +++++ libsolidity/inlineasm/AsmCodeGen.cpp | 3 +-- libsolidity/interface/AssemblyStack.cpp | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/libjulia/backends/evm/EVMCodeTransform.cpp b/libjulia/backends/evm/EVMCodeTransform.cpp index 8f12bc25b..efbe56470 100644 --- a/libjulia/backends/evm/EVMCodeTransform.cpp +++ b/libjulia/backends/evm/EVMCodeTransform.cpp @@ -294,7 +294,7 @@ void CodeTransform::operator()(FunctionDefinition const& _function) m_assembly.appendConstant(u256(0)); } - CodeTransform(m_assembly, m_info, m_evm15, m_identifierAccess, localStackAdjustment, m_context) + CodeTransform(m_assembly, m_info, m_julia, m_evm15, m_identifierAccess, localStackAdjustment, m_context) (_function.body); { diff --git a/libjulia/backends/evm/EVMCodeTransform.h b/libjulia/backends/evm/EVMCodeTransform.h index d09ee87b7..cd452c5b4 100644 --- a/libjulia/backends/evm/EVMCodeTransform.h +++ b/libjulia/backends/evm/EVMCodeTransform.h @@ -48,11 +48,13 @@ public: CodeTransform( julia::AbstractAssembly& _assembly, solidity::assembly::AsmAnalysisInfo& _analysisInfo, + bool _julia = false, bool _evm15 = false, ExternalIdentifierAccess const& _identifierAccess = ExternalIdentifierAccess() ): CodeTransform( _assembly, _analysisInfo, + _julia, _evm15, _identifierAccess, _assembly.stackHeight(), @@ -73,6 +75,7 @@ protected: CodeTransform( julia::AbstractAssembly& _assembly, solidity::assembly::AsmAnalysisInfo& _analysisInfo, + bool _julia, bool _evm15, ExternalIdentifierAccess const& _identifierAccess, int _stackAdjustment, @@ -80,6 +83,7 @@ protected: ): m_assembly(_assembly), m_info(_analysisInfo), + m_julia(_julia), m_evm15(_evm15), m_identifierAccess(_identifierAccess), m_stackAdjustment(_stackAdjustment), @@ -130,6 +134,7 @@ private: julia::AbstractAssembly& m_assembly; solidity::assembly::AsmAnalysisInfo& m_info; solidity::assembly::Scope* m_scope = nullptr; + bool m_julia = false; bool m_evm15 = false; ExternalIdentifierAccess m_identifierAccess; /// Adjustment between the stack height as determined during the analysis phase diff --git a/libsolidity/inlineasm/AsmCodeGen.cpp b/libsolidity/inlineasm/AsmCodeGen.cpp index 2bbd1b70a..747437372 100644 --- a/libsolidity/inlineasm/AsmCodeGen.cpp +++ b/libsolidity/inlineasm/AsmCodeGen.cpp @@ -137,7 +137,6 @@ private: eth::Assembly& m_assembly; }; - void assembly::CodeGenerator::assemble( Block const& _parsedData, AsmAnalysisInfo& _analysisInfo, @@ -146,5 +145,5 @@ void assembly::CodeGenerator::assemble( ) { EthAssemblyAdapter assemblyAdapter(_assembly); - julia::CodeTransform(assemblyAdapter, _analysisInfo, false, _identifierAccess)(_parsedData); + julia::CodeTransform(assemblyAdapter, _analysisInfo, false, false, _identifierAccess)(_parsedData); } diff --git a/libsolidity/interface/AssemblyStack.cpp b/libsolidity/interface/AssemblyStack.cpp index 7cda096e4..23524bb3f 100644 --- a/libsolidity/interface/AssemblyStack.cpp +++ b/libsolidity/interface/AssemblyStack.cpp @@ -100,7 +100,7 @@ MachineAssemblyObject AssemblyStack::assemble(Machine _machine) const { MachineAssemblyObject object; julia::EVMAssembly assembly(true); - julia::CodeTransform(assembly, *m_analysisInfo, true)(*m_parserResult); + julia::CodeTransform(assembly, *m_analysisInfo, m_language == Language::JULIA, true)(*m_parserResult); object.bytecode = make_shared(assembly.finalize()); /// TOOD: fill out text representation return object;