swift-pyrite 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/lib/swift/pyrite/parser.rb +1 -1
- data/lib/swift/pyrite/transformer.rb +23 -8
- data/lib/swift/pyrite/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 774c7aeda0acea26d2d5520472ae5e42fe297c4c
|
4
|
+
data.tar.gz: 99201a8a43fca9e649a5fee48634c7f91fa340e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 12ff99b918c63369bed43da53b7084237178bfd937c32e4cda48d8789123c216603dc19c8312992fb7e57a8c48e05af7270b54cae247ff1449380668cfaab283
|
7
|
+
data.tar.gz: d787efee670ccfa8316d7dc1b9eb4fb0f388641dbf64150c19628e520866c10bd10b524f9c1b03bbaafd0298b02a2100f997da67377f0841f044fc88875de79e
|
data/.gitignore
CHANGED
data/lib/swift/pyrite/parser.rb
CHANGED
@@ -13,7 +13,7 @@ module Swift
|
|
13
13
|
rule(:ignore_before) { block_comment | comment | (str('protocol').absent? >> any) }
|
14
14
|
|
15
15
|
rule(:generic) { str('<') >> type >> str('>') }
|
16
|
-
rule(:type) { (str('[').maybe >> type_name >> generic.maybe >> str(']').maybe)
|
16
|
+
rule(:type) { (str('[').maybe.as(:bracketed) >> type_name.as(:type_name) >> generic.as(:generic).maybe >> str(']').maybe) }
|
17
17
|
|
18
18
|
rule(:type_name) { identifier >> match('[?!]').maybe }
|
19
19
|
|
@@ -15,6 +15,19 @@ module Swift
|
|
15
15
|
"Fake#{protocol_name}"
|
16
16
|
end
|
17
17
|
|
18
|
+
def unwind_type exp
|
19
|
+
output = []
|
20
|
+
output << exp[:type_name]
|
21
|
+
if exp[:generic]
|
22
|
+
output << "<#{unwind_type(exp[:generic])}>"
|
23
|
+
end
|
24
|
+
if exp[:bracketed]
|
25
|
+
output.unshift('[')
|
26
|
+
output << ']'
|
27
|
+
end
|
28
|
+
output.join
|
29
|
+
end
|
30
|
+
|
18
31
|
def generate
|
19
32
|
output = []
|
20
33
|
output << "class #{struct_name}: #{protocol_name} {"
|
@@ -33,11 +46,11 @@ module Swift
|
|
33
46
|
(@ast[:expressions] || []).map do |exp|
|
34
47
|
next if exp[:type] != 'var'
|
35
48
|
e = exp[:var_decl]
|
36
|
-
name, type = e[:name], e
|
49
|
+
name, type = e[:name], unwind_type(e)
|
37
50
|
output << " self.#{name} = #{name}"
|
38
51
|
vars << "#{name}: #{type}"
|
39
52
|
end
|
40
|
-
if output.size > 0
|
53
|
+
if output.size > 0
|
41
54
|
output.unshift(" init(#{vars.join(', ')}) {")
|
42
55
|
output << " }"
|
43
56
|
end
|
@@ -56,7 +69,7 @@ module Swift
|
|
56
69
|
|
57
70
|
def copy_variable(exp)
|
58
71
|
name = exp[:name]
|
59
|
-
type = exp
|
72
|
+
type = unwind_type(exp)
|
60
73
|
" var #{name}: #{type}"
|
61
74
|
end
|
62
75
|
|
@@ -81,7 +94,9 @@ module Swift
|
|
81
94
|
output = []
|
82
95
|
output << " var #{exp[:name]}CallCount: Int = 0"
|
83
96
|
unless exp[:arguments].nil?
|
84
|
-
types = exp[:arguments].map
|
97
|
+
types = exp[:arguments].map do |a|
|
98
|
+
unwind_type(a)
|
99
|
+
end
|
85
100
|
tupleType = "(" + types.join(", ") + ")"
|
86
101
|
output << " var #{exp[:name]}CalledWith: [#{tupleType}] = [#{tupleType}]()"
|
87
102
|
end
|
@@ -94,12 +109,12 @@ module Swift
|
|
94
109
|
def tuple(exp)
|
95
110
|
results = exp.map do |item|
|
96
111
|
if item[:name]
|
97
|
-
"#{item[:name]}: #{item
|
112
|
+
"#{item[:name]}: #{unwind_type(item)}"
|
98
113
|
else
|
99
|
-
item
|
114
|
+
unwind_type(item)
|
100
115
|
end
|
101
116
|
end
|
102
|
-
if results.count > 1
|
117
|
+
if results.count > 1
|
103
118
|
"(#{results.join(', ')})"
|
104
119
|
else
|
105
120
|
results.join
|
@@ -110,7 +125,7 @@ module Swift
|
|
110
125
|
return if exp.nil?
|
111
126
|
output = []
|
112
127
|
exp.each do |arg|
|
113
|
-
output << "#{arg[:name]}: #{arg
|
128
|
+
output << "#{arg[:name]}: #{unwind_type(arg)}"
|
114
129
|
end
|
115
130
|
output.join(", ")
|
116
131
|
end
|
data/lib/swift/pyrite/version.rb
CHANGED