Unverified Commit 287aa115 authored by yann300's avatar yann300 Committed by GitHub

Merge pull request #677 from ethereum/compiler_wrapper

Move compiler code from browser-solidity
parents 5443892b a4bb8eab
...@@ -3,11 +3,15 @@ var SolidityProxy = require('./src/decoder/solidityProxy') ...@@ -3,11 +3,15 @@ var SolidityProxy = require('./src/decoder/solidityProxy')
var localDecoder = require('./src/decoder/localDecoder') var localDecoder = require('./src/decoder/localDecoder')
var stateDecoder = require('./src/decoder/stateDecoder') var stateDecoder = require('./src/decoder/stateDecoder')
var CodeAnalysis = require('./src/analysis/staticAnalysisRunner') var CodeAnalysis = require('./src/analysis/staticAnalysisRunner')
var Compiler = require('./src/compiler/compiler')
var CompilerInput = require('./src/compiler/compiler-input')
module.exports = { module.exports = {
InternalCallTree: InternalCallTree, InternalCallTree: InternalCallTree,
SolidityProxy: SolidityProxy, SolidityProxy: SolidityProxy,
localDecoder: localDecoder, localDecoder: localDecoder,
stateDecoder: stateDecoder, stateDecoder: stateDecoder,
CodeAnalysis: CodeAnalysis CodeAnalysis: CodeAnalysis,
Compiler: Compiler,
CompilerInput: CompilerInput
} }
...@@ -23,13 +23,16 @@ ...@@ -23,13 +23,16 @@
"fast-async": "^6.1.2", "fast-async": "^6.1.2",
"remix-core": "latest", "remix-core": "latest",
"remix-lib": "latest", "remix-lib": "latest",
"solc": "^0.4.13", "webworkify": "^1.2.1",
"solc": "https://github.com/ethereum/solc-js",
"npm-run-all": "^4.0.2",
"standard": "^7.0.1", "standard": "^7.0.1",
"tape": "^4.6.0" "tape": "^4.6.0"
}, },
"scripts": { "scripts": {
"test": "standard && npm run downloadsolc && tape ./test/tests.js", "test": "standard && npm run downloadsolc && tape ./test/tests.js",
"downloadsolc": "test -e soljson.js || wget https://ethereum.github.io/solc-bin/soljson.js" "downloadsolc": "cd node_modules/solc && (test -e soljson.js || wget https://ethereum.github.io/solc-bin/soljson.js) && cd ..",
"prepublish": "mkdirp build; npm-run-all -ls downloadsolc"
}, },
"standard": { "standard": {
"ignore": [ "ignore": [
......
'use strict'
module.exports = (sources, opts) => {
return JSON.stringify({
language: 'Solidity',
sources: sources,
settings: {
optimizer: {
enabled: opts.optimize === true || opts.optimize === 1,
runs: 200
},
libraries: opts.libraries,
outputSelection: {
'*': {
'': [ 'legacyAST' ],
'*': [ 'abi', 'metadata', 'devdoc', 'userdoc', 'evm.legacyAssembly', 'evm.bytecode', 'evm.deployedBytecode', 'evm.methodIdentifiers', 'evm.gasEstimates' ]
}
}
}
})
}
'use strict'
var solc = require('solc/wrapper')
var compileJSON = function () { return '' }
var missingInputs = []
module.exports = function (self) {
self.addEventListener('message', function (e) {
var data = e.data
switch (data.cmd) {
case 'loadVersion':
delete self.Module
// NOTE: workaround some browsers?
self.Module = undefined
compileJSON = null
self.importScripts(data.data)
var compiler = solc(self.Module)
compileJSON = function (input) {
try {
return compiler.compileStandardWrapper(input, function (path) {
missingInputs.push(path)
return { 'error': 'Deferred import' }
})
} catch (exception) {
return JSON.stringify({ error: 'Uncaught JavaScript exception:\n' + exception })
}
}
self.postMessage({
cmd: 'versionLoaded',
data: compiler.version()
})
break
case 'compile':
missingInputs.length = 0
self.postMessage({cmd: 'compiled', job: data.job, data: compileJSON(data.input), missingInputs: missingInputs})
break
}
}, false)
}
This diff is collapsed.
'use strict'
module.exports = {
/**
* return the contract obj of the given @arg name. Uses last compilation result.
* return null if not found
* @param {String} name - contract name
* @returns contract obj and associated file: { contract, file } or null
*/
getContract: (contractName, contracts) => {
for (var file in contracts) {
if (contracts[file][contractName]) {
return { object: contracts[file][contractName], file: file }
}
}
return null
},
/**
* call the given @arg cb (function) for all the contracts. Uses last compilation result
* stop visiting when cb return true
* @param {Function} cb - callback
*/
visitContracts: (contracts, cb) => {
for (var file in contracts) {
for (var name in contracts[file]) {
if (cb({ name: name, object: contracts[file][name], file: file })) return
}
}
}
}
...@@ -4,8 +4,7 @@ var remixLib = require('remix-lib') ...@@ -4,8 +4,7 @@ var remixLib = require('remix-lib')
var StatRunner = require('../../src/analysis/staticAnalysisRunner') var StatRunner = require('../../src/analysis/staticAnalysisRunner')
var compilerInput = remixLib.helpers.compiler.compilerInput var compilerInput = remixLib.helpers.compiler.compilerInput
var solc = require('solc/wrapper') var compiler = require('solc')
var compiler = solc(require('../../soljson'))
var fs = require('fs') var fs = require('fs')
var path = require('path') var path = require('path')
......
...@@ -4,8 +4,7 @@ var remixLib = require('remix-lib') ...@@ -4,8 +4,7 @@ var remixLib = require('remix-lib')
var StatRunner = require('../../src/analysis/staticAnalysisRunner') var StatRunner = require('../../src/analysis/staticAnalysisRunner')
var compilerInput = remixLib.helpers.compiler.compilerInput var compilerInput = remixLib.helpers.compiler.compilerInput
var solc = require('solc/wrapper') var compiler = require('solc')
var compiler = solc(require('../../soljson'))
var fs = require('fs') var fs = require('fs')
var path = require('path') var path = require('path')
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment