From f5b184323d73693b7445419e1b97cb43c15fd426 Mon Sep 17 00:00:00 2001 From: chriseth Date: Wed, 9 Dec 2015 17:37:19 +0100 Subject: [PATCH 01/12] Fix: Type checker crash for wrong number of base constructor arguments. --- libsolidity/analysis/TypeChecker.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libsolidity/analysis/TypeChecker.cpp b/libsolidity/analysis/TypeChecker.cpp index 851266bdd..5bdd169f4 100644 --- a/libsolidity/analysis/TypeChecker.cpp +++ b/libsolidity/analysis/TypeChecker.cpp @@ -337,6 +337,7 @@ void TypeChecker::endVisit(InheritanceSpecifier const& _inheritance) auto const& arguments = _inheritance.arguments(); TypePointers parameterTypes = ContractType(*base).constructorType()->parameterTypes(); if (!arguments.empty() && parameterTypes.size() != arguments.size()) + { typeError( _inheritance.location(), "Wrong argument count for constructor call: " + @@ -345,6 +346,8 @@ void TypeChecker::endVisit(InheritanceSpecifier const& _inheritance) toString(parameterTypes.size()) + "." ); + return; + } for (size_t i = 0; i < arguments.size(); ++i) if (!type(*arguments[i])->isImplicitlyConvertibleTo(*parameterTypes[i])) From 39f57a9c718159448b0f9df199c3a0a019f32ca2 Mon Sep 17 00:00:00 2001 From: chriseth Date: Wed, 9 Dec 2015 17:53:15 +0100 Subject: [PATCH 02/12] Fix: Segfaults connected to paramater types. parameterTypes does not return by const reference anymore. --- libsolidity/analysis/TypeChecker.cpp | 4 ++-- libsolidity/codegen/ExpressionCompiler.cpp | 4 ++-- solc/CommandLineInterface.cpp | 6 +++--- solc/jsonCompiler.cpp | 6 +++--- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/libsolidity/analysis/TypeChecker.cpp b/libsolidity/analysis/TypeChecker.cpp index 851266bdd..425f92996 100644 --- a/libsolidity/analysis/TypeChecker.cpp +++ b/libsolidity/analysis/TypeChecker.cpp @@ -950,7 +950,7 @@ bool TypeChecker::visit(FunctionCall const& _functionCall) else _functionCall.annotation().type = make_shared(functionType->returnParameterTypes()); - TypePointers const& parameterTypes = functionType->parameterTypes(); + TypePointers parameterTypes = functionType->parameterTypes(); if (!functionType->takesArbitraryParameters() && parameterTypes.size() != arguments.size()) { string msg = @@ -1079,7 +1079,7 @@ void TypeChecker::endVisit(NewExpression const& _newExpression) ); auto contractType = make_shared(*contract); - TypePointers const& parameterTypes = contractType->constructorType()->parameterTypes(); + TypePointers parameterTypes = contractType->constructorType()->parameterTypes(); _newExpression.annotation().type = make_shared( parameterTypes, TypePointers{contractType}, diff --git a/libsolidity/codegen/ExpressionCompiler.cpp b/libsolidity/codegen/ExpressionCompiler.cpp index a090a28cf..dcdab2a79 100644 --- a/libsolidity/codegen/ExpressionCompiler.cpp +++ b/libsolidity/codegen/ExpressionCompiler.cpp @@ -85,7 +85,7 @@ void ExpressionCompiler::appendStateVariableAccessor(VariableDeclaration const& CompilerContext::LocationSetter locationSetter(m_context, _varDecl); FunctionType accessorType(_varDecl); - TypePointers const& paramTypes = accessorType.parameterTypes(); + TypePointers paramTypes = accessorType.parameterTypes(); // retrieve the position of the variable auto const& location = m_context.storageLocationOfVariable(_varDecl); @@ -380,7 +380,7 @@ bool ExpressionCompiler::visit(FunctionCall const& _functionCall) else functionType = dynamic_pointer_cast(_functionCall.expression().annotation().type); - TypePointers const& parameterTypes = functionType->parameterTypes(); + TypePointers parameterTypes = functionType->parameterTypes(); vector> const& callArguments = _functionCall.arguments(); vector> const& callArgumentNames = _functionCall.names(); if (!functionType->takesArbitraryParameters()) diff --git a/solc/CommandLineInterface.cpp b/solc/CommandLineInterface.cpp index 376196e14..fe760fdf9 100644 --- a/solc/CommandLineInterface.cpp +++ b/solc/CommandLineInterface.cpp @@ -278,9 +278,9 @@ void CommandLineInterface::handleGasEstimation(string const& _contract) gas = GasEstimator::functionalEstimation(*items, entry, *it); FunctionType type(*it); cout << " " << it->name() << "("; - auto end = type.parameterTypes().end(); - for (auto it = type.parameterTypes().begin(); it != end; ++it) - cout << (*it)->toString() << (it + 1 == end ? "" : ","); + auto paramTypes = type.parameterTypes(); + for (auto it = paramTypes.begin(); it != paramTypes.end(); ++it) + cout << (*it)->toString() << (it + 1 == paramTypes.end() ? "" : ","); cout << "):\t" << gas << endl; } } diff --git a/solc/jsonCompiler.cpp b/solc/jsonCompiler.cpp index cb3eeefd4..a5d86aadd 100644 --- a/solc/jsonCompiler.cpp +++ b/solc/jsonCompiler.cpp @@ -103,9 +103,9 @@ Json::Value estimateGas(CompilerStack const& _compiler, string const& _contract) gas = GasEstimator::functionalEstimation(*items, entry, *it); FunctionType type(*it); string sig = it->name() + "("; - auto end = type.parameterTypes().end(); - for (auto it = type.parameterTypes().begin(); it != end; ++it) - sig += (*it)->toString() + (it + 1 == end ? "" : ","); + auto paramTypes = type.parameterTypes(); + for (auto it = paramTypes.begin(); it != paramTypes.end(); ++it) + sig += (*it)->toString() + (it + 1 == paramTypes.end() ? "" : ","); sig += ")"; internalFunctions[sig] = gasToJson(gas); } From 1f1b180d94e29c69ca46f2b3cb9a625f2b7d58d8 Mon Sep 17 00:00:00 2001 From: RJ Date: Wed, 9 Dec 2015 13:54:26 -0600 Subject: [PATCH 03/12] Create for_Ze_Devs.md tentative means to get a dev environment set up for the compiler on OS X --- docs/for_Ze_Devs.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 docs/for_Ze_Devs.md diff --git a/docs/for_Ze_Devs.md b/docs/for_Ze_Devs.md new file mode 100644 index 000000000..67fd6f4c5 --- /dev/null +++ b/docs/for_Ze_Devs.md @@ -0,0 +1,31 @@ +## Preparing for Compiler Development on OS X + +# Requirements +- OS X Yosemite (10.10.5) +- Homebrew +- Xcode + +# Set up Homebrew +``` +brew update +brew install boost --c++11 # this takes a while +brew install cmake qt5 cryptopp miniupnpc leveldb gmp libmicrohttpd libjson-rpc-cpp +brew install llvm --HEAD --with-clang +``` + +# Clone source repo and run this script +``` +git clone --recursive https://github.com/ethereum/webthree-umbrella.git +webthree-helpers/scripts/ethupdate.sh --no-push --simple-pull --project solidity #update solidity repo +./webthree-helpers/scripts/ethbuild.sh --no-git --build-type Debug --project solidity --all --cores 4 -DFATDB=0 -DEVMJIT=0 -DETHASHCL=0 #install solidity +``` + +# Bringing it all together +clone your forked repo, then: + +``` +cd ~/webthree-helpers/solidity +mv build ../../yourForkedRepo +``` + +you are now ready to develop :) From dfea21209e991cc9f65d4d54c4665d234dadb081 Mon Sep 17 00:00:00 2001 From: RJ Date: Wed, 9 Dec 2015 13:57:05 -0600 Subject: [PATCH 04/12] Update for_Ze_Devs.md --- docs/for_Ze_Devs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/for_Ze_Devs.md b/docs/for_Ze_Devs.md index 67fd6f4c5..e5feff23d 100644 --- a/docs/for_Ze_Devs.md +++ b/docs/for_Ze_Devs.md @@ -1,4 +1,4 @@ -## Preparing for Compiler Development on OS X +### Preparing for Compiler Development on OS X # Requirements - OS X Yosemite (10.10.5) From 2385f2ffbc4350f1021b1aed6089861fb6261180 Mon Sep 17 00:00:00 2001 From: RJ Date: Wed, 9 Dec 2015 14:04:06 -0600 Subject: [PATCH 05/12] Update for_Ze_Devs.md --- docs/for_Ze_Devs.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/for_Ze_Devs.md b/docs/for_Ze_Devs.md index e5feff23d..757017861 100644 --- a/docs/for_Ze_Devs.md +++ b/docs/for_Ze_Devs.md @@ -10,14 +10,14 @@ brew update brew install boost --c++11 # this takes a while brew install cmake qt5 cryptopp miniupnpc leveldb gmp libmicrohttpd libjson-rpc-cpp -brew install llvm --HEAD --with-clang +brew install llvm --HEAD --with-clang #only required if you plan on using DEVMJIT ``` # Clone source repo and run this script ``` git clone --recursive https://github.com/ethereum/webthree-umbrella.git webthree-helpers/scripts/ethupdate.sh --no-push --simple-pull --project solidity #update solidity repo -./webthree-helpers/scripts/ethbuild.sh --no-git --build-type Debug --project solidity --all --cores 4 -DFATDB=0 -DEVMJIT=0 -DETHASHCL=0 #install solidity +./webthree-helpers/scripts/ethbuild.sh --no-git --build-type Debug --project solidity --all --cores 4 -DFATDB=0 -DEVMJIT=0 -DETHASHCL=0 #install solidity ``` # Bringing it all together From 8223abaf2074610c77b2f46b5f1c367c49195d31 Mon Sep 17 00:00:00 2001 From: RJ Date: Wed, 9 Dec 2015 20:45:17 -0600 Subject: [PATCH 06/12] Update for_Ze_Devs.md --- docs/for_Ze_Devs.md | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/docs/for_Ze_Devs.md b/docs/for_Ze_Devs.md index 757017861..2e2231757 100644 --- a/docs/for_Ze_Devs.md +++ b/docs/for_Ze_Devs.md @@ -8,16 +8,27 @@ # Set up Homebrew ``` brew update -brew install boost --c++11 # this takes a while -brew install cmake qt5 cryptopp miniupnpc leveldb gmp libmicrohttpd libjson-rpc-cpp -brew install llvm --HEAD --with-clang #only required if you plan on using DEVMJIT +brew install boost --c++11 # this takes a while +brew install cmake cryptopp miniupnpc leveldb gmp libmicrohttpd libjson-rpc-cpp +#for Mix IDE and Alethzero only +brew install xz d-bus +brew install llvm --HEAD --with-clang +brew install qt5 --with-d-bus # add --verbose if long waits with a stale screen drive you crazy as well ``` -# Clone source repo and run this script +# The Long Wait + +Run this if you plan on installing solidity only, ignore errors at the end as they relate only to Alethzero and Mix ``` git clone --recursive https://github.com/ethereum/webthree-umbrella.git webthree-helpers/scripts/ethupdate.sh --no-push --simple-pull --project solidity #update solidity repo -./webthree-helpers/scripts/ethbuild.sh --no-git --build-type Debug --project solidity --all --cores 4 -DFATDB=0 -DEVMJIT=0 -DETHASHCL=0 #install solidity +./webthree-helpers/scripts/ethbuild.sh --no-git --project solidity --all --cores 4 #install solidity +``` +if you opted to install Alethzero and Mix: +``` +git clone --recursive https://github.com/ethereum/webthree-umbrella.git +cd webthree-umbrella && mkdir -p build && cd build +cmake .. ``` # Bringing it all together From b344bbac5d7156562e9fed4beee08efa43f2c9b8 Mon Sep 17 00:00:00 2001 From: chriseth Date: Thu, 10 Dec 2015 11:35:54 +0100 Subject: [PATCH 07/12] Improved index page. --- docs/index.rst | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/docs/index.rst b/docs/index.rst index 92cf24e35..efe82ff9e 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,13 +1,34 @@ -Welcome to Solidity's documentation! -==================================== - -See also `Russian version (русский перевод) `_. +Solidity +======== Solidity is a high-level language whose syntax is similar to that of JavaScript and it is designed to compile to code for the Ethereum Virtual Machine. As you will see, it is quite easy to create contracts for voting, crowdfunding, blind auctions, multi-signature wallets and more. +.. note:: + The best way to try out Solidity right now is using the + `Browser-Based Compiler `_ + (it can take a while to load, please be patient). + +Useful links +------------ + +* `Ethereum `_ + +* `Browser-Based Compiler `_ + +* `Changelog `_ + +* `Story Backlog `_ + +* `Source Code `_ + +* `Gitter Chat `_ + +Language Documentation +---------------------- + On the next pages, we will first see a :ref:`simple smart contract ` written in Solidity followed by the basics about :ref:`blockchains ` and the :ref:`Ethereum Virtual Machine `. @@ -22,19 +43,18 @@ The last and most extensive section will cover all aspects of Solidity in depth. If you still have questions or ideas for improving Solidity or this documentation, please feel free to come to out `gitter channel `_. -Index and Search -================== - -* :ref:`genindex` -* :ref:`search` +See also `Russian version (русский перевод) `_. Contents ======== +:ref:`Keyword Index `, :ref:`Search Page ` + .. toctree:: :maxdepth: 2 introduction-to-smart-contracts.rst + installing-solidity.rst solidity-by-example.rst solidity-in-depth.rst style-guide.rst From 3ce73e0bd34f1de8874e39ee6511b72728b869ed Mon Sep 17 00:00:00 2001 From: chriseth Date: Thu, 10 Dec 2015 12:22:53 +0100 Subject: [PATCH 08/12] Added build guide. --- docs/for_Ze_Devs.md | 42 ----------- docs/installing-solidity.rst | 140 +++++++++++++++++++++++++++++++++++ 2 files changed, 140 insertions(+), 42 deletions(-) delete mode 100644 docs/for_Ze_Devs.md create mode 100644 docs/installing-solidity.rst diff --git a/docs/for_Ze_Devs.md b/docs/for_Ze_Devs.md deleted file mode 100644 index 2e2231757..000000000 --- a/docs/for_Ze_Devs.md +++ /dev/null @@ -1,42 +0,0 @@ -### Preparing for Compiler Development on OS X - -# Requirements -- OS X Yosemite (10.10.5) -- Homebrew -- Xcode - -# Set up Homebrew -``` -brew update -brew install boost --c++11 # this takes a while -brew install cmake cryptopp miniupnpc leveldb gmp libmicrohttpd libjson-rpc-cpp -#for Mix IDE and Alethzero only -brew install xz d-bus -brew install llvm --HEAD --with-clang -brew install qt5 --with-d-bus # add --verbose if long waits with a stale screen drive you crazy as well -``` - -# The Long Wait - -Run this if you plan on installing solidity only, ignore errors at the end as they relate only to Alethzero and Mix -``` -git clone --recursive https://github.com/ethereum/webthree-umbrella.git -webthree-helpers/scripts/ethupdate.sh --no-push --simple-pull --project solidity #update solidity repo -./webthree-helpers/scripts/ethbuild.sh --no-git --project solidity --all --cores 4 #install solidity -``` -if you opted to install Alethzero and Mix: -``` -git clone --recursive https://github.com/ethereum/webthree-umbrella.git -cd webthree-umbrella && mkdir -p build && cd build -cmake .. -``` - -# Bringing it all together -clone your forked repo, then: - -``` -cd ~/webthree-helpers/solidity -mv build ../../yourForkedRepo -``` - -you are now ready to develop :) diff --git a/docs/installing-solidity.rst b/docs/installing-solidity.rst new file mode 100644 index 000000000..83c7ac18e --- /dev/null +++ b/docs/installing-solidity.rst @@ -0,0 +1,140 @@ +################### +Installing Solidity +################### + +Browser-Solidity +================ + +If you just want to try Solidity for small contracts, you +can try `browser-solidity `_ +which does not need any installation. If you want to use it +without connection to the Internet, you can also just save the page +locally or clone http://github.com/chriseth/browser-solidity. + +NPM / node.js +============= + +This is probably the most portable and most convenient way to install Solidity locally. + +A platform-independent JavaScript library is provided by compiling the C++ source +into JavaScript using Emscripten for browser-solidity and there is also an NPM +package available. + +To install it, simply use + +:: + + npm install solc + +Details about the usage of the nodejs package can be found in the +`repository `_. + +Binary Packages +=============== + +Binary packages of Solidity together with its IDE Mix are available through +the `C++ bundle `_ of +Ethereum. + +Building from Source +==================== + +Building Solidity is quite similar on MacOS X, Ubuntu and probably other Unices. +This guide starts explaining how to install the dependencies for each platform +and then shows how to build Solidity itself. + +MacOS X +------- + + +Requirements: + +- OS X Yosemite (10.10.5) +- Homebrew +- Xcode + +Set up Homebrew: + +.. code-block:: bash + + brew update + brew install boost --c++11 # this takes a while + brew install cmake cryptopp miniupnpc leveldb gmp libmicrohttpd libjson-rpc-cpp + # For Mix IDE and Alethzero only + brew install xz d-bus + brew install llvm --HEAD --with-clang + brew install qt5 --with-d-bus # add --verbose if long waits with a stale screen drive you crazy as well + +Ubuntu +------ + +Below are the build instructions for the latest versions of Ubuntu. The best +supported platform as of December 2014 is Ubuntu 14.04, 64 bit, with at least 2 +GB RAM. All our tests are done with this version. Community contributions for +other versions are welcome! + +Install dependencies: + +Before you can build the source, you need several tools and dependencies for the application to get started. + +First, update your repositories. Not all packages are provided in the main +Ubuntu repository, those you'll get from the Ethereum PPA and the LLVM archive. + +.. note:: + + Ubuntu 14.04 users, you'll need the latest version of cmake. For this, use: + `sudo apt-add-repository ppa:george-edison55/cmake-3.x` + +Now add all the rest: + +.. code-block:: bash + + sudo apt-get -y update + sudo apt-get -y install language-pack-en-base + sudo dpkg-reconfigure locales + sudo apt-get -y install software-properties-common + sudo add-apt-repository -y ppa:ethereum/ethereum + sudo add-apt-repository -y ppa:ethereum/ethereum-dev + sudo apt-get -y update + sudo apt-get -y upgrade + +Use the following command to add the develop packages: + +.. code-block:: bash + + sudo apt-get -y install build-essential git cmake libboost-all-dev libgmp-dev libleveldb-dev libminiupnpc-dev libreadline-dev libncurses5-dev libcurl4-openssl-dev libcryptopp-dev libjson-rpc-cpp-dev libmicrohttpd-dev libjsoncpp-dev libedit-dev libz-dev + +Building +-------- + +Run this if you plan on installing Solidity only, ignore errors at the end as +they relate only to Alethzero and Mix + +.. code-block:: bash + + git clone --recursive https://github.com/ethereum/webthree-umbrella.git + cd webthree-umbrella + ./webthree-helpers/scripts/ethupdate.sh --no-push --simple-pull --project solidity # update Solidity repo + ./webthree-helpers/scripts/ethbuild.sh --no-git --project solidity --all --cores 4 # build Solidity + +If you opted to install Alethzero and Mix: + +.. code-block:: bash + + git clone --recursive https://github.com/ethereum/webthree-umbrella.git + cd webthree-umbrella && mkdir -p build && cd build + cmake .. + +If you want to help developing Solidity, +you should fork Solidity and add your personal fork as a second remote: + +.. code-block:: bash + + cd webthree-umbrella/solidity + git remote add personal git@github.com:username/solidity.git + +Note that webthree-umbrella uses submodules, so solidity is its own git +repository, but its settings are not stored in `.git/config`, but in +`webthree-umbrella/.git/modules/solidity/config`. + + From 9fd72008472363fb15f9c7751899aa0b67f2e129 Mon Sep 17 00:00:00 2001 From: chriseth Date: Thu, 10 Dec 2015 12:34:46 +0100 Subject: [PATCH 09/12] Overflow check. --- docs/frequently-asked-questions.rst | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/frequently-asked-questions.rst b/docs/frequently-asked-questions.rst index 94491381c..fd68aa11d 100644 --- a/docs/frequently-asked-questions.rst +++ b/docs/frequently-asked-questions.rst @@ -742,6 +742,20 @@ If you want to send 20 Ether from a contract to the address `x`, you use `x.send Here, `x` can be a plain address or a contract. If the contract already explicitly defines a function `send` (and thus overwrites the special function), you can use `address(x).send(20 ether);`. +What does the following strange check do in the Custom Token contract? +====================================================================== + +:: + + if (balanceOf[_to] + _value < balanceOf[_to]) throw; + +Integers in Solidity (and most other machine-related programming languages) are restricted to a certain range. +For `uint256`, this is `0` up to `2**256 - 1`. If the result of some operation on those numbers +does not fit inside this range, it is truncated. These truncations can have +`serious consequences `_, so code like the one +above is necessary to avoid certain attacks. + + More Questions? =============== From 7dccca5ca95f35384007b31f0c1b26586e6e354d Mon Sep 17 00:00:00 2001 From: chriseth Date: Thu, 10 Dec 2015 13:02:46 +0100 Subject: [PATCH 10/12] Removed obsolete dockerfile. --- solc/docker_emscripten/Dockerfile | 70 ------------------------------- 1 file changed, 70 deletions(-) delete mode 100644 solc/docker_emscripten/Dockerfile diff --git a/solc/docker_emscripten/Dockerfile b/solc/docker_emscripten/Dockerfile deleted file mode 100644 index 881f602d9..000000000 --- a/solc/docker_emscripten/Dockerfile +++ /dev/null @@ -1,70 +0,0 @@ -FROM ubuntu:14.04 - -ENV DEBIAN_FRONTEND noninteractive -RUN apt-get update -RUN apt-get upgrade -y - -# Ethereum dependencies -RUN apt-get install -qy build-essential git cmake libcurl4-openssl-dev wget -RUN apt-get install -qy automake libtool yasm scons - -RUN useradd -ms /bin/bash user -USER user -ENV HOME /home/user -WORKDIR /home/user - -# Emscripten SDK -RUN wget -c https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-portable.tar.gz -RUN tar xzf emsdk-portable.tar.gz -WORKDIR /home/user/emsdk_portable -RUN ./emsdk update && ./emsdk install latest && ./emsdk activate latest -ENV PATH $PATH:/home/user/emsdk_portable:/home/user/emsdk_portable/clang/fastcomp/build_master_64/bin:/home/user/emsdk_portable/emscripten/master - -USER root -RUN apt-get install -qy nodejs -USER user -RUN sed -i "s/NODE_JS = 'node'/NODE_JS = 'nodejs'/g" ~/.emscripten - -# CryptoPP -WORKDIR /home/user -RUN git clone https://github.com/mmoss/cryptopp.git -WORKDIR /home/user/cryptopp -RUN emcmake cmake -DCRYPTOPP_LIBRARY_TYPE=STATIC -DCRYPTOPP_RUNTIME_TYPE=STATIC && emmake make -j 4 -RUN ln -s . src/cryptopp - -# Boost -WORKDIR /home/user -RUN wget 'http://downloads.sourceforge.net/project/boost/boost/1.57.0/boost_1_57_0.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fboost%2Ffiles%2Fboost%2F1.57.0%2F&ts=1421887207&use_mirror=cznic' -O boost_1_57_0.tar.bz2 -RUN tar xjf boost_1_57_0.tar.bz2 -WORKDIR /home/user/boost_1_57_0 -RUN ./bootstrap.sh --with-libraries=thread,system,regex -RUN sed -i 's/using gcc ;/using gcc : : \/home\/user\/emsdk_portable\/emscripten\/master\/em++ ;/g' ./project-config.jam -RUN sed -i 's/$(archiver\[1\])/\/home\/user\/emsdk_portable\/emscripten\/master\/emar/g' ./tools/build/src/tools/gcc.jam -RUN sed -i 's/$(ranlib\[1\])/\/home\/user\/emsdk_portable\/emscripten\/master\/emranlib/g' ./tools/build/src/tools/gcc.jam -RUN ./b2 link=static variant=release threading=single runtime-link=static thread system regex - -# Json-CPP -WORKDIR /home/user -RUN git clone https://github.com/open-source-parsers/jsoncpp.git -WORKDIR /home/user/jsoncpp -RUN emcmake cmake -DJSONCPP_LIB_BUILD_STATIC=ON -DJSONCPP_LIB_BUILD_SHARED=OFF -DJSONCPP_WITH_TESTS=OFF -DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF -G "Unix Makefiles" . -RUN emmake make - -## Build soljs -WORKDIR /home/user -ADD https://api.github.com/repos/ethereum/cpp-ethereum/git/refs/heads/develop unused.txt -RUN git clone --depth=1 https://github.com/ethereum/cpp-ethereum -WORKDIR /home/user/cpp-ethereum -RUN git config --global user.email "me@example.com" -RUN git config --global user.name "Jane Doe" -ADD https://api.github.com/repos/chriseth/cpp-ethereum/git/refs/heads/solidity-js unused2.txt -RUN git remote add -f solidityjs https://github.com/chriseth/cpp-ethereum -# TODO this should be a proper merge but somehow causes problems -# NOTE that we only get the latest commit of that branch -RUN git cherry-pick solidityjs/solidity-js -RUN emcmake cmake -DMINER=0 -DETHKEY=0 -DSERPENT=0 -DTESTS=0 -DETHASHCL=0 -DJSCONSOLE=0 -DEVMJIT=0 -DETH_STATIC=1 -DSOLIDITY=1 -DGUI=0 -DCMAKE_CXX_COMPILER=/home/user/emsdk_portable/emscripten/master/em++ -DCMAKE_C_COMPILER=/home/user/emsdk_portable/emscripten/master/emcc -RUN emmake make -j 6 soljson - -WORKDIR /home/user/cpp-ethereum/solc -ENTRYPOINT cat soljson.js - From c7ec85754a53230945bd2ea57519f4fd7f12479c Mon Sep 17 00:00:00 2001 From: chriseth Date: Thu, 10 Dec 2015 17:30:23 +0100 Subject: [PATCH 11/12] Pygments highlighting rules for Solidity. --- docs/conf.py | 8 +++- docs/utils/SolidityLexer.py | 85 +++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 docs/utils/SolidityLexer.py diff --git a/docs/conf.py b/docs/conf.py index 7f5d4514f..48664344b 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -19,7 +19,11 @@ import os # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.insert(0, os.path.abspath('.')) + +def setup(sphinx): + sys.path.insert(0, os.path.abspath('./utils')) + from SolidityLexer import SolidityLexer + sphinx.add_lexer('Solidity', SolidityLexer()) # -- General configuration ------------------------------------------------ @@ -88,7 +92,7 @@ exclude_patterns = ['_build'] # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' -highlight_language = 'javascript' +highlight_language = 'Solidity' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] diff --git a/docs/utils/SolidityLexer.py b/docs/utils/SolidityLexer.py new file mode 100644 index 000000000..d05c7b0cc --- /dev/null +++ b/docs/utils/SolidityLexer.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- + +import re +import copy + +from pygments.lexer import RegexLexer, ExtendedRegexLexer, bygroups, using, \ + include, this +from pygments.token import Text, Comment, Operator, Keyword, Name, String, \ + Number, Other, Punctuation, Literal + +__all__ = ['SolidityLexer'] + +class SolidityLexer(RegexLexer): + name = "Solidity" + aliases = ['sol', 'solidity'] + filenames = ['*.sol'] + mimetypes = [] + flags = re.DOTALL + tokens = { + 'commentsandwhitespace': [ + (r'\s+', Text), + (r'