tealrb 0.1.0 → 0.2.0
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/opcode_modules.rb +1 -1
- data/lib/tealrb/rewriters.rb +21 -0
- metadata +45 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 232757505472510465b62384efb3502fd68bb6589cb543e5bdad87b8f29f82a0
|
4
|
+
data.tar.gz: d6f98b807101a75092f86ff80749dc28cb42b20474706436fbdc2ba356211659
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d6f8f0e315cc9e045a4279e7d1a79a8a6d033218d830a93d20b72ef4bb7fb6f239007479763fcd99c89f46a0fee17478a47c67450cf560ca2c9c77a8e511a2b
|
7
|
+
data.tar.gz: 89dfcbe94801a5fb0ad54c496472f6442fdb4126804fbe817ce5d5d3b4e32aec2360eae93d6fb72acac736c98c548761fe1f8eaa9b632ed8a9d6593005aa2ca7
|
@@ -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/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,127 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tealrb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
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-12 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
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: yard
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
|
-
- - "
|
115
|
+
- - "~>"
|
102
116
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
117
|
+
version: 0.9.27
|
104
118
|
type: :development
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
108
|
-
- - "
|
122
|
+
- - "~>"
|
109
123
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
124
|
+
version: 0.9.27
|
111
125
|
description:
|
112
126
|
email: joepolny+dev@gmail.com
|
113
127
|
executables: []
|
@@ -136,7 +150,7 @@ require_paths:
|
|
136
150
|
- lib
|
137
151
|
required_ruby_version: !ruby/object:Gem::Requirement
|
138
152
|
requirements:
|
139
|
-
- - "
|
153
|
+
- - ">="
|
140
154
|
- !ruby/object:Gem::Version
|
141
155
|
version: '2.7'
|
142
156
|
required_rubygems_version: !ruby/object:Gem::Requirement
|