tealrb 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ccb46efa84c6dfdf2378ab562eaf2345d947f0a9af9850c05220acfa1b540bc3
4
- data.tar.gz: d7bfaa9d68b2fe60adeeb229f54f087a56b73319f0d3f6f8bf8d673b8a103258
3
+ metadata.gz: 232757505472510465b62384efb3502fd68bb6589cb543e5bdad87b8f29f82a0
4
+ data.tar.gz: d6f98b807101a75092f86ff80749dc28cb42b20474706436fbdc2ba356211659
5
5
  SHA512:
6
- metadata.gz: '0805c1e920c22e3d0fc64975135850a08147b3a3c9f1fb9390868ed60220d504f3fd20c89ea4ecdc96f71068e75b0748f62e502155335007ae0d3530fcbd4af4'
7
- data.tar.gz: ec0abbd56e219ea3082200d9fb5bab2cd6ead37957af0c7dccc359e6c94064967cdac907b776bad0d07d9f1ecfb22fa46c37a84322777dfeb1d7fde0d1df57a2
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
- if line[%r{^//}]
15
- line = %(comment("#{line.sub(%r{//}, '')}"))
16
- output.puts line
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
- output.puts line
59
- output.puts inline_comment if inline_comment
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
@@ -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} // #{content}"
157
+ @teal << "#{last_line} //#{content}"
151
158
  else
152
- @teal << "// #{content}"
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.buffer, process_source.ast)
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
 
@@ -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 '#{type}'"
36
+ TEALrb::TEAL.current[Thread.current] << "int #{type}"
37
37
  end
38
38
  end
39
39
 
@@ -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.1.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-10 00:00:00.000000000 Z
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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