furnace 0.3.1 → 0.4.0.beta.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.
- data/.gitignore +1 -0
- data/.travis.yml +4 -0
- data/Gemfile +1 -2
- data/{LICENSE → LICENSE.MIT} +14 -14
- data/Rakefile +1 -5
- data/furnace.gemspec +7 -3
- data/lib/furnace/ast/node.rb +14 -0
- data/lib/furnace/ast/processor.rb +7 -7
- data/lib/furnace/ssa/argument.rb +23 -0
- data/lib/furnace/ssa/basic_block.rb +117 -0
- data/lib/furnace/ssa/builder.rb +100 -0
- data/lib/furnace/ssa/constant.rb +43 -0
- data/lib/furnace/ssa/function.rb +191 -0
- data/lib/furnace/ssa/generic_instruction.rb +14 -0
- data/lib/furnace/ssa/generic_type.rb +16 -0
- data/lib/furnace/ssa/instruction.rb +92 -0
- data/lib/furnace/ssa/instruction_syntax.rb +109 -0
- data/lib/furnace/ssa/instructions/branch.rb +11 -0
- data/lib/furnace/ssa/instructions/phi.rb +63 -0
- data/lib/furnace/ssa/instructions/return.rb +11 -0
- data/lib/furnace/ssa/module.rb +52 -0
- data/lib/furnace/ssa/named_value.rb +25 -0
- data/lib/furnace/ssa/pretty_printer.rb +113 -0
- data/lib/furnace/ssa/terminator_instruction.rb +24 -0
- data/lib/furnace/ssa/type.rb +27 -0
- data/lib/furnace/ssa/types/basic_block.rb +11 -0
- data/lib/furnace/ssa/types/function.rb +11 -0
- data/lib/furnace/ssa/types/void.rb +15 -0
- data/lib/furnace/ssa/user.rb +84 -0
- data/lib/furnace/ssa/value.rb +62 -0
- data/lib/furnace/ssa.rb +66 -0
- data/lib/furnace/transform/iterative.rb +27 -0
- data/lib/furnace/transform/pipeline.rb +3 -3
- data/lib/furnace/version.rb +1 -1
- data/lib/furnace.rb +3 -3
- data/test/ast_test.rb +32 -3
- data/test/ssa_test.rb +1129 -0
- data/test/test_helper.rb +17 -28
- data/test/transform_test.rb +74 -0
- metadata +136 -58
- data/lib/furnace/cfg/algorithms.rb +0 -193
- data/lib/furnace/cfg/graph.rb +0 -99
- data/lib/furnace/cfg/node.rb +0 -78
- data/lib/furnace/cfg.rb +0 -7
- data/lib/furnace/transform/iterative_process.rb +0 -26
data/lib/furnace/cfg/node.rb
DELETED
@@ -1,78 +0,0 @@
|
|
1
|
-
module Furnace::CFG
|
2
|
-
class Node
|
3
|
-
attr_reader :cfg, :label
|
4
|
-
|
5
|
-
attr_accessor :target_labels, :exception_label
|
6
|
-
attr_accessor :instructions, :control_transfer_instruction
|
7
|
-
|
8
|
-
attr_accessor :metadata
|
9
|
-
|
10
|
-
alias :insns :instructions
|
11
|
-
alias :insns= :instructions=
|
12
|
-
alias :cti :control_transfer_instruction
|
13
|
-
alias :cti= :control_transfer_instruction=
|
14
|
-
|
15
|
-
def initialize(cfg, label=nil, insns=[], cti=nil,
|
16
|
-
target_labels=[], exception_label=nil,
|
17
|
-
metadata={})
|
18
|
-
@cfg, @label = cfg, label
|
19
|
-
@metadata = metadata
|
20
|
-
|
21
|
-
@instructions = insns
|
22
|
-
@control_transfer_instruction = cti
|
23
|
-
|
24
|
-
@target_labels = target_labels
|
25
|
-
@exception_label = exception_label
|
26
|
-
end
|
27
|
-
|
28
|
-
def target_labels
|
29
|
-
@target_labels
|
30
|
-
end
|
31
|
-
|
32
|
-
def targets
|
33
|
-
@target_labels.map do |label|
|
34
|
-
@cfg.find_node label
|
35
|
-
end.freeze
|
36
|
-
end
|
37
|
-
|
38
|
-
def source_labels
|
39
|
-
sources.map &:label
|
40
|
-
end
|
41
|
-
|
42
|
-
def sources
|
43
|
-
@cfg.sources_for(self)
|
44
|
-
end
|
45
|
-
|
46
|
-
def exception
|
47
|
-
@cfg.find_node @exception_label if @exception_label
|
48
|
-
end
|
49
|
-
|
50
|
-
def exception_source_labels
|
51
|
-
exception_sources.map &:label
|
52
|
-
end
|
53
|
-
|
54
|
-
def exception_sources
|
55
|
-
@cfg.sources_for(self, true)
|
56
|
-
end
|
57
|
-
|
58
|
-
def exits?
|
59
|
-
targets == [@cfg.exit]
|
60
|
-
end
|
61
|
-
|
62
|
-
def ==(other)
|
63
|
-
other.is_a?(Node) && self.label == other.label
|
64
|
-
end
|
65
|
-
|
66
|
-
def inspect
|
67
|
-
if @label && @instructions
|
68
|
-
"<#{@label}:#{@instructions.join ", "}>"
|
69
|
-
elsif @label
|
70
|
-
"<#{@label}>"
|
71
|
-
elsif @instructions
|
72
|
-
"<!unlabeled:#{@instructions.join ", "}>"
|
73
|
-
else
|
74
|
-
"<!exit#{metadata}>"
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
data/lib/furnace/cfg.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
module Furnace
|
2
|
-
module Transform
|
3
|
-
class IterativeProcess
|
4
|
-
def initialize(stages)
|
5
|
-
@stages = stages
|
6
|
-
end
|
7
|
-
|
8
|
-
def transform(*sequence)
|
9
|
-
loop do
|
10
|
-
changed = false
|
11
|
-
|
12
|
-
@stages.each do |stage|
|
13
|
-
return sequence if stage.nil?
|
14
|
-
|
15
|
-
if new_sequence = stage.transform(*sequence)
|
16
|
-
changed = true
|
17
|
-
sequence = new_sequence
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
return sequence unless changed
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|