tealrb 0.1.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/tealrb/cmd_line/teal2tealrb.rb +8 -11
- data/lib/tealrb/contract.rb +15 -8
- data/lib/tealrb/if_block.rb +4 -4
- data/lib/tealrb/opcode_modules.rb +19 -1
- data/lib/tealrb/rewriters.rb +21 -0
- metadata +59 -31
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: def52b90a6225a1e78408d4b4ec6d65c7504d03a5512bcde9b03cad284bf34df
|
|
4
|
+
data.tar.gz: d4d23914a76b46bdf6ec45a7c9f087262531d26499967770b6965f63508a9e5e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: cfbfc5ebd26982b646a8a1d1de65a741a5e5711d9cccf822a3abcf1698b42977fa309d409c95b569521b289a4bf73b334f574bf3fe113c8616b02c662c7da60c
|
|
7
|
+
data.tar.gz: 7996f80823ca5cdac127207bef2899d42fe6f668b2d0d5a813c9d1d141b5521b703ef177621fe0cc64a12f7b8365bb65c604d8cf0f0158595c952e42be80e135
|
|
@@ -11,15 +11,9 @@ module TEALrb
|
|
|
11
11
|
line.strip!
|
|
12
12
|
next if line[/^#/]
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
next
|
|
18
|
-
elsif line[%r{//.*}]
|
|
19
|
-
comment = line[%r{(?<=//).*}]
|
|
20
|
-
line.sub!(%r{//.*}, '')
|
|
21
|
-
inline_comment = %(comment("#{comment}", inline: true))
|
|
22
|
-
end
|
|
14
|
+
comment = line[%r{//.*}]
|
|
15
|
+
comment&.sub!('//', '# //')
|
|
16
|
+
line.sub!(%r{//.*}, '')
|
|
23
17
|
|
|
24
18
|
opcode = line.split.first
|
|
25
19
|
|
|
@@ -55,8 +49,11 @@ module TEALrb
|
|
|
55
49
|
line = "#{opcode} #{args.join(', ')}"
|
|
56
50
|
end
|
|
57
51
|
|
|
58
|
-
|
|
59
|
-
|
|
52
|
+
if line.empty?
|
|
53
|
+
output.puts comment
|
|
54
|
+
else
|
|
55
|
+
output.puts "#{line} #{comment}"
|
|
56
|
+
end
|
|
60
57
|
end
|
|
61
58
|
|
|
62
59
|
output.string
|
data/lib/tealrb/contract.rb
CHANGED
|
@@ -70,6 +70,12 @@ module TEALrb
|
|
|
70
70
|
def initialize
|
|
71
71
|
@teal = TEAL.new ["#pragma version #{self.class.version}"]
|
|
72
72
|
|
|
73
|
+
self.class.subroutines.each_key do |name|
|
|
74
|
+
define_singleton_method(name) do |*_args|
|
|
75
|
+
callsub(name)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
73
79
|
self.class.subroutines.each do |name, blk|
|
|
74
80
|
define_subroutine name, blk
|
|
75
81
|
end
|
|
@@ -112,6 +118,10 @@ module TEALrb
|
|
|
112
118
|
def define_subroutine(name, definition)
|
|
113
119
|
@teal.set_as_current
|
|
114
120
|
|
|
121
|
+
define_singleton_method(name) do |*_args|
|
|
122
|
+
callsub(name)
|
|
123
|
+
end
|
|
124
|
+
|
|
115
125
|
@teal << 'b main' unless @teal.include? 'b main'
|
|
116
126
|
|
|
117
127
|
label(name) # add teal label
|
|
@@ -134,10 +144,6 @@ module TEALrb
|
|
|
134
144
|
new_source = "#{pre_string.string}#{new_source}retsub"
|
|
135
145
|
eval_tealrb(new_source, debug_context: "subroutine: #{name}")
|
|
136
146
|
|
|
137
|
-
define_singleton_method(name) do |*_args|
|
|
138
|
-
callsub(name)
|
|
139
|
-
end
|
|
140
|
-
|
|
141
147
|
nil
|
|
142
148
|
end
|
|
143
149
|
|
|
@@ -145,11 +151,12 @@ module TEALrb
|
|
|
145
151
|
# @param content [String] content of the comment
|
|
146
152
|
# @param inline [Boolean] whether the comment should be on the previous TEAL line
|
|
147
153
|
def comment(content, inline: false)
|
|
154
|
+
content = " #{content}" unless content[0] == ' '
|
|
148
155
|
if inline
|
|
149
156
|
last_line = @teal.pop
|
|
150
|
-
@teal << "#{last_line}
|
|
157
|
+
@teal << "#{last_line} //#{content}"
|
|
151
158
|
else
|
|
152
|
-
@teal << "
|
|
159
|
+
@teal << "//#{content}"
|
|
153
160
|
end
|
|
154
161
|
end
|
|
155
162
|
|
|
@@ -184,7 +191,7 @@ module TEALrb
|
|
|
184
191
|
|
|
185
192
|
def rewrite_with_rewriter(string, rewriter)
|
|
186
193
|
process_source = RuboCop::ProcessedSource.new(string, RUBY_VERSION[/\d\.\d/].to_f)
|
|
187
|
-
rewriter.new.rewrite(process_source
|
|
194
|
+
rewriter.new.rewrite(process_source)
|
|
188
195
|
end
|
|
189
196
|
|
|
190
197
|
def rewrite(string, method_rewriter: false)
|
|
@@ -194,7 +201,7 @@ module TEALrb
|
|
|
194
201
|
puts ''
|
|
195
202
|
end
|
|
196
203
|
|
|
197
|
-
[ComparisonRewriter, IfRewriter, OpRewriter, AssignRewriter].each do |rw|
|
|
204
|
+
[CommentRewriter, ComparisonRewriter, IfRewriter, OpRewriter, AssignRewriter].each do |rw|
|
|
198
205
|
string = rewrite_with_rewriter(string, rw)
|
|
199
206
|
end
|
|
200
207
|
|
data/lib/tealrb/if_block.rb
CHANGED
|
@@ -6,16 +6,16 @@ module TEALrb
|
|
|
6
6
|
attr_accessor :id
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
@id =
|
|
9
|
+
@id = {}.compare_by_identity
|
|
10
10
|
|
|
11
11
|
def initialize(teal, _cond, &blk)
|
|
12
|
+
self.class.id[teal] ||= 0
|
|
12
13
|
@teal = teal
|
|
13
14
|
@else_count = 0
|
|
14
|
-
@id = self.class.id
|
|
15
|
+
@id = self.class.id[@teal]
|
|
15
16
|
@end_label = "if#{@id}_end:"
|
|
16
17
|
|
|
17
|
-
|
|
18
|
-
self.class.id += 1
|
|
18
|
+
self.class.id[@teal] += 1
|
|
19
19
|
|
|
20
20
|
@teal << "bz if#{@id}_else0"
|
|
21
21
|
blk.call
|
|
@@ -33,7 +33,7 @@ module TEALrb
|
|
|
33
33
|
private
|
|
34
34
|
|
|
35
35
|
def txn_type_int(type)
|
|
36
|
-
TEALrb::TEAL.current[Thread.current] << "int
|
|
36
|
+
TEALrb::TEAL.current[Thread.current] << "int #{type}"
|
|
37
37
|
end
|
|
38
38
|
end
|
|
39
39
|
|
|
@@ -664,6 +664,20 @@ module TEALrb
|
|
|
664
664
|
end
|
|
665
665
|
end
|
|
666
666
|
|
|
667
|
+
class TxnArrayIndex
|
|
668
|
+
include Opcodes
|
|
669
|
+
include TxnFields
|
|
670
|
+
|
|
671
|
+
def initialize(index)
|
|
672
|
+
@index = index
|
|
673
|
+
end
|
|
674
|
+
|
|
675
|
+
def opcode(field)
|
|
676
|
+
@teal = TEALrb::TEAL.current[Thread.current]
|
|
677
|
+
txna field, @index
|
|
678
|
+
end
|
|
679
|
+
end
|
|
680
|
+
|
|
667
681
|
module Txna
|
|
668
682
|
extend Opcodes
|
|
669
683
|
extend TxnFields
|
|
@@ -672,6 +686,10 @@ module TEALrb
|
|
|
672
686
|
@teal = TEALrb::TEAL.current[Thread.current]
|
|
673
687
|
txna field, index
|
|
674
688
|
end
|
|
689
|
+
|
|
690
|
+
def self.[](index)
|
|
691
|
+
TxnArrayIndex.new(index)
|
|
692
|
+
end
|
|
675
693
|
end
|
|
676
694
|
|
|
677
695
|
module Global
|
data/lib/tealrb/rewriters.rb
CHANGED
|
@@ -4,6 +4,27 @@ module TEALrb
|
|
|
4
4
|
module Rewriters
|
|
5
5
|
class Rewriter < Parser::TreeRewriter
|
|
6
6
|
include RuboCop::AST::Traversal
|
|
7
|
+
|
|
8
|
+
def rewrite(processed_source)
|
|
9
|
+
@comments = processed_source.comments
|
|
10
|
+
super(processed_source.buffer, processed_source.ast)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class CommentRewriter < Rewriter
|
|
15
|
+
def process(_)
|
|
16
|
+
@comments.each do |comment|
|
|
17
|
+
line = @source_rewriter.source_buffer.source_lines[comment.loc.expression.line - 1].strip
|
|
18
|
+
|
|
19
|
+
next unless comment.inline? && comment.text[%r{^#\s*//}]
|
|
20
|
+
|
|
21
|
+
inline_comment = line[/^#/].nil?
|
|
22
|
+
content = comment.text.sub('# ', '')
|
|
23
|
+
content.sub!('//', '')
|
|
24
|
+
|
|
25
|
+
replace comment.loc.expression, "; comment(%q(#{content}), inline: #{inline_comment})"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
7
28
|
end
|
|
8
29
|
|
|
9
30
|
class MethodRewriter < Rewriter
|
metadata
CHANGED
|
@@ -1,113 +1,141 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: tealrb
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1
|
|
4
|
+
version: 0.3.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Joe Polny
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-05-
|
|
11
|
+
date: 2022-05-15 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: method_source
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- - "
|
|
17
|
+
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '0'
|
|
19
|
+
version: '1.0'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- - "
|
|
24
|
+
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '0'
|
|
26
|
+
version: '1.0'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: rubocop
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- - "
|
|
31
|
+
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '
|
|
33
|
+
version: '1.27'
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- - "
|
|
38
|
+
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '
|
|
40
|
+
version: '1.27'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: minitest
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- - "
|
|
45
|
+
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
47
|
+
version: '5.15'
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
|
-
- - "
|
|
52
|
+
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '
|
|
54
|
+
version: '5.15'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: pry
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
|
-
- - "
|
|
59
|
+
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version:
|
|
61
|
+
version: 0.14.1
|
|
62
62
|
type: :development
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
|
-
- - "
|
|
66
|
+
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version:
|
|
68
|
+
version: 0.14.1
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: rake
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - "~>"
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: 13.0.1
|
|
76
|
+
type: :development
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - "~>"
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: 13.0.1
|
|
69
83
|
- !ruby/object:Gem::Dependency
|
|
70
84
|
name: redcarpet
|
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
|
72
86
|
requirements:
|
|
73
|
-
- - "
|
|
87
|
+
- - "~>"
|
|
74
88
|
- !ruby/object:Gem::Version
|
|
75
|
-
version:
|
|
89
|
+
version: 3.5.1
|
|
76
90
|
type: :development
|
|
77
91
|
prerelease: false
|
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
93
|
requirements:
|
|
80
|
-
- - "
|
|
94
|
+
- - "~>"
|
|
81
95
|
- !ruby/object:Gem::Version
|
|
82
|
-
version:
|
|
96
|
+
version: 3.5.1
|
|
83
97
|
- !ruby/object:Gem::Dependency
|
|
84
98
|
name: rubocop-minitest
|
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
|
86
100
|
requirements:
|
|
87
|
-
- - "
|
|
101
|
+
- - "~>"
|
|
88
102
|
- !ruby/object:Gem::Version
|
|
89
|
-
version:
|
|
103
|
+
version: 0.19.1
|
|
90
104
|
type: :development
|
|
91
105
|
prerelease: false
|
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
107
|
requirements:
|
|
94
|
-
- - "
|
|
108
|
+
- - "~>"
|
|
95
109
|
- !ruby/object:Gem::Version
|
|
96
|
-
version:
|
|
110
|
+
version: 0.19.1
|
|
111
|
+
- !ruby/object:Gem::Dependency
|
|
112
|
+
name: rubocop-rake
|
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
|
114
|
+
requirements:
|
|
115
|
+
- - "~>"
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: 0.6.0
|
|
118
|
+
type: :development
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
requirements:
|
|
122
|
+
- - "~>"
|
|
123
|
+
- !ruby/object:Gem::Version
|
|
124
|
+
version: 0.6.0
|
|
97
125
|
- !ruby/object:Gem::Dependency
|
|
98
126
|
name: yard
|
|
99
127
|
requirement: !ruby/object:Gem::Requirement
|
|
100
128
|
requirements:
|
|
101
|
-
- - "
|
|
129
|
+
- - "~>"
|
|
102
130
|
- !ruby/object:Gem::Version
|
|
103
|
-
version:
|
|
131
|
+
version: 0.9.27
|
|
104
132
|
type: :development
|
|
105
133
|
prerelease: false
|
|
106
134
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
135
|
requirements:
|
|
108
|
-
- - "
|
|
136
|
+
- - "~>"
|
|
109
137
|
- !ruby/object:Gem::Version
|
|
110
|
-
version:
|
|
138
|
+
version: 0.9.27
|
|
111
139
|
description:
|
|
112
140
|
email: joepolny+dev@gmail.com
|
|
113
141
|
executables: []
|
|
@@ -136,7 +164,7 @@ require_paths:
|
|
|
136
164
|
- lib
|
|
137
165
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
138
166
|
requirements:
|
|
139
|
-
- - "
|
|
167
|
+
- - ">="
|
|
140
168
|
- !ruby/object:Gem::Version
|
|
141
169
|
version: '2.7'
|
|
142
170
|
required_rubygems_version: !ruby/object:Gem::Requirement
|