lib/AstRewritter.rb in maroon-0.7.1 vs lib/AstRewritter.rb in maroon-0.8.0
- old
+ new
@@ -1,65 +1,60 @@
class AstRewritter
- def initialize(ast, interpretation_context)
- @ast = Production.new(ast, interpretation_context)
- @roles = interpretation_context.roles
- end
-
- def rewrite!()
- ast.each do |production|
- case production.type
- when Tokens.rolemethod_call then
- data = production.data
- production[2] = ((("self_" + data[1].to_s) + "_") + data[0].to_s).to_sym
- production[1] = nil
- when Tokens.block_with_bind then
- block = production.last
- block.delete_at(1)
- production.data.each do |local, aliased_role|
- must_b_sym = "aliased_role must be a Symbol".to_sym
- local_must_b_sym = "local must be a Symbol".to_sym
- raise(must_b_sym) unless aliased_role.instance_of?(Symbol)
- raise(local_must_b_sym) unless local.instance_of?(Symbol)
- unless @roles.has_key?(aliased_role) then
- role_names = []
- @interpretation_context.each { |k, v| (role_names << k.to_s) }
- raise(((aliased_role.to_s + " is not a role. Available roles are ") + role_names.join(",")))
- end
- aliased_field = ("@" + aliased_role.to_s).to_sym
- temp_symbol = ("temp____" + aliased_role.to_s).to_sym
- assignment = Sexp.new
- assignment[0] = :iasgn
- assignment[1] = aliased_field
- load_arg = Sexp.new
- load_arg[0] = :lvar
- load_arg[1] = local
- assignment[2] = load_arg
- block.insert(1, assignment)
- assignment = Sexp.new
- assignment[0] = :lasgn
- assignment[1] = temp_symbol
- load_field = Sexp.new
- load_field[0] = :ivar
- load_field[1] = aliased_field
- assignment[2] = load_field
- block.insert(1, assignment)
- assignment = Sexp.new
- assignment[0] = :iasgn
- assignment[1] = aliased_field
- load_temp = Sexp.new
- load_temp[0] = :lvar
- load_temp[1] = temp_symbol
- assignment[2] = load_temp
- block[block.length] = assignment
- end
- else
- # do nothing
+ def initialize(ast,interpretation_context) @ast = AbstractSyntaxTree.new(ast, interpretation_context)
+@roles = interpretation_context.roles
+ end
+ def rewrite!() ast.each_production do |production|
+ case production.type
+ when Tokens.rolemethod_call then
+ data = production.data
+ production[2] = ((("self_" + data[1].to_s) + "_") + data[0].to_s).to_sym
+ production[1] = nil
+ when Tokens.block_with_bind then
+ block = production.last
+ block.delete_at(1)
+ production.data.each do |local, aliased_role|
+ must_b_sym = "aliased_role must be a Symbol".to_sym
+ local_must_b_sym = "local must be a Symbol".to_sym
+ raise(must_b_sym) unless aliased_role.instance_of?(Symbol)
+ raise(local_must_b_sym) unless local.instance_of?(Symbol)
+ unless @roles.has_key?(aliased_role) then
+ role_names = []
+ @interpretation_context.each { |k, v| (role_names << k.to_s) }
+ raise(((aliased_role.to_s + " is not a role. Available roles are ") + role_names.join(",")))
end
+ aliased_field = ("@" + aliased_role.to_s).to_sym
+ temp_symbol = ("temp____" + aliased_role.to_s).to_sym
+ assignment = Sexp.new
+ assignment[0] = :iasgn
+ assignment[1] = aliased_field
+ load_arg = Sexp.new
+ load_arg[0] = :lvar
+ load_arg[1] = local
+ assignment[2] = load_arg
+ block.insert(1, assignment)
+ assignment = Sexp.new
+ assignment[0] = :lasgn
+ assignment[1] = temp_symbol
+ load_field = Sexp.new
+ load_field[0] = :ivar
+ load_field[1] = aliased_field
+ assignment[2] = load_field
+ block.insert(1, assignment)
+ assignment = Sexp.new
+ assignment[0] = :iasgn
+ assignment[1] = aliased_field
+ load_temp = Sexp.new
+ load_temp[0] = :lvar
+ load_temp[1] = temp_symbol
+ assignment[2] = load_temp
+ block[block.length] = assignment
end
+ else
+ # do nothing
end
+end end
+ private
- private
+attr_reader :ast
- attr_reader :ast
-
-end
+ end
\ No newline at end of file