public
Description: Reia is a Ruby/Python-like language for BEAM, the Erlang VM
Homepage: http://reia-lang.org
Clone URL: git://github.com/tarcieri/reia.git
DRY out specification of passes used by Reia's compiler
Tony Arcieri (author)
Sun Oct 05 21:18:03 -0700 2008
commit  b559a8f338dc99bc1ec4ad06f3555072286537c1
tree    5493a5c7bbf2edf42f8cf9a4c9091e1af0d32c24
parent  8c5be46a7f138e9063efa1ac9ddd3b5fc0ed7081
...
6
7
8
9
 
 
 
 
 
 
 
 
 
 
 
 
 
10
11
12
 
13
14
15
...
6
7
8
 
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
24
25
26
27
0
@@ -6,10 +6,22 @@
0
 %
0
 
0
 -module(reia_compiler).
0
--export([compile/1, compile/2, ssa/1, r2e/1, dynamic/1, static/1, forms/1]).
0
+-export([
0
+ default_passes/0,
0
+ compile/1,
0
+ compile/2,
0
+ ssa/1,
0
+ r2e/1,
0
+ dynamic/1,
0
+ static/1,
0
+ forms/1
0
+]).
0
+
0
+default_passes() ->
0
+ [ssa, r2e, dynamic].
0
 
0
 compile(Expressions) ->
0
- compile(Expressions, [ssa, r2e, dynamic]).
0
+ compile(Expressions, default_passes()).
0
 
0
 compile(Expressions, []) ->
0
   Expressions;
...
16
17
18
19
 
20
21
22
...
34
35
36
 
 
 
 
 
 
 
37
38
39
...
16
17
18
 
19
20
21
22
...
34
35
36
37
38
39
40
41
42
43
44
45
46
0
@@ -16,7 +16,7 @@ module Eval
0
     
0
   def exprs(forms, binding)
0
     # Compile Reia forms to Erlang forms
0
- erl_forms = reia_compiler::compile(forms, [(~ssa, binding), ~r2e, ~dynamic])
0
+ erl_forms = reia_compiler::compile(forms, passes(binding))
0
     
0
     # Convert Reia variable names to Erlang SSA names
0
     binding = binding.map { |(var, value)| (var.to_s().capitalize().sub(/$/, "_0").to_atom(), value) }
0
@@ -34,6 +34,13 @@ module Eval
0
     binding = binding.reduce({}) { |(var, value), hash| hash.insert(var, value) }.to_list()
0
     
0
     (~value, result, binding)
0
+
0
+ def passes(binding)
0
+ reia_compiler::default_passes().map do |pass|
0
+ if pass == ~ssa
0
+ (~ssa, binding)
0
+ else
0
+ pass
0
   
0
   def new_binding
0
     erl_eval::new_bindings()
...
34
35
36
37
 
 
38
39
40
...
34
35
36
 
37
38
39
40
41
0
@@ -34,7 +34,8 @@ file(Filename, Outfile) ->
0
   end.
0
   
0
 forms(Forms) ->
0
- ErlForms = reia_compiler:compile(Forms, [ssa, r2e, static]),
0
+ Passes = [case Pass of dynamic -> static; _ -> Pass end || Pass <- reia_compiler:default_passes()],
0
+ ErlForms = reia_compiler:compile(Forms, Passes),
0
   compile:forms(ErlForms, [
0
     debug_info,
0
     export_all,

Comments

    No one has commented yet.