class Orbacle::DefineBuiltins
Attributes
id_generator[R]
Public Class Methods
new(graph, tree, id_generator)
click to toggle source
# File lib/orbacle/define_builtins.rb, line 5 def initialize(graph, tree, id_generator) @graph = graph @tree = tree @id_generator = id_generator end
Public Instance Methods
call()
click to toggle source
# File lib/orbacle/define_builtins.rb, line 11 def call add_object_klass add_dir_klass add_file_klass add_integer_klass add_array_klass end
Private Instance Methods
add_array_each(klass)
click to toggle source
# File lib/orbacle/define_builtins.rb, line 123 def add_array_each(klass) metod = add_method(klass.id, :each, :public, GlobalTree::ArgumentsTree.new([], [])) caller_node = Node.new(:caller, {}) result_node = Node.new(:method_result, {}) yield_arg = Node.new(:call_arg, {}) yield_result = Node.new(:yield_result, {}) yields = [Graph::Yield.new([yield_arg], yield_result)] unwrap_array = Node.new(:unwrap_array, {}) all_nodes = [caller_node, result_node, yield_arg, yield_result, unwrap_array] all_edges = [ [caller_node, unwrap_array], [unwrap_array, yield_arg], [caller_node, result_node], ] @graph.store_metod_subgraph(metod.id, {}, caller_node, result_node, yields, all_nodes, all_edges) end
add_array_klass()
click to toggle source
# File lib/orbacle/define_builtins.rb, line 96 def add_array_klass klass = @tree.add_class(nil) @tree.add_constant(GlobalTree::Constant.new("Array", Scope.empty, nil, klass.id)) add_array_map(klass) add_array_each(klass) end
add_array_map(klass)
click to toggle source
# File lib/orbacle/define_builtins.rb, line 104 def add_array_map(klass) metod = add_method(klass.id, :map, :public, GlobalTree::ArgumentsTree.new([], [])) caller_node = Node.new(:caller, {}) result_node = Node.new(:method_result, {}) yield_arg = Node.new(:call_arg, {}) yield_result = Node.new(:yield_result, {}) yields = [Graph::Yield.new([yield_arg], yield_result)] unwrap_array = Node.new(:unwrap_array, {}) wrap_array = Node.new(:wrap_array, {}) all_nodes = [caller_node, result_node, yield_arg, yield_result, unwrap_array, wrap_array] all_edges = [ [caller_node, unwrap_array], [unwrap_array, yield_arg], [yield_result, wrap_array], [wrap_array, result_node], ] @graph.store_metod_subgraph(metod.id, {}, caller_node, result_node, yields, all_nodes, all_edges) end
add_dir_klass()
click to toggle source
# File lib/orbacle/define_builtins.rb, line 78 def add_dir_klass klass = @tree.add_class(nil) @tree.add_constant( GlobalTree::Constant.new("Dir", Scope.empty, nil, klass.id)) eigenclass = @tree.get_eigenclass_of_definition(klass.id) template_just_array_of_str(eigenclass, :glob) end
add_file_klass()
click to toggle source
# File lib/orbacle/define_builtins.rb, line 87 def add_file_klass klass = @tree.add_class(nil) @tree.add_constant( GlobalTree::Constant.new("File", Scope.empty, nil, klass.id)) eigenclass = @tree.get_eigenclass_of_definition(klass.id) template_just_str(eigenclass, :read) end
add_integer_klass()
click to toggle source
# File lib/orbacle/define_builtins.rb, line 67 def add_integer_klass klass = @tree.add_class(nil) @tree.add_constant( GlobalTree::Constant.new("Integer", Scope.empty, nil, klass.id)) template_just_int(klass, :succ) template_just_int(klass, :"+") template_just_int(klass, :"-") template_just_int(klass, :"*") end
add_method(class_id, name, visibility, args)
click to toggle source
# File lib/orbacle/define_builtins.rb, line 210 def add_method(class_id, name, visibility, args) @tree.add_method(generate_id, class_id, name, nil, visibility, args) end
add_object_klass()
click to toggle source
# File lib/orbacle/define_builtins.rb, line 22 def add_object_klass klass = @tree.add_class(nil) @tree.add_constant( GlobalTree::Constant.new("Object", Scope.empty, nil, klass.id)) eigenclass = @tree.get_eigenclass_of_definition(klass.id) # BasicObject template_just_bool(klass, :"==") template_just_bool(klass, :"!") template_just_bool(klass, :"!=") template_just_bool(klass, :equal?) template_just_int(klass, :object_id) template_just_int(klass, :__id__) # Object template_just_bool(klass, :"!~") template_maybe_int(klass, :"<=>") template_just_bool(klass, :"===") template_caller_id(klass, :clone) addm_object_class(klass) template_just_nil(klass, :display) template_caller_id(klass, :dup) template_just_bool(klass, :eql?) template_caller_id(klass, :freeze) template_just_bool(klass, :frozen?) template_just_bool(klass, :instance_of?) template_just_bool(klass, :instance_variable_defined?) template_just_bool(klass, :is_a?) template_just_str(klass, :inspect) template_caller_id(klass, :itself) template_just_bool(klass, :kind_of?) template_just_bool(klass, :nil?) template_just_bool(klass, :respond_to?) template_just_bool(klass, :respond_to_missing?) template_caller_id(klass, :taint) template_caller_id(klass, :trust) template_just_bool(klass, :tainted?) template_caller_id(klass, :untaint) template_caller_id(klass, :untrust) template_just_bool(klass, :untrusted?) template_just_str(klass, :to_s) addm_object_class(eigenclass) end
addm_object_class(klass)
click to toggle source
# File lib/orbacle/define_builtins.rb, line 191 def addm_object_class(klass) metod = add_method(klass.id, :class, :public, GlobalTree::ArgumentsTree.new([], [])) caller_node = Node.new(:caller, {}) extract_class_node = Node.new(:extract_class, {}) result_node = Node.new(:method_result, {}) all_nodes = [caller_node, extract_class_node, result_node] all_edges = [ [caller_node, extract_class_node], [extract_class_node, result_node] ] @graph.store_metod_subgraph(metod.id, {}, caller_node, result_node, [], all_nodes, all_edges) end
generate_id()
click to toggle source
# File lib/orbacle/define_builtins.rb, line 214 def generate_id id_generator.call end
template_args(klass, name)
click to toggle source
# File lib/orbacle/define_builtins.rb, line 204 def template_args(klass, name) metod = add_method(klass.id, name, :public, GlobalTree::ArgumentsTree.new([], [])) @graph.store_metod_nodes(metod.id, {}) metod end
template_caller_id(klass, name)
click to toggle source
# File lib/orbacle/define_builtins.rb, line 180 def template_caller_id(klass, name) metod = add_method(klass.id, name, :public, GlobalTree::ArgumentsTree.new([], [])) caller_node = Node.new(:caller, {}) result_node = Node.new(:method_result, {}) all_nodes = [caller_node, result_node] all_edges = [ [caller_node, result_node] ] @graph.store_metod_subgraph(metod.id, {}, caller_node, result_node, [], all_nodes, all_edges) end
template_just_array_of_str(klass, name)
click to toggle source
# File lib/orbacle/define_builtins.rb, line 172 def template_just_array_of_str(klass, name) metod = template_args(klass, name) str_node = Node.new(:str, {}) array_node = Node.new(:array, {}) @graph.add_edge(str_node, array_node) @graph.add_edge(array_node, @graph.get_metod_nodes(metod.id).result) end
template_just_bool(klass, name)
click to toggle source
# File lib/orbacle/define_builtins.rb, line 160 def template_just_bool(klass, name) metod = template_args(klass, name) str_node = Node.new(:bool, {}) @graph.add_edge(str_node, @graph.get_metod_nodes(metod.id).result) end
template_just_int(klass, name)
click to toggle source
# File lib/orbacle/define_builtins.rb, line 140 def template_just_int(klass, name) metod = template_args(klass, name) int_node = Node.new(:int, {}) @graph.add_edge(int_node, @graph.get_metod_nodes(metod.id).result) end
template_just_nil(klass, name)
click to toggle source
# File lib/orbacle/define_builtins.rb, line 166 def template_just_nil(klass, name) metod = template_args(klass, name) str_node = Node.new(:nil, {}) @graph.add_edge(str_node, @graph.get_metod_nodes(metod.id).result) end
template_just_str(klass, name)
click to toggle source
# File lib/orbacle/define_builtins.rb, line 154 def template_just_str(klass, name) metod = template_args(klass, name) str_node = Node.new(:str, {}) @graph.add_edge(str_node, @graph.get_metod_nodes(metod.id).result) end
template_maybe_int(klass, name)
click to toggle source
# File lib/orbacle/define_builtins.rb, line 146 def template_maybe_int(klass, name) metod = template_args(klass, name) int_node = Node.new(:int, {}) nil_node = Node.new(:nil, {}) @graph.add_edge(int_node, @graph.get_metod_nodes(metod.id).result) @graph.add_edge(nil_node, @graph.get_metod_nodes(metod.id).result) end