2828#include < QObject>
2929#include < QThread>
3030#include < QHash>
31+ #include < QMetaEnum>
3132#include < libdevcore/Common.h>
3233#include < libdevcore/Guards.h>
3334#include < libevmasm/Assembly.h>
@@ -130,39 +131,60 @@ struct SourceMap
130131using SourceMaps = QMap<QString, SourceMap>; // by source id
131132using GasCostsMaps = QMap<QString, QVariantList>; // gas cost by contract name
132133
133- class GasMapWrapper : public QObject
134- {
135- Q_OBJECT
136-
137- Q_PROPERTY (GasCostsMaps gasMaps MEMBER m_gasMaps CONSTANT)
138-
139- public:
140- GasMapWrapper (QObject* _parent = nullptr ): QObject(_parent){}
141- void push (QString _source, int _start, int _end, QString _value, bool _isInfinite);
142- bool contains (QString _key);
143- void insert (QString _source, QVariantList _variantList);
144- QVariantList gasCostsByDocId (QString _source);
145-
146- private:
147- GasCostsMaps m_gasMaps;
148- };
149-
150134class GasMap : public QObject
151135{
152136 Q_OBJECT
153-
137+ Q_ENUMS (type)
154138 Q_PROPERTY (int start MEMBER m_start CONSTANT)
155139 Q_PROPERTY (int end MEMBER m_end CONSTANT)
156140 Q_PROPERTY (QString gas MEMBER m_gas CONSTANT)
157141 Q_PROPERTY (bool isInfinite MEMBER m_isInfinite CONSTANT)
142+ Q_PROPERTY (QString codeBlockType READ codeBlockType CONSTANT)
158143
159144public:
160- GasMap (int _start, int _end, QString _gas, bool _isInfinite, QObject* _parent): QObject(_parent), m_start(_start), m_end(_end), m_gas(_gas), m_isInfinite(_isInfinite) {}
145+
146+ enum type
147+ {
148+ Statement,
149+ Function,
150+ Constructor
151+ };
152+
153+ GasMap (int _start, int _end, QString _gas, bool _isInfinite, type _type, QObject* _parent): QObject(_parent), m_start(_start), m_end(_end), m_gas(_gas), m_isInfinite(_isInfinite), m_type(_type) {}
161154
162155 int m_start;
163156 int m_end;
164157 QString m_gas;
165158 bool m_isInfinite;
159+ type m_type;
160+
161+ QString codeBlockType () const
162+ {
163+ QMetaEnum units = staticMetaObject.enumerator (staticMetaObject.indexOfEnumerator (" type" ));
164+ if (m_type)
165+ {
166+ const char * key = units.valueToKey (m_type);
167+ return QString (key).toLower ();
168+ }
169+ return QString (" " );
170+ }
171+ };
172+
173+ class GasMapWrapper : public QObject
174+ {
175+ Q_OBJECT
176+
177+ Q_PROPERTY (GasCostsMaps gasMaps MEMBER m_gasMaps CONSTANT)
178+
179+ public:
180+ GasMapWrapper (QObject* _parent = nullptr ): QObject(_parent){}
181+ void push (QString _source, int _start, int _end, QString _value, bool _isInfinite, GasMap::type _type);
182+ bool contains (QString _key);
183+ void insert (QString _source, QVariantList _variantList);
184+ QVariantList gasCostsByDocId (QString _source);
185+
186+ private:
187+ GasCostsMaps m_gasMaps;
166188};
167189
168190// / Code compilation model. Compiles contracts in background an provides compiled contract data
@@ -177,6 +199,7 @@ class CodeModel: public QObject
177199 Q_PROPERTY (QVariantMap contracts READ contracts NOTIFY codeChanged)
178200 Q_PROPERTY (bool compiling READ isCompiling NOTIFY stateChanged)
179201 Q_PROPERTY (bool hasContract READ hasContract NOTIFY codeChanged)
202+ Q_PROPERTY (bool optimizeCode MEMBER m_optimizeCode WRITE setOptimizeCode)
180203
181204 // / @returns latest compilation results for contracts
182205 QVariantMap contracts () const ;
@@ -209,6 +232,7 @@ class CodeModel: public QObject
209232 void gasEstimation (solidity::CompilerStack const & _cs);
210233 // / Gas cost by doc id
211234 Q_INVOKABLE QVariantList gasCostByDocumentId (QString const & _documentId) const ;
235+ Q_INVOKABLE void setOptimizeCode (bool _value);
212236
213237signals:
214238 // / Emited on compilation state change
@@ -253,11 +277,10 @@ public slots:
253277 std::map<QString, dev::bytes> m_compiledContracts; // by name
254278 dev::Mutex x_pendingContracts;
255279 std::map<QString, QString> m_pendingContracts; // name to source
280+ bool m_optimizeCode = false ;
256281 friend class BackgroundWorker ;
257282};
258283
259284}
260285
261286}
262-
263- // Q_DECLARE_METATYPE(dev::mix::GasMap)
0 commit comments