Class: Expressir::Express::Builders::ConstantBuilder
- Inherits:
-
Object
- Object
- Expressir::Express::Builders::ConstantBuilder
- Defined in:
- lib/expressir/express/builders/constant_builder.rb
Overview
Builds constant and local variable nodes.
Instance Method Summary collapse
- #build_constant_body(ast_data) ⇒ Object
- #build_constant_decl(ast_data) ⇒ Object
- #build_formal_parameter(ast_data) ⇒ Object
- #build_local_decl(ast_data) ⇒ Object
- #build_local_variable(ast_data) ⇒ Object
- #build_procedure_head_parameter(ast_data) ⇒ Object
Instance Method Details
#build_constant_body(ast_data) ⇒ Object
12 13 14 15 16 17 18 19 |
# File 'lib/expressir/express/builders/constant_builder.rb', line 12 def build_constant_body(ast_data) id = Builder.build_optional(ast_data[:constant_id]) type = Builder.build_optional(ast_data[:instantiable_type]) expression = Builder.build_optional(ast_data[:expression]) Expressir::Model::Declarations::Constant.new(id: id, type: type, expression: expression) end |
#build_constant_decl(ast_data) ⇒ Object
8 9 10 |
# File 'lib/expressir/express/builders/constant_builder.rb', line 8 def build_constant_decl(ast_data) Builder.build_children(ast_data[:constant_body]) end |
#build_formal_parameter(ast_data) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/expressir/express/builders/constant_builder.rb', line 53 def build_formal_parameter(ast_data) param_id_data = ast_data[:list_of_parameter_id] || ast_data ids_data = if param_id_data.is_a?(Hash) && param_id_data[:parameter_id] param_id_data[:parameter_id] else param_id_data end ids = if ids_data.is_a?(Hash) [Builder.build({ parameter_id: ids_data })] elsif ids_data.is_a?(Array) ids_data.map { |id| Builder.build({ parameter_id: id }) } else [] end type = Builder.build_optional(ast_data[:parameter_type]) ids.flatten.compact.map { |id| Expressir::Model::Declarations::Parameter.new(id: id, type: type) } end |
#build_local_decl(ast_data) ⇒ Object
21 22 23 |
# File 'lib/expressir/express/builders/constant_builder.rb', line 21 def build_local_decl(ast_data) Builder.build_children(ast_data[:local_variable]) end |
#build_local_variable(ast_data) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/expressir/express/builders/constant_builder.rb', line 25 def build_local_variable(ast_data) var_id_data = ast_data[:list_of_variable_id] || ast_data ids_data = if var_id_data.is_a?(Hash) && var_id_data[:variable_id] var_id_data[:variable_id] else var_id_data end ids = if ids_data.is_a?(Hash) [Builder.build({ variable_id: ids_data })] elsif ids_data.is_a?(Array) ids_data.map { |id| Builder.build({ variable_id: id }) } else [] end type = Builder.build_optional(ast_data[:parameter_type]) expression = if ast_data[:expression] Builder.build({ expression: ast_data[:expression] }) end ids.flatten.compact.map do |id| Expressir::Model::Declarations::Variable.new(id: id, type: type, expression: expression) end end |
#build_procedure_head_parameter(ast_data) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/expressir/express/builders/constant_builder.rb', line 74 def build_procedure_head_parameter(ast_data) formal_param_data = ast_data[:formal_parameter] params = if formal_param_data.is_a?(Hash) result = Builder.build({ formal_parameter: formal_param_data }) Builder.ensure_array(result) elsif formal_param_data.is_a?(Array) formal_param_data.flat_map do |fp| Builder.build({ formal_parameter: fp }) end.compact else [] end is_var = !ast_data[:t_var].nil? if is_var params.map do |p| Expressir::Model::Declarations::Parameter.new(id: p.id, var: true, type: p.type) end else params end end |