1 | let {isArray} = require('underscore')
|
2 | let patterns = require('./patterns')
|
3 | let values = require('./values')
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 | function parseType(val) {
|
11 | let baseType = patterns.solidityTypeNoLength.exec(val)
|
12 | let bitLength = patterns.typeN.exec(val)
|
13 | let dimensions = val.match(patterns.solidityDimensions)
|
14 | let hasDimensions
|
15 | let hasDynamicDimensions
|
16 |
|
17 | if (baseType !== null) {
|
18 | baseType = baseType[1]
|
19 | }
|
20 |
|
21 | if (bitLength !== null) {
|
22 | bitLength = parseInt(bitLength[1], 10)
|
23 | }
|
24 |
|
25 |
|
26 |
|
27 | if (dimensions !== null) {
|
28 | dimensions = dimensions.map(item => {
|
29 | let op = {}
|
30 | let digit = item.match(patterns.solidityDimensionDigit)
|
31 |
|
32 |
|
33 | op.dynamic = item === values.solidity.dimensionsDynamic
|
34 |
|
35 |
|
36 | if (digit !== null) {
|
37 | op.length = parseInt(digit[0], 10)
|
38 | }
|
39 |
|
40 | return op
|
41 | })
|
42 | }
|
43 |
|
44 |
|
45 | hasDimensions = isArray(dimensions) === true
|
46 |
|
47 |
|
48 | hasDynamicDimensions =
|
49 | hasDimensions === true &&
|
50 | isArray(dimensions) === true &&
|
51 | dimensions.some(item => item.dynamic === true)
|
52 |
|
53 | return {
|
54 | baseType,
|
55 | bitLength,
|
56 | dimensions,
|
57 | hasDimensions,
|
58 | hasDynamicDimensions
|
59 | }
|
60 | }
|
61 |
|
62 | module.exports = {
|
63 | parseType
|
64 | }
|