Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit c1cd547

Browse files
committed
A couple of convenience APIs
1 parent b58169a commit c1cd547

File tree

5 files changed

+37
-29
lines changed

5 files changed

+37
-29
lines changed

lib/syntax_tree/yarv/assembler.rb

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,22 +62,26 @@ def visit_string_literal(node)
6262
"constant-from"
6363
].freeze
6464

65-
attr_reader :filepath
65+
attr_reader :lines
6666

67-
def initialize(filepath)
68-
@filepath = filepath
67+
def initialize(lines)
68+
@lines = lines
6969
end
7070

7171
def assemble
7272
iseq = InstructionSequence.new("<main>", "<compiled>", 1, :top)
73-
assemble_iseq(iseq, File.readlines(filepath, chomp: true))
73+
assemble_iseq(iseq, lines)
7474

7575
iseq.compile!
7676
iseq
7777
end
7878

79-
def self.assemble(filepath)
80-
new(filepath).assemble
79+
def self.assemble(source)
80+
new(source.lines(chomp: true)).assemble
81+
end
82+
83+
def self.assemble_file(filepath)
84+
new(File.readlines(filepath, chomp: true)).assemble
8185
end
8286

8387
private

lib/syntax_tree/yarv/compiler.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ def visit_unsupported(_node)
285285
# if we need to return the value of the last statement.
286286
attr_reader :last_statement
287287

288-
def initialize(options)
288+
def initialize(options = Options.new)
289289
@options = options
290290
@iseq = nil
291291
@last_statement = false

lib/syntax_tree/yarv/decompiler.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ def decompile(iseq)
9797
clause << Next(Args([]))
9898
when Leave
9999
value = Args([clause.pop])
100-
clause << (iseq.type == :top ? Break(value) : ReturnNode(value))
100+
clause << (iseq.type != :top ? Break(value) : ReturnNode(value))
101101
when OptAnd, OptDiv, OptEq, OptGE, OptGT, OptLE, OptLT, OptLTLT,
102102
OptMinus, OptMod, OptMult, OptOr, OptPlus
103103
left, right = clause.pop(2)

lib/syntax_tree/yarv/vm.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,10 @@ def initialize(events = NullEvents.new)
219219
@frame = nil
220220
end
221221

222+
def self.run(iseq)
223+
new.run_top_frame(iseq)
224+
end
225+
222226
##########################################################################
223227
# Helper methods for frames
224228
##########################################################################

test/yarv_test.rb

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,27 @@
66
module SyntaxTree
77
class YARVTest < Minitest::Test
88
CASES = {
9-
"0" => "break 0\n",
10-
"1" => "break 1\n",
11-
"2" => "break 2\n",
12-
"1.0" => "break 1.0\n",
13-
"1 + 2" => "break 1 + 2\n",
14-
"1 - 2" => "break 1 - 2\n",
15-
"1 * 2" => "break 1 * 2\n",
16-
"1 / 2" => "break 1 / 2\n",
17-
"1 % 2" => "break 1 % 2\n",
18-
"1 < 2" => "break 1 < 2\n",
19-
"1 <= 2" => "break 1 <= 2\n",
20-
"1 > 2" => "break 1 > 2\n",
21-
"1 >= 2" => "break 1 >= 2\n",
22-
"1 == 2" => "break 1 == 2\n",
23-
"1 != 2" => "break 1 != 2\n",
24-
"1 & 2" => "break 1 & 2\n",
25-
"1 | 2" => "break 1 | 2\n",
26-
"1 << 2" => "break 1 << 2\n",
27-
"1 >> 2" => "break 1.>>(2)\n",
28-
"1 ** 2" => "break 1.**(2)\n",
29-
"a = 1; a" => "a = 1\nbreak a\n"
9+
"0" => "return 0\n",
10+
"1" => "return 1\n",
11+
"2" => "return 2\n",
12+
"1.0" => "return 1.0\n",
13+
"1 + 2" => "return 1 + 2\n",
14+
"1 - 2" => "return 1 - 2\n",
15+
"1 * 2" => "return 1 * 2\n",
16+
"1 / 2" => "return 1 / 2\n",
17+
"1 % 2" => "return 1 % 2\n",
18+
"1 < 2" => "return 1 < 2\n",
19+
"1 <= 2" => "return 1 <= 2\n",
20+
"1 > 2" => "return 1 > 2\n",
21+
"1 >= 2" => "return 1 >= 2\n",
22+
"1 == 2" => "return 1 == 2\n",
23+
"1 != 2" => "return 1 != 2\n",
24+
"1 & 2" => "return 1 & 2\n",
25+
"1 | 2" => "return 1 | 2\n",
26+
"1 << 2" => "return 1 << 2\n",
27+
"1 >> 2" => "return 1.>>(2)\n",
28+
"1 ** 2" => "return 1.**(2)\n",
29+
"a = 1; a" => "a = 1\nreturn a\n"
3030
}.freeze
3131

3232
CASES.each do |source, expected|

0 commit comments

Comments
 (0)