ic_agent 0.1.1 → 0.1.3
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/ic_agent/ast/assembler.rb +4 -26
- data/lib/ic_agent/ast/did_grammar.treetop +8 -4
- data/lib/ic_agent/ast/did_grammar_v2.treetop +159 -0
- data/lib/ic_agent/ast/nested_type_grammar.treetop +118 -0
- data/lib/ic_agent/ast/nodes/named_nodes.rb +24 -57
- data/lib/ic_agent/ast/nodes/statement_nodes.rb +224 -0
- data/lib/ic_agent/ast/record_parser.treetop +22 -0
- data/lib/ic_agent/ast/statement_parser.rb +101 -0
- data/lib/ic_agent/ast/variant_parser.treetop +21 -0
- data/lib/ic_agent/canister.rb +13 -11
- data/lib/ic_agent/common/cycles_wallet.rb +1 -4
- data/lib/ic_agent/common/management.rb +130 -6
- data/lib/ic_agent/version.rb +1 -1
- data/lib/ic_agent.rb +2 -0
- metadata +8 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 8f6dd5be4d1dbd760c09b92da6efa53590adf43cad43c6ef495ccb704deccf1a
         | 
| 4 | 
            +
              data.tar.gz: d28f144bd132dbb0dca0a13f7f12f8749595b1055f70801ffa8dc117cc113bb0
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: b332d5369452f62130204a09c92d24a96029a054c7e02f92ddbaed137167b7f7eccf6e7458b76e6bf4a56da43a540ae937435dae5bd5a2329f680e100f80d53f
         | 
| 7 | 
            +
              data.tar.gz: d7ff9b8954dc25684ef50da692aeea12e000b7e146a40c803aec70bfb6ffc4e5f0348984af230fd55cb71ab7b69f1c91634d9fdd7b7f47d471d9b6efac321098
         | 
    
        data/Gemfile.lock
    CHANGED
    
    
| @@ -153,32 +153,10 @@ module IcAgent | |
| 153 153 | 
             
                  end
         | 
| 154 154 |  | 
| 155 155 | 
             
                  def self.get_params_refer_values(type_str)
         | 
| 156 | 
            -
                     | 
| 157 | 
            -
                     | 
| 158 | 
            -
                     | 
| 159 | 
            -
                     | 
| 160 | 
            -
                      _, item_value = get_record_key_value(item, ' : ', key_index)
         | 
| 161 | 
            -
                      value_arr << item_value.split(' ')
         | 
| 162 | 
            -
                      key_index += 1
         | 
| 163 | 
            -
                    end
         | 
| 164 | 
            -
             | 
| 165 | 
            -
                    replaced_hash.each_key do |key|
         | 
| 166 | 
            -
                      item_arr = replaced_hash[key].strip.split(';')
         | 
| 167 | 
            -
                      item_arr.each do |item|
         | 
| 168 | 
            -
                        multi_item_arr = item.strip.split(':')
         | 
| 169 | 
            -
                        if multi_item_arr.size > 1
         | 
| 170 | 
            -
                          item_value_arr = multi_item_arr[1].strip.split(' ').collect { |v| v.strip.gsub(';', '') }
         | 
| 171 | 
            -
                          item_value_arr.delete('{')
         | 
| 172 | 
            -
                          item_value_arr.delete('}')
         | 
| 173 | 
            -
                          item_value_arr.delete('{}')
         | 
| 174 | 
            -
                          value_arr << item_value_arr
         | 
| 175 | 
            -
                        else
         | 
| 176 | 
            -
                          value_arr << multi_item_arr[1].strip
         | 
| 177 | 
            -
                        end
         | 
| 178 | 
            -
                      end
         | 
| 179 | 
            -
                      value_arr.delete(key)
         | 
| 180 | 
            -
                    end
         | 
| 181 | 
            -
                    value_arr.flatten.uniq - IcAgent::Candid::ALL_TYPES - replaced_hash.keys
         | 
| 156 | 
            +
                    parser = IcAgent::Ast::StatementParser.new
         | 
| 157 | 
            +
                    parser.parse(type_str)
         | 
| 158 | 
            +
                    refer_type = parser.source_tree.content[:refer_type]
         | 
| 159 | 
            +
                    refer_type
         | 
| 182 160 | 
             
                  end
         | 
| 183 161 |  | 
| 184 162 | 
             
                  def self.recover_type(type_str, multi_types)
         | 
| @@ -6,7 +6,7 @@ grammar DIDGrammar | |
| 6 6 |  | 
| 7 7 | 
             
              rule base_type
         | 
| 8 8 | 
             
                'bool' / 'text' / 'null' / 'reserved' / 'empty' / 'principal' / 'nat8' / 'nat16' / 'nat32' / 'nat64' / 'int8' / 'int16' / 'int32' / 'int64' / 'float32' / 'float64' /
         | 
| 9 | 
            -
                'opt' / 'vec' / 'record' / 'variant' / 'service' / 'func' / 'nat' / 'int' / blob
         | 
| 9 | 
            +
                'opt' / 'vec' / 'record' / 'variant' / 'service' / 'func' / 'nat' / 'int' / 'blob'
         | 
| 10 10 | 
             
              end
         | 
| 11 11 |  | 
| 12 12 | 
             
              rule base_type_single
         | 
| @@ -90,15 +90,19 @@ grammar DIDGrammar | |
| 90 90 | 
             
              end
         | 
| 91 91 |  | 
| 92 92 | 
             
              rule service_item
         | 
| 93 | 
            -
                space? service_method_name space? ":" space? "(" service_method_params? ")" space? "->" space? "(" service_method_return_type ")" space? method_query? ';' end_of_line? <IcAgent::Ast::Nodes::IcServiceItem>
         | 
| 93 | 
            +
                space? service_method_name space? ":" space? "(" service_method_params? ")" space? "->" space? "(" service_method_return_type? ")" space? method_query? ';' end_of_line? <IcAgent::Ast::Nodes::IcServiceItem>
         | 
| 94 94 | 
             
              end
         | 
| 95 95 |  | 
| 96 96 | 
             
              rule service_method_params
         | 
| 97 | 
            -
                 | 
| 97 | 
            +
                source_coding (", " source_coding)* <IcAgent::Ast::Nodes::IcServiceMethodParams>
         | 
| 98 98 | 
             
              end
         | 
| 99 99 |  | 
| 100 100 | 
             
              rule service_method_return_type
         | 
| 101 | 
            -
                 | 
| 101 | 
            +
                source_coding (", " source_coding)* <IcAgent::Ast::Nodes::IcServiceMethodReturn>
         | 
| 102 | 
            +
              end
         | 
| 103 | 
            +
             | 
| 104 | 
            +
              rule source_coding
         | 
| 105 | 
            +
                [a-zA-Z0-9_{}:;\n ]*
         | 
| 102 106 | 
             
              end
         | 
| 103 107 |  | 
| 104 108 | 
             
              rule method_query
         | 
| @@ -0,0 +1,159 @@ | |
| 1 | 
            +
            grammar DIDGrammar
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              rule body
         | 
| 4 | 
            +
                ( type_declaration / service_declaration / comment / end_of_line )* <IcAgent::Ast::Nodes::DIDFile>
         | 
| 5 | 
            +
              end
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              rule base_type
         | 
| 8 | 
            +
                'bool' / 'text' / 'null' / 'reserved' / 'empty' / 'principal' / 'nat8' / 'nat16' / 'nat32' / 'nat64' / 'int8' / 'int16' / 'int32' / 'int64' / 'float32' / 'float64' /
         | 
| 9 | 
            +
                'opt' / 'vec' / 'record' / 'variant' / 'service' / 'func' / 'nat' / 'int' / blob
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              rule base_type_single
         | 
| 13 | 
            +
                'bool' / 'text' / 'null' / 'reserved' / 'empty' / 'principal' / 'nat8' / 'nat16' / 'nat32' / 'nat64' / 'int8' / 'int16' / 'int32' / 'int64' / 'float32' / 'float64' / 'nat' / 'int' / 'blob'
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              rule base_type_base
         | 
| 17 | 
            +
                base_type_single+ <IcAgent::Ast::Nodes::BaseTypeSingle>
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              rule base_type_code
         | 
| 21 | 
            +
                [a-zA-Z0-9_]+ <IcAgent::Ast::Nodes::BaseTypeOther>
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              rule base_type_key
         | 
| 25 | 
            +
                  [a-zA-Z0-9_]+ <IcAgent::Ast::Nodes::BaseTypeKey>
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
              rule base_type_vec
         | 
| 29 | 
            +
                'vec' space ic_all_type <IcAgent::Ast::Nodes::BaseTypeVec>
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              rule base_type_opt
         | 
| 33 | 
            +
                'opt' space ic_all_type <IcAgent::Ast::Nodes::BaseTypeOpt>
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              rule base_type_record
         | 
| 37 | 
            +
                'record' space '{' space_and_line ic_base_content space_and_line '}' <IcAgent::Ast::Nodes::BaseTypeRecord>
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
              rule base_type_record_null
         | 
| 41 | 
            +
                'record {}' <IcAgent::Ast::Nodes::BaseTypeRecord>
         | 
| 42 | 
            +
              end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
              rule base_type_variant
         | 
| 45 | 
            +
                'variant' space '{' space_and_line ic_base_content space_and_line '}' <IcAgent::Ast::Nodes::BaseTypeVariant>
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
              rule base_type_func
         | 
| 49 | 
            +
                'func' space? "(" service_method_params? ")" space? "->" space? "(" service_method_return_type ")" space? method_query? <IcAgent::Ast::Nodes::BaseTypeFunc>
         | 
| 50 | 
            +
              end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
              rule ic_all_type
         | 
| 53 | 
            +
                base_type_base / base_type_vec / base_type_record / base_type_record_null / base_type_variant / base_type_opt / base_type_func / base_type_code
         | 
| 54 | 
            +
              end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
              rule ic_base_content
         | 
| 57 | 
            +
                (ic_base_type)+  <IcAgent::Ast::Nodes::BaseTypeContent>
         | 
| 58 | 
            +
              end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
              rule ic_base_type
         | 
| 61 | 
            +
                space? base_type_key space? (':' space ic_all_type)* optional_semicolon <IcAgent::Ast::Nodes::BaseTypeChild>
         | 
| 62 | 
            +
              end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
              rule type_declaration
         | 
| 65 | 
            +
                'type' space_and_line type_name space_and_line '=' space_and_line ic_all_type ';' end_of_line <IcAgent::Ast::Nodes::TypeDeclaration>
         | 
| 66 | 
            +
              end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
              rule type_name
         | 
| 69 | 
            +
                [a-zA-Z0-9_]+ <IcAgent::Ast::Nodes::TypeName>
         | 
| 70 | 
            +
              end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
              rule comment
         | 
| 73 | 
            +
                space? '//' space? rest_of_line <IcAgent::Ast::Nodes::Comment>
         | 
| 74 | 
            +
              end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
              rule service_declaration
         | 
| 77 | 
            +
                "service" space ":" space service_name* "{" end_of_line service_methods "}"  <IcAgent::Ast::Nodes::Service>
         | 
| 78 | 
            +
              end
         | 
| 79 | 
            +
             | 
| 80 | 
            +
              rule service_name
         | 
| 81 | 
            +
                "(" ic_service_name ")" space? "->" space?
         | 
| 82 | 
            +
              end
         | 
| 83 | 
            +
             | 
| 84 | 
            +
              rule ic_service_name
         | 
| 85 | 
            +
                [a-zA-Z0-9_]* <IcAgent::Ast::Nodes::IcServiceName>
         | 
| 86 | 
            +
              end
         | 
| 87 | 
            +
             | 
| 88 | 
            +
              rule service_methods
         | 
| 89 | 
            +
                (service_item)+ <IcAgent::Ast::Nodes::IcServiceMethods>
         | 
| 90 | 
            +
              end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
              rule service_item
         | 
| 93 | 
            +
                space? service_method_name space? ":" space? "(" service_method_params? ")" space? "->" space? "(" service_method_return_type ")" space? method_query? ';' end_of_line? <IcAgent::Ast::Nodes::IcServiceItem>
         | 
| 94 | 
            +
              end
         | 
| 95 | 
            +
             | 
| 96 | 
            +
              rule service_method_params
         | 
| 97 | 
            +
                param_element (", " param_element)* <IcAgent::Ast::Nodes::IcServiceMethodParams>
         | 
| 98 | 
            +
              end
         | 
| 99 | 
            +
             | 
| 100 | 
            +
              rule service_method_return_type
         | 
| 101 | 
            +
                [a-zA-Z0-9_{}: ]* <IcAgent::Ast::Nodes::IcServiceMethodReturn>
         | 
| 102 | 
            +
              end
         | 
| 103 | 
            +
             | 
| 104 | 
            +
              rule method_query
         | 
| 105 | 
            +
                [a-zA-Z0-9_]* <IcAgent::Ast::Nodes::IcServiceMethodQuery>
         | 
| 106 | 
            +
              end
         | 
| 107 | 
            +
             | 
| 108 | 
            +
              rule words
         | 
| 109 | 
            +
                [a-zA-Z_] [a-zA-Z0-9_]*
         | 
| 110 | 
            +
              end
         | 
| 111 | 
            +
             | 
| 112 | 
            +
              rule param_element
         | 
| 113 | 
            +
                [a-zA-Z0-9_ ]+
         | 
| 114 | 
            +
              end
         | 
| 115 | 
            +
             | 
| 116 | 
            +
              rule service_method_name
         | 
| 117 | 
            +
                [a-zA-Z0-9_]* <IcAgent::Ast::Nodes::IcServiceMethodName>
         | 
| 118 | 
            +
              end
         | 
| 119 | 
            +
             | 
| 120 | 
            +
              rule string_without_spaces
         | 
| 121 | 
            +
                [\S]* <IcAgent::Ast::Nodes::StringLiteral>
         | 
| 122 | 
            +
              end
         | 
| 123 | 
            +
             | 
| 124 | 
            +
              rule rest_of_line
         | 
| 125 | 
            +
                [^\n]* <IcAgent::Ast::Nodes::StringLiteral>
         | 
| 126 | 
            +
              end
         | 
| 127 | 
            +
             | 
| 128 | 
            +
              rule end_of_line
         | 
| 129 | 
            +
                [\n]+
         | 
| 130 | 
            +
              end
         | 
| 131 | 
            +
             | 
| 132 | 
            +
              rule block_record
         | 
| 133 | 
            +
                '{}'
         | 
| 134 | 
            +
              end
         | 
| 135 | 
            +
             | 
| 136 | 
            +
              rule has_end_of_line
         | 
| 137 | 
            +
                [\n]*
         | 
| 138 | 
            +
              end
         | 
| 139 | 
            +
             | 
| 140 | 
            +
              rule splite_code
         | 
| 141 | 
            +
                ' : '
         | 
| 142 | 
            +
              end
         | 
| 143 | 
            +
             | 
| 144 | 
            +
              rule space_and_line
         | 
| 145 | 
            +
                [\s\n]*
         | 
| 146 | 
            +
              end
         | 
| 147 | 
            +
             | 
| 148 | 
            +
              rule space
         | 
| 149 | 
            +
                [\s]+
         | 
| 150 | 
            +
              end
         | 
| 151 | 
            +
             | 
| 152 | 
            +
              rule start_space
         | 
| 153 | 
            +
                [^\s]+
         | 
| 154 | 
            +
              end
         | 
| 155 | 
            +
             | 
| 156 | 
            +
              rule optional_semicolon
         | 
| 157 | 
            +
                [;]*
         | 
| 158 | 
            +
              end
         | 
| 159 | 
            +
            end
         | 
| @@ -0,0 +1,118 @@ | |
| 1 | 
            +
            grammar TypeGrammar
         | 
| 2 | 
            +
              rule statement_block
         | 
| 3 | 
            +
                ic_all_type optional_semicolon <IcAgent::Ast::Nodes::StatementBlock>
         | 
| 4 | 
            +
              end
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              rule ic_all_type
         | 
| 7 | 
            +
                (ic_type_def)+ <IcAgent::Ast::Nodes::IcTypeDef>
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              rule ic_type_def
         | 
| 11 | 
            +
                base_type_base / base_type_vec / base_type_record / base_type_record_null / base_type_variant / base_type_opt / base_type_func / base_type_code
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              rule record_statement_content
         | 
| 15 | 
            +
                (ic_base_type_pair / ic_base_type_value)* <IcAgent::Ast::Nodes::StatementContent>
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              rule variant_statement_content
         | 
| 19 | 
            +
                (ic_base_type_pair / ic_base_type_key)* <IcAgent::Ast::Nodes::StatementContent>
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              rule base_type
         | 
| 23 | 
            +
                'bool' / 'text' / 'null' / 'reserved' / 'empty' / 'principal' / 'nat8' / 'nat16' / 'nat32' / 'nat64' / 'int8' / 'int16' / 'int32' / 'int64' / 'float32' / 'float64' /
         | 
| 24 | 
            +
                'opt' / 'vec' / 'record' / 'variant' / 'service' / 'func' / 'nat' / 'int' / 'blob'
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              rule base_type_single
         | 
| 28 | 
            +
                'bool' / 'text' / 'null' / 'reserved' / 'empty' / 'principal' / 'nat8' / 'nat16' / 'nat32' / 'nat64' / 'int8' / 'int16' / 'int32' / 'int64' / 'float32' / 'float64' / 'nat' / 'int' / 'blob'
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              rule ic_base_type_pair
         | 
| 32 | 
            +
                space? base_type_key space? ':' space? base_type_value ';'? <IcAgent::Ast::Nodes::IcBaseTypeChild>
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
              rule ic_base_type_key
         | 
| 36 | 
            +
                space? base_type_key space? ';'? <IcAgent::Ast::Nodes::IcBaseTypeChild>
         | 
| 37 | 
            +
              end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
              rule ic_base_type_value
         | 
| 40 | 
            +
                base_type_value space? ';'? <IcAgent::Ast::Nodes::IcBaseTypeChild>
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
              rule base_type_base
         | 
| 44 | 
            +
                base_type_single+ <IcAgent::Ast::Nodes::IcBaseTypeSingle>
         | 
| 45 | 
            +
              end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
              rule base_type_code
         | 
| 48 | 
            +
                [a-zA-Z0-9_]+ <IcAgent::Ast::Nodes::IcBaseTypeOther>
         | 
| 49 | 
            +
              end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
              rule base_type_key
         | 
| 52 | 
            +
                [a-zA-Z0-9_]+ <IcAgent::Ast::Nodes::IcBaseTypeKey>
         | 
| 53 | 
            +
              end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
              rule base_type_value
         | 
| 56 | 
            +
                space? ic_all_type <IcAgent::Ast::Nodes::IcBaseTypeValue>
         | 
| 57 | 
            +
              end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
              rule base_type_vec
         | 
| 60 | 
            +
                'vec' space ic_all_type <IcAgent::Ast::Nodes::IcBaseTypeVec>
         | 
| 61 | 
            +
              end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
              rule base_type_opt
         | 
| 64 | 
            +
                'opt' space ic_all_type <IcAgent::Ast::Nodes::IcBaseTypeOpt>
         | 
| 65 | 
            +
              end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
              rule base_type_record
         | 
| 68 | 
            +
                'record' space '{' space_and_line? record_statement_content space_and_line? '}' <IcAgent::Ast::Nodes::IcBaseTypeRecord>
         | 
| 69 | 
            +
              end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
              rule base_type_record_null
         | 
| 72 | 
            +
                'record {}' <IcAgent::Ast::Nodes::IcBaseTypeRecord>
         | 
| 73 | 
            +
              end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
              rule base_type_variant
         | 
| 76 | 
            +
                'variant' space '{' space_and_line variant_statement_content space_and_line '}' <IcAgent::Ast::Nodes::IcBaseTypeVariant>
         | 
| 77 | 
            +
              end
         | 
| 78 | 
            +
             | 
| 79 | 
            +
              rule base_type_func
         | 
| 80 | 
            +
                'func' space? "(" service_method_params? ")" space? "->" space? "(" service_method_return_type ")" space? method_query? <IcAgent::Ast::Nodes::IcBaseTypeFunc>
         | 
| 81 | 
            +
              end
         | 
| 82 | 
            +
             | 
| 83 | 
            +
              rule service_method_params
         | 
| 84 | 
            +
                source_coding / refer_coding
         | 
| 85 | 
            +
              end
         | 
| 86 | 
            +
             | 
| 87 | 
            +
              rule service_method_return_type
         | 
| 88 | 
            +
                [a-zA-Z0-9_{}:;\n ]* <IcAgent::Ast::Nodes::IcServiceMethodReturn>
         | 
| 89 | 
            +
              end
         | 
| 90 | 
            +
             | 
| 91 | 
            +
              rule refer_coding
         | 
| 92 | 
            +
                param_element (", " param_element)* <IcAgent::Ast::Nodes::IcServiceMethodParams>
         | 
| 93 | 
            +
              end
         | 
| 94 | 
            +
             | 
| 95 | 
            +
              rule source_coding
         | 
| 96 | 
            +
                [a-zA-Z0-9_{}:;\n ]* <IcAgent::Ast::Nodes::IcServiceMethodParams>
         | 
| 97 | 
            +
              end
         | 
| 98 | 
            +
             | 
| 99 | 
            +
              rule param_element
         | 
| 100 | 
            +
                [a-zA-Z0-9_ ]+
         | 
| 101 | 
            +
              end
         | 
| 102 | 
            +
             | 
| 103 | 
            +
              rule method_query
         | 
| 104 | 
            +
                [a-zA-Z0-9]* <IcAgent::Ast::Nodes::IcServiceMethodQuery>
         | 
| 105 | 
            +
              end
         | 
| 106 | 
            +
             | 
| 107 | 
            +
              rule space_and_line
         | 
| 108 | 
            +
                [\s\n]*
         | 
| 109 | 
            +
              end
         | 
| 110 | 
            +
             | 
| 111 | 
            +
              rule space
         | 
| 112 | 
            +
                [\s]+
         | 
| 113 | 
            +
              end
         | 
| 114 | 
            +
             | 
| 115 | 
            +
              rule optional_semicolon
         | 
| 116 | 
            +
                [;]*
         | 
| 117 | 
            +
              end
         | 
| 118 | 
            +
            end
         | 
| @@ -19,6 +19,10 @@ module IcAgent | |
| 19 19 | 
             
                    def elements_to_s
         | 
| 20 20 | 
             
                      elements.map(&:to_s).join("\n")
         | 
| 21 21 | 
             
                    end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                    def source_content
         | 
| 24 | 
            +
                      self.text_value.strip
         | 
| 25 | 
            +
                    end
         | 
| 22 26 | 
             
                  end
         | 
| 23 27 |  | 
| 24 28 | 
             
                  class Instruction < NamedNode
         | 
| @@ -57,11 +61,11 @@ module IcAgent | |
| 57 61 | 
             
                    end
         | 
| 58 62 |  | 
| 59 63 | 
             
                    def type_param_name
         | 
| 60 | 
            -
                      elements[0]. | 
| 64 | 
            +
                      elements[0].source_content
         | 
| 61 65 | 
             
                    end
         | 
| 62 66 |  | 
| 63 67 | 
             
                    def type_param_content
         | 
| 64 | 
            -
                      elements[1]. | 
| 68 | 
            +
                      elements[1].source_content.gsub("\n", '').gsub(';}', '}')
         | 
| 65 69 | 
             
                    end
         | 
| 66 70 |  | 
| 67 71 | 
             
                    def type_root_opt_code
         | 
| @@ -84,59 +88,12 @@ module IcAgent | |
| 84 88 | 
             
                      names
         | 
| 85 89 | 
             
                    end
         | 
| 86 90 |  | 
| 87 | 
            -
                    def  | 
| 88 | 
            -
                       | 
| 89 | 
            -
                       | 
| 90 | 
            -
             | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 | 
            -
                        modified_str = ele.text_value.gsub("\n", '').gsub(/record\s*{[^{}]*}/) do |match|
         | 
| 94 | 
            -
                          rad_id = rand(100000..999999)
         | 
| 95 | 
            -
                          type_name = "record_#{rad_id}"
         | 
| 96 | 
            -
                          replaced_hash[type_name] = match
         | 
| 97 | 
            -
                          type_name
         | 
| 98 | 
            -
                        end
         | 
| 99 | 
            -
                        modified_str = modified_str.gsub(/variant\s*{[^{}]*}/) do |match|
         | 
| 100 | 
            -
                          rad_id = rand(100000..999999)
         | 
| 101 | 
            -
                          type_name = "variant_#{rad_id}"
         | 
| 102 | 
            -
                          replaced_hash[type_name] = match
         | 
| 103 | 
            -
                          type_name
         | 
| 104 | 
            -
                        end
         | 
| 105 | 
            -
                        replaced_hash.each_key do |key|
         | 
| 106 | 
            -
                          item_arr = replaced_hash[key].strip.split(';')
         | 
| 107 | 
            -
                          item_arr.each do |item|
         | 
| 108 | 
            -
                            multi_item_arr = item.strip.split(':')
         | 
| 109 | 
            -
                            if multi_item_arr.size > 1
         | 
| 110 | 
            -
                              item_value_arr = multi_item_arr[1].strip.split(' ').collect { |v| v.strip.gsub(';', '') }
         | 
| 111 | 
            -
                              item_value_arr.delete('{')
         | 
| 112 | 
            -
                              item_value_arr.delete('}')
         | 
| 113 | 
            -
                              item_value_arr.delete('{}')
         | 
| 114 | 
            -
                              values << item_value_arr
         | 
| 115 | 
            -
                            else
         | 
| 116 | 
            -
                              values << []
         | 
| 117 | 
            -
                            end
         | 
| 118 | 
            -
                          end
         | 
| 119 | 
            -
                        end
         | 
| 120 | 
            -
             | 
| 121 | 
            -
                        # get root type value
         | 
| 122 | 
            -
                        item_arr = modified_str.strip.split(':')
         | 
| 123 | 
            -
                        if item_arr.size > 1
         | 
| 124 | 
            -
                          item_value_arr = item_arr[1].strip.split(' ').collect { |v| v.strip.gsub(';', '') }
         | 
| 125 | 
            -
                          item_value_arr.delete('{')
         | 
| 126 | 
            -
                          item_value_arr.delete('}')
         | 
| 127 | 
            -
                          item_value_arr.delete('{}')
         | 
| 128 | 
            -
                          item_value_arr -= replaced_hash.keys
         | 
| 129 | 
            -
                          values << item_value_arr
         | 
| 130 | 
            -
                        else
         | 
| 131 | 
            -
                          values << []
         | 
| 132 | 
            -
                        end
         | 
| 133 | 
            -
                      end
         | 
| 134 | 
            -
                      values
         | 
| 135 | 
            -
                    end
         | 
| 136 | 
            -
             | 
| 137 | 
            -
                    def type_child_refer_items
         | 
| 138 | 
            -
                      child_args = type_child_item_values.flatten - IcAgent::Candid::ALL_TYPES
         | 
| 139 | 
            -
                      child_args.uniq
         | 
| 91 | 
            +
                    def type_refer_items
         | 
| 92 | 
            +
                      source_string = self.type_param_content
         | 
| 93 | 
            +
                      parser = IcAgent::Ast::StatementParser.new
         | 
| 94 | 
            +
                      parser.parse(source_string)
         | 
| 95 | 
            +
                      refer_type = parser.source_tree.content[:refer_type]
         | 
| 96 | 
            +
                      refer_type
         | 
| 140 97 | 
             
                    end
         | 
| 141 98 |  | 
| 142 99 | 
             
                    def to_s
         | 
| @@ -148,7 +105,7 @@ module IcAgent | |
| 148 105 | 
             
                        'type_param_name' => type_param_name,
         | 
| 149 106 | 
             
                        'type_root_opt_code' => type_root_opt_code,
         | 
| 150 107 | 
             
                        'type_child_item_keys' => type_child_item_keys,
         | 
| 151 | 
            -
                        'type_child_item_values' =>  | 
| 108 | 
            +
                        'type_child_item_values' => type_refer_items
         | 
| 152 109 | 
             
                      }
         | 
| 153 110 | 
             
                    end
         | 
| 154 111 | 
             
                  end
         | 
| @@ -349,7 +306,7 @@ module IcAgent | |
| 349 306 | 
             
                    def to_obj
         | 
| 350 307 | 
             
                      obj = {}
         | 
| 351 308 | 
             
                      elements.each do |element|
         | 
| 352 | 
            -
                        obj[element.title.to_s] = element.text_value
         | 
| 309 | 
            +
                        obj[element.title.to_s] = element.text_value.gsub("\n", '')
         | 
| 353 310 | 
             
                      end
         | 
| 354 311 | 
             
                      obj
         | 
| 355 312 | 
             
                    end
         | 
| @@ -404,6 +361,16 @@ module IcAgent | |
| 404 361 | 
             
                      elements_to_s
         | 
| 405 362 | 
             
                    end
         | 
| 406 363 | 
             
                  end
         | 
| 364 | 
            +
             | 
| 365 | 
            +
                  class BaseTypeContent < NamedNode
         | 
| 366 | 
            +
                    def title
         | 
| 367 | 
            +
                      :ic_service_method_query
         | 
| 368 | 
            +
                    end
         | 
| 369 | 
            +
             | 
| 370 | 
            +
                    def to_s
         | 
| 371 | 
            +
                      elements_to_s
         | 
| 372 | 
            +
                    end
         | 
| 373 | 
            +
                  end
         | 
| 407 374 | 
             
                end
         | 
| 408 375 | 
             
              end
         | 
| 409 376 | 
             
            end
         | 
| @@ -0,0 +1,224 @@ | |
| 1 | 
            +
            require 'treetop'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module IcAgent
         | 
| 4 | 
            +
              module Ast
         | 
| 5 | 
            +
                module Nodes
         | 
| 6 | 
            +
                  class StatementNode < Treetop::Runtime::SyntaxNode
         | 
| 7 | 
            +
                    attr_accessor :child_count, :depth
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                    def title
         | 
| 10 | 
            +
                      :named_node
         | 
| 11 | 
            +
                    end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    def to_array
         | 
| 14 | 
            +
                      [title] + elements.map(&:to_array)
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    def to_s
         | 
| 18 | 
            +
                      "#{title.to_s.upcase} #{elements_to_s}"
         | 
| 19 | 
            +
                    end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    def elements_to_s
         | 
| 22 | 
            +
                      elements.map(&:to_s).join("\n")
         | 
| 23 | 
            +
                    end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    def add_child
         | 
| 26 | 
            +
                      @child_count ||= 0 + 1
         | 
| 27 | 
            +
                    end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                    def source_content
         | 
| 30 | 
            +
                      self.text_value.strip
         | 
| 31 | 
            +
                    end
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  class IcBaseType < StatementNode
         | 
| 35 | 
            +
                    def title
         | 
| 36 | 
            +
                      :base_type
         | 
| 37 | 
            +
                    end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                    def to_s
         | 
| 40 | 
            +
                      elements_to_s
         | 
| 41 | 
            +
                    end
         | 
| 42 | 
            +
                  end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                  class IcBaseTypeSingle < StatementNode
         | 
| 45 | 
            +
                    def title
         | 
| 46 | 
            +
                      :base_type_single
         | 
| 47 | 
            +
                    end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                    def to_s
         | 
| 50 | 
            +
                      elements_to_s
         | 
| 51 | 
            +
                    end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                    def opt_code
         | 
| 54 | 
            +
                      'single'
         | 
| 55 | 
            +
                    end
         | 
| 56 | 
            +
                  end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                  class IcBaseTypeRecord < StatementNode
         | 
| 59 | 
            +
                    def title
         | 
| 60 | 
            +
                      :base_type_record
         | 
| 61 | 
            +
                    end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                    def to_s
         | 
| 64 | 
            +
                      elements_to_s
         | 
| 65 | 
            +
                    end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                    def opt_code
         | 
| 68 | 
            +
                      'record'
         | 
| 69 | 
            +
                    end
         | 
| 70 | 
            +
                  end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                  class IcBaseTypeKey < StatementNode
         | 
| 73 | 
            +
                    def title
         | 
| 74 | 
            +
                      :base_type_key
         | 
| 75 | 
            +
                    end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                    def to_s
         | 
| 78 | 
            +
                      elements_to_s
         | 
| 79 | 
            +
                    end
         | 
| 80 | 
            +
                  end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                  class IcBaseTypeValue < StatementNode
         | 
| 83 | 
            +
                    def title
         | 
| 84 | 
            +
                      :base_type_value
         | 
| 85 | 
            +
                    end
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                    def to_s
         | 
| 88 | 
            +
                      elements_to_s
         | 
| 89 | 
            +
                    end
         | 
| 90 | 
            +
                  end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                  class IcTypeDef < StatementNode
         | 
| 93 | 
            +
                    def title
         | 
| 94 | 
            +
                      :base_type_def
         | 
| 95 | 
            +
                    end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                    def to_s
         | 
| 98 | 
            +
                      elements_to_s
         | 
| 99 | 
            +
                    end
         | 
| 100 | 
            +
                  end
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                  class IcBaseTypeVariant < StatementNode
         | 
| 103 | 
            +
                    def title
         | 
| 104 | 
            +
                      :base_type_variant
         | 
| 105 | 
            +
                    end
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                    def to_s
         | 
| 108 | 
            +
                      elements_to_s
         | 
| 109 | 
            +
                    end
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                    def opt_code
         | 
| 112 | 
            +
                      'variant'
         | 
| 113 | 
            +
                    end
         | 
| 114 | 
            +
                  end
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                  class IcBaseTypeFunc < StatementNode
         | 
| 117 | 
            +
                    def title
         | 
| 118 | 
            +
                      :base_type_func
         | 
| 119 | 
            +
                    end
         | 
| 120 | 
            +
             | 
| 121 | 
            +
                    def to_s
         | 
| 122 | 
            +
                      elements_to_s
         | 
| 123 | 
            +
                    end
         | 
| 124 | 
            +
             | 
| 125 | 
            +
                    def opt_code
         | 
| 126 | 
            +
                      'func'
         | 
| 127 | 
            +
                    end
         | 
| 128 | 
            +
                  end
         | 
| 129 | 
            +
             | 
| 130 | 
            +
                  class IcBaseTypeOpt < StatementNode
         | 
| 131 | 
            +
                    def title
         | 
| 132 | 
            +
                      :base_type_opt
         | 
| 133 | 
            +
                    end
         | 
| 134 | 
            +
             | 
| 135 | 
            +
                    def to_s
         | 
| 136 | 
            +
                      elements_to_s
         | 
| 137 | 
            +
                    end
         | 
| 138 | 
            +
             | 
| 139 | 
            +
                    def opt_code
         | 
| 140 | 
            +
                      'opt'
         | 
| 141 | 
            +
                    end
         | 
| 142 | 
            +
                  end
         | 
| 143 | 
            +
             | 
| 144 | 
            +
                  class IcBaseTypeVec < StatementNode
         | 
| 145 | 
            +
                    def title
         | 
| 146 | 
            +
                      :base_type_vec
         | 
| 147 | 
            +
                    end
         | 
| 148 | 
            +
             | 
| 149 | 
            +
                    def to_s
         | 
| 150 | 
            +
                      elements_to_s
         | 
| 151 | 
            +
                    end
         | 
| 152 | 
            +
             | 
| 153 | 
            +
                    def opt_code
         | 
| 154 | 
            +
                      'vec'
         | 
| 155 | 
            +
                    end
         | 
| 156 | 
            +
                  end
         | 
| 157 | 
            +
             | 
| 158 | 
            +
                  class IcBaseTypeOther < StatementNode
         | 
| 159 | 
            +
                    def title
         | 
| 160 | 
            +
                      :base_type_other
         | 
| 161 | 
            +
                    end
         | 
| 162 | 
            +
             | 
| 163 | 
            +
                    def to_s
         | 
| 164 | 
            +
                      elements_to_s
         | 
| 165 | 
            +
                    end
         | 
| 166 | 
            +
             | 
| 167 | 
            +
                    def opt_code
         | 
| 168 | 
            +
                      text_value
         | 
| 169 | 
            +
                    end
         | 
| 170 | 
            +
                  end
         | 
| 171 | 
            +
             | 
| 172 | 
            +
                  class IcBaseTypeContent < StatementNode
         | 
| 173 | 
            +
                    def title
         | 
| 174 | 
            +
                      :base_type_content
         | 
| 175 | 
            +
                    end
         | 
| 176 | 
            +
             | 
| 177 | 
            +
                    def to_s
         | 
| 178 | 
            +
                      elements_to_s
         | 
| 179 | 
            +
                    end
         | 
| 180 | 
            +
                  end
         | 
| 181 | 
            +
             | 
| 182 | 
            +
                  class IcBaseTypeChild < StatementNode
         | 
| 183 | 
            +
                    def title
         | 
| 184 | 
            +
                      :base_type_child
         | 
| 185 | 
            +
                    end
         | 
| 186 | 
            +
             | 
| 187 | 
            +
                    def to_s
         | 
| 188 | 
            +
                      elements_to_s
         | 
| 189 | 
            +
                    end
         | 
| 190 | 
            +
                  end
         | 
| 191 | 
            +
             | 
| 192 | 
            +
                  class IcTypeName < StatementNode
         | 
| 193 | 
            +
                    def title
         | 
| 194 | 
            +
                      :type_name
         | 
| 195 | 
            +
                    end
         | 
| 196 | 
            +
             | 
| 197 | 
            +
                    def to_s
         | 
| 198 | 
            +
                      elements_to_s
         | 
| 199 | 
            +
                    end
         | 
| 200 | 
            +
                  end
         | 
| 201 | 
            +
             | 
| 202 | 
            +
                  class StatementBlock < StatementNode
         | 
| 203 | 
            +
                    def title
         | 
| 204 | 
            +
                      :statement_block
         | 
| 205 | 
            +
                    end
         | 
| 206 | 
            +
             | 
| 207 | 
            +
                    def to_s
         | 
| 208 | 
            +
                      elements_to_s
         | 
| 209 | 
            +
                    end
         | 
| 210 | 
            +
                  end
         | 
| 211 | 
            +
             | 
| 212 | 
            +
                  class StatementContent < StatementNode
         | 
| 213 | 
            +
                    def title
         | 
| 214 | 
            +
                      :statement_content
         | 
| 215 | 
            +
                    end
         | 
| 216 | 
            +
             | 
| 217 | 
            +
                    def to_s
         | 
| 218 | 
            +
                      elements_to_s
         | 
| 219 | 
            +
                    end
         | 
| 220 | 
            +
                  end
         | 
| 221 | 
            +
                end
         | 
| 222 | 
            +
              end
         | 
| 223 | 
            +
            end
         | 
| 224 | 
            +
             | 
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            grammar RecordParser
         | 
| 2 | 
            +
              # record { key1: text; key2: 42; value1; value2; }
         | 
| 3 | 
            +
              rule record
         | 
| 4 | 
            +
                'record' space '{' space? (pair / value)* space? '}' <IcAgent::Ast::Nodes::IcBaseTypeRecord>
         | 
| 5 | 
            +
              end
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              rule pair
         | 
| 8 | 
            +
                space? identifier space? ':' space? identifier ';' <IcAgent::Ast::Nodes::IcBaseTypeChild>
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              rule value
         | 
| 12 | 
            +
                space? identifier ';' <IcAgent::Ast::Nodes::IcBaseTypeChild>
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              rule identifier
         | 
| 16 | 
            +
                [a-zA-Z0-9_]*
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              rule space
         | 
| 20 | 
            +
                [\s]+
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
            end
         | 
| @@ -0,0 +1,101 @@ | |
| 1 | 
            +
            require 'treetop'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module IcAgent
         | 
| 4 | 
            +
              module Ast
         | 
| 5 | 
            +
                class StatementParser
         | 
| 6 | 
            +
                  attr_accessor :parser, :tree, :source_tree
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  REFER_TYPE_CLASS = ['IcAgent::Ast::Nodes::IcBaseTypeRecord',
         | 
| 9 | 
            +
                                      'IcAgent::Ast::Nodes::IcBaseTypeVariant',
         | 
| 10 | 
            +
                                      'IcAgent::Ast::Nodes::IcBaseTypeVec',
         | 
| 11 | 
            +
                                      'IcAgent::Ast::Nodes::IcBaseTypeOpt']
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  TREE_TYPE_CLASS = ['IcAgent::Ast::Nodes::IcBaseTypeRecord',
         | 
| 14 | 
            +
                                     'IcAgent::Ast::Nodes::IcBaseTypeVariant',
         | 
| 15 | 
            +
                                     'IcAgent::Ast::Nodes::IcBaseTypeVec',
         | 
| 16 | 
            +
                                     'IcAgent::Ast::Nodes::IcBaseTypeFunc',
         | 
| 17 | 
            +
                                     'IcAgent::Ast::Nodes::IcBaseTypeOpt',
         | 
| 18 | 
            +
                                     'IcAgent::Ast::Nodes::IcBaseTypeSingle',
         | 
| 19 | 
            +
                                     'IcAgent::Ast::Nodes::IcBaseTypeOther']
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  REFER_TYPE_KEYS = ['record', 'variant']
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  def initialize
         | 
| 24 | 
            +
                    Treetop.load(File.expand_path(File.join(File.dirname(__FILE__), 'nested_type_grammar.treetop')))
         | 
| 25 | 
            +
                    @parser = TypeGrammarParser.new
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  def parse(data, return_type = :string)
         | 
| 29 | 
            +
                    tree = @parser.parse(data)
         | 
| 30 | 
            +
                    raise Exception, "Parse error at offset: #{@parser.index} #{@parser.failure_reason}" if tree.nil?
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                    # this edits the tree in place
         | 
| 33 | 
            +
                    clean_tree(tree)
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                    # generate soure tree
         | 
| 36 | 
            +
                    gen_source_tree(tree)
         | 
| 37 | 
            +
                    @tree = tree
         | 
| 38 | 
            +
                    tree
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                  def clean_tree(root_node)
         | 
| 42 | 
            +
                    return if root_node.elements.nil?
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                    root_node.elements.delete_if { |node| node.class.name == 'Treetop::Runtime::SyntaxNode' and node.parent.class.name != 'IcAgent::Ast::Nodes::IcBaseTypeValue' and node.parent.class.name != "IcAgent::Ast::Nodes::IcTypeDef" }
         | 
| 45 | 
            +
                    root_node.elements.each { |node| self.clean_tree(node) }
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                  # @param [Object] root_node
         | 
| 49 | 
            +
                  # @param [nil] tree_root_node
         | 
| 50 | 
            +
                  # @param [nil] tree_current_node
         | 
| 51 | 
            +
                  def gen_source_tree(root_node, tree_root_node = nil, tree_current_node = nil)
         | 
| 52 | 
            +
                    return if root_node.elements.nil?
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                    tree_root_node = tree_root_node.nil? ? Tree::TreeNode.new('root', { 'total_child': 0, 'ic_type': nil, 'refer_type': [], 'prototype': root_node.source_content, 'content': root_node.source_content }) : tree_root_node
         | 
| 55 | 
            +
                    tree_current_node = tree_current_node.nil? ? tree_root_node : tree_current_node
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                    root_node.elements.each do |node|
         | 
| 58 | 
            +
                      if TREE_TYPE_CLASS.include?(node.class.name) && node.source_content != tree_root_node.content[:prototype]
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                        id = tree_root_node.content[:total_child] + 1
         | 
| 61 | 
            +
                        new_tree_node = Tree::TreeNode.new("node_#{id}", { 'total_child': 0, 'ic_type': nil, 'prototype': root_node.source_content, 'content': root_node.source_content })
         | 
| 62 | 
            +
                        tree_current_node << new_tree_node
         | 
| 63 | 
            +
                        tree_root_node.content[:total_child] = id
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                        # set refer_type
         | 
| 66 | 
            +
                        unless Regexp.union(REFER_TYPE_KEYS) === root_node.source_content
         | 
| 67 | 
            +
                          # func type content
         | 
| 68 | 
            +
                          if root_node.source_content.index('->')
         | 
| 69 | 
            +
                            param_arr = []
         | 
| 70 | 
            +
                            temp_param_arr = root_node.source_content.strip.split(' ').collect { |v| v.strip.gsub(';', '') }
         | 
| 71 | 
            +
                            temp_param_arr.delete_if {|v| !v.index('(') && !v.index(')') }
         | 
| 72 | 
            +
                            temp_param_arr.each {|v| param_arr = param_arr + v.sub('(', '').sub(')', '').split(',')}
         | 
| 73 | 
            +
                          else
         | 
| 74 | 
            +
                            param_arr = root_node.source_content.strip.split(' ').collect { |v| v.strip.gsub(';', '') }
         | 
| 75 | 
            +
                            param_arr = param_arr - IcAgent::Candid::ALL_TYPES
         | 
| 76 | 
            +
                          end
         | 
| 77 | 
            +
                          tree_root_node.content[:refer_type] = (tree_root_node.content[:refer_type] + param_arr).uniq
         | 
| 78 | 
            +
                        end
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                        self.source_tree = tree_root_node
         | 
| 81 | 
            +
                        self.gen_source_tree(node, tree_root_node, new_tree_node)
         | 
| 82 | 
            +
                      else
         | 
| 83 | 
            +
                        self.gen_source_tree(node, tree_root_node, tree_current_node)
         | 
| 84 | 
            +
                      end
         | 
| 85 | 
            +
                    end
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                    self.source_tree = tree_root_node
         | 
| 88 | 
            +
                  end
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                  def ic_statement_root
         | 
| 91 | 
            +
                    tree.elements[0]
         | 
| 92 | 
            +
                  end
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                  def ic_statement_childs
         | 
| 95 | 
            +
                    if tree.elements[0] && tree.elements[0].elements[0].elements[0]
         | 
| 96 | 
            +
                      tree.elements[0].elements[0].elements[0].elements
         | 
| 97 | 
            +
                    end
         | 
| 98 | 
            +
                  end
         | 
| 99 | 
            +
                end
         | 
| 100 | 
            +
              end
         | 
| 101 | 
            +
            end
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            grammar VariantParser
         | 
| 2 | 
            +
              rule variant
         | 
| 3 | 
            +
                'variant' space? '{' space? (pair / key)* space? '}' <IcAgent::Ast::Nodes::IcBaseTypeVariant>
         | 
| 4 | 
            +
              end
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              rule pair
         | 
| 7 | 
            +
                space? identifier space? ':' space? identifier ';' <IcAgent::Ast::Nodes::IcBaseTypeChild>
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              rule key
         | 
| 11 | 
            +
                space? identifier ';' <IcAgent::Ast::Nodes::IcBaseTypeChild>
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              rule identifier
         | 
| 15 | 
            +
                [a-zA-Z0-9_]*
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              rule space
         | 
| 19 | 
            +
                [\s]+
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
            end
         | 
    
        data/lib/ic_agent/canister.rb
    CHANGED
    
    | @@ -33,9 +33,14 @@ module IcAgent | |
| 33 33 | 
             
                    args_arr.each do |arg|
         | 
| 34 34 | 
             
                      args_type_arrs << get_param_to_ic_type(parser, arg)
         | 
| 35 35 | 
             
                    end
         | 
| 36 | 
            -
                    ret_type = get_param_to_ic_type(parser, rets)
         | 
| 37 36 |  | 
| 38 | 
            -
                     | 
| 37 | 
            +
                    rets_arr = rets.nil? ? [] : rets.split(',').map(&:strip)
         | 
| 38 | 
            +
                    rets_type_arr = []
         | 
| 39 | 
            +
                    rets_arr.each do |ret|
         | 
| 40 | 
            +
                      rets_type_arr << get_param_to_ic_type(parser, ret)
         | 
| 41 | 
            +
                    end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                    add_caniter_method(method_name, args, args_type_arrs, rets_type_arr, anno)
         | 
| 39 44 | 
             
                  end
         | 
| 40 45 | 
             
                end
         | 
| 41 46 |  | 
| @@ -69,7 +74,7 @@ module IcAgent | |
| 69 74 | 
             
                def build_param_tree(parser, type_name, current_node = nil, tree_root_node = nil)
         | 
| 70 75 | 
             
                  if current_node.nil?
         | 
| 71 76 | 
             
                    root_type = parser.ic_type_by_name(type_name)
         | 
| 72 | 
            -
                    refer_nodes = root_type. | 
| 77 | 
            +
                    refer_nodes = root_type.type_refer_items.nil? ? [] : root_type.type_refer_items
         | 
| 73 78 | 
             
                    root_node = Tree::TreeNode.new(type_name,
         | 
| 74 79 | 
             
                                                   { 'total_child': refer_nodes.size,
         | 
| 75 80 | 
             
                                                     'all_child': refer_nodes,
         | 
| @@ -119,7 +124,7 @@ module IcAgent | |
| 119 124 | 
             
                      else
         | 
| 120 125 | 
             
                        # non self refer
         | 
| 121 126 | 
             
                        child_type = parser.ic_type_by_name(refer_node)
         | 
| 122 | 
            -
                        child_refer_nodes = child_type. | 
| 127 | 
            +
                        child_refer_nodes = child_type.type_refer_items
         | 
| 123 128 | 
             
                        if child_refer_nodes.size == 0
         | 
| 124 129 | 
             
                          # set ic type
         | 
| 125 130 | 
             
                          ic_type = IcAgent::Ast::Assembler.build_type(child_type.type_param_content)
         | 
| @@ -183,14 +188,11 @@ module IcAgent | |
| 183 188 | 
             
                  refer_type.empty? ? nil : refer_type[0]
         | 
| 184 189 | 
             
                end
         | 
| 185 190 |  | 
| 186 | 
            -
                def only_refer_type?(param)
         | 
| 187 | 
            -
                  refer_types = IcAgent::Ast::Assembler.get_params_refer_values(param)
         | 
| 188 | 
            -
                  param.index(' ').nil? && refer_types.size == 1
         | 
| 189 | 
            -
                end
         | 
| 190 | 
            -
             | 
| 191 191 | 
             
                def get_param_to_ic_type(parser, param)
         | 
| 192 192 | 
             
                  ic_refer_types = {}
         | 
| 193 193 | 
             
                  refer_types = IcAgent::Ast::Assembler.get_params_refer_values(param)
         | 
| 194 | 
            +
                  # param self is refer_values
         | 
| 195 | 
            +
                  refer_types << param unless param.index(' ') || IcAgent::Candid::ALL_TYPES.any?(param)
         | 
| 194 196 | 
             
                  refer_types.each do |refer_code|
         | 
| 195 197 | 
             
                    ic_refer_types[refer_code] = build_param_tree(parser, refer_code, nil, nil).content[:ic_type]
         | 
| 196 198 | 
             
                  end
         | 
| @@ -235,14 +237,14 @@ module IcAgent | |
| 235 237 | 
             
                  new_root_text
         | 
| 236 238 | 
             
                end
         | 
| 237 239 |  | 
| 238 | 
            -
                def add_caniter_method(method_name, type_args, args_types,  | 
| 240 | 
            +
                def add_caniter_method(method_name, type_args, args_types, rets_types, anno = nil)
         | 
| 239 241 | 
             
                  self.class.class_eval do
         | 
| 240 242 | 
             
                    define_method(method_name) do |*args|
         | 
| 241 243 | 
             
                      init_method_name = method_name
         | 
| 242 244 | 
             
                      init_method_args = type_args.nil? ? [] : type_args.split(',').map(&:strip)
         | 
| 243 245 | 
             
                      init_method_anno = anno
         | 
| 244 246 | 
             
                      init_method_types = args_types
         | 
| 245 | 
            -
                      init_method_ret_type =  | 
| 247 | 
            +
                      init_method_ret_type = rets_types
         | 
| 246 248 |  | 
| 247 249 | 
             
                      if init_method_args.length != args.length
         | 
| 248 250 | 
             
                        raise ArgumentError, 'Arguments length not match'
         | 
| @@ -228,7 +228,7 @@ module IcAgent | |
| 228 228 | 
             
                      wallet_balance128: () -> (record { amount: nat }) query;
         | 
| 229 229 | 
             
                      wallet_send: (record { canister: principal; amount: nat64 }) -> (WalletResult);
         | 
| 230 230 | 
             
                      wallet_send128: (record { canister: principal; amount: nat }) -> (WalletResult);
         | 
| 231 | 
            -
                      wallet_receive: (opt ReceiveOptions) -> (); | 
| 231 | 
            +
                      wallet_receive: (opt ReceiveOptions) -> ();
         | 
| 232 232 | 
             
                      wallet_create_canister: (CreateCanisterArgs) -> (WalletResultCreate);
         | 
| 233 233 | 
             
                      wallet_create_canister128: (CreateCanisterArgs128) -> (WalletResultCreate);
         | 
| 234 234 | 
             
                      wallet_create_wallet: (CreateCanisterArgs) -> (WalletResultCreate);
         | 
| @@ -248,9 +248,7 @@ module IcAgent | |
| 248 248 | 
             
                        args: blob;
         | 
| 249 249 | 
             
                        cycles: nat;
         | 
| 250 250 | 
             
                      }) -> (WalletResultCall);
         | 
| 251 | 
            -
                      add_address: (address: AddressEntry) -> ();
         | 
| 252 251 | 
             
                      list_addresses: () -> (vec AddressEntry) query;
         | 
| 253 | 
            -
                      remove_address: (address: principal) -> (WalletResult);
         | 
| 254 252 | 
             
                      get_events: (opt record { from: opt nat32; to: opt nat32; }) -> (vec Event) query;
         | 
| 255 253 | 
             
                      get_events128: (opt record { from: opt nat32; to: opt nat32; }) -> (vec Event128) query;
         | 
| 256 254 | 
             
                      get_chart: (opt record { count: opt nat32; precision: opt nat64; } ) -> (vec record { nat64; nat64; }) query;
         | 
| @@ -258,7 +256,6 @@ module IcAgent | |
| 258 256 | 
             
                      get_managed_canister_events: (record { canister: principal; from: opt nat32; to: opt nat32; }) -> (opt vec ManagedCanisterEvent) query;
         | 
| 259 257 | 
             
                      get_managed_canister_events128: (record { canister: principal; from: opt nat32; to: opt nat32; }) -> (opt vec ManagedCanisterEvent128) query;
         | 
| 260 258 | 
             
                      set_short_name: (principal, opt text) -> (opt ManagedCanisterInfo);
         | 
| 261 | 
            -
                      http_request: (request: HttpRequest) -> (HttpResponse) query;
         | 
| 262 259 | 
             
                    }
         | 
| 263 260 | 
             
                  DIDL_DOC
         | 
| 264 261 |  | 
| @@ -4,7 +4,6 @@ module IcAgent | |
| 4 4 | 
             
                  CANISTER_ID = 'aaaaa-aa'
         | 
| 5 5 | 
             
                  DID_FILE = <<~DIDL_DOC
         | 
| 6 6 | 
             
                    type canister_id = principal;
         | 
| 7 | 
            -
                    type user_id = principal;
         | 
| 8 7 | 
             
                    type wasm_module = blob;
         | 
| 9 8 |  | 
| 10 9 | 
             
                    type canister_settings = record {
         | 
| @@ -21,21 +20,117 @@ module IcAgent | |
| 21 20 | 
             
                      freezing_threshold : nat;
         | 
| 22 21 | 
             
                    };
         | 
| 23 22 |  | 
| 24 | 
            -
                     | 
| 23 | 
            +
                    type change_origin = variant {
         | 
| 24 | 
            +
                      from_user : record {
         | 
| 25 | 
            +
                        user_id : principal;
         | 
| 26 | 
            +
                      };
         | 
| 27 | 
            +
                      from_canister : record {
         | 
| 28 | 
            +
                        canister_id : principal;
         | 
| 29 | 
            +
                        canister_version : opt nat64;
         | 
| 30 | 
            +
                      };
         | 
| 31 | 
            +
                    };
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                    type change_details = variant {
         | 
| 34 | 
            +
                      creation : record {
         | 
| 35 | 
            +
                        controllers : vec principal;
         | 
| 36 | 
            +
                      };
         | 
| 37 | 
            +
                      code_uninstall;
         | 
| 38 | 
            +
                      code_deployment : record {
         | 
| 39 | 
            +
                        mode : variant {install; reinstall; upgrade};
         | 
| 40 | 
            +
                        module_hash : blob;
         | 
| 41 | 
            +
                      };
         | 
| 42 | 
            +
                      controllers_change : record {
         | 
| 43 | 
            +
                        controllers : vec principal;
         | 
| 44 | 
            +
                      };
         | 
| 45 | 
            +
                    };
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                    type change = record {
         | 
| 48 | 
            +
                      timestamp_nanos : nat64;
         | 
| 49 | 
            +
                      canister_version : nat64;
         | 
| 50 | 
            +
                      origin : change_origin;
         | 
| 51 | 
            +
                      details : change_details;
         | 
| 52 | 
            +
                    };
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                    type http_header = record { name: text; value: text };
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                    type ecdsa_curve = variant { secp256k1; };
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                    type satoshi = nat64;
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                    type bitcoin_network = variant {
         | 
| 61 | 
            +
                      mainnet;
         | 
| 62 | 
            +
                      testnet;
         | 
| 63 | 
            +
                    };
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                    type bitcoin_address = text;
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                    type block_hash = blob;
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                    type outpoint = record {
         | 
| 70 | 
            +
                      txid : blob;
         | 
| 71 | 
            +
                      vout : nat32
         | 
| 72 | 
            +
                    };
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                    type utxo = record {
         | 
| 75 | 
            +
                      outpoint: outpoint;
         | 
| 76 | 
            +
                      value: satoshi;
         | 
| 77 | 
            +
                      height: nat32;
         | 
| 78 | 
            +
                    };
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                    type get_utxos_request = record {
         | 
| 81 | 
            +
                      address : bitcoin_address;
         | 
| 82 | 
            +
                      network: bitcoin_network;
         | 
| 83 | 
            +
                      filter: opt variant {
         | 
| 84 | 
            +
                        min_confirmations: nat32;
         | 
| 85 | 
            +
                        page: blob;
         | 
| 86 | 
            +
                      };
         | 
| 87 | 
            +
                    };
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                    type get_current_fee_percentiles_request = record {
         | 
| 90 | 
            +
                      network: bitcoin_network;
         | 
| 91 | 
            +
                    };
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                    type get_utxos_response = record {
         | 
| 94 | 
            +
                      utxos: vec utxo;
         | 
| 95 | 
            +
                      tip_block_hash: block_hash;
         | 
| 96 | 
            +
                      tip_height: nat32;
         | 
| 97 | 
            +
                      next_page: opt blob;
         | 
| 98 | 
            +
                    };
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                    type get_balance_request = record {
         | 
| 101 | 
            +
                      address : bitcoin_address;
         | 
| 102 | 
            +
                      network: bitcoin_network;
         | 
| 103 | 
            +
                      min_confirmations: opt nat32;
         | 
| 104 | 
            +
                    };
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                    type send_transaction_request = record {
         | 
| 107 | 
            +
                      transaction: blob;
         | 
| 108 | 
            +
                      network: bitcoin_network;
         | 
| 109 | 
            +
                    };
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                    type millisatoshi_per_byte = nat64;
         | 
| 112 | 
            +
             | 
| 113 | 
            +
                    service : {
         | 
| 25 114 | 
             
                      create_canister : (record {
         | 
| 26 | 
            -
                        settings : opt canister_settings
         | 
| 115 | 
            +
                        settings : opt canister_settings;
         | 
| 116 | 
            +
                        sender_canister_version : opt nat64;
         | 
| 27 117 | 
             
                      }) -> (record {canister_id : canister_id});
         | 
| 28 118 | 
             
                      update_settings : (record {
         | 
| 29 119 | 
             
                        canister_id : principal;
         | 
| 30 | 
            -
                        settings : canister_settings
         | 
| 120 | 
            +
                        settings : canister_settings;
         | 
| 121 | 
            +
                        sender_canister_version : opt nat64;
         | 
| 31 122 | 
             
                      }) -> ();
         | 
| 32 123 | 
             
                      install_code : (record {
         | 
| 33 124 | 
             
                        mode : variant {install; reinstall; upgrade};
         | 
| 34 125 | 
             
                        canister_id : canister_id;
         | 
| 35 126 | 
             
                        wasm_module : wasm_module;
         | 
| 36 127 | 
             
                        arg : blob;
         | 
| 128 | 
            +
                        sender_canister_version : opt nat64;
         | 
| 129 | 
            +
                      }) -> ();
         | 
| 130 | 
            +
                      uninstall_code : (record {
         | 
| 131 | 
            +
                        canister_id : canister_id;
         | 
| 132 | 
            +
                        sender_canister_version : opt nat64;
         | 
| 37 133 | 
             
                      }) -> ();
         | 
| 38 | 
            -
                      uninstall_code : (record {canister_id : canister_id}) -> ();
         | 
| 39 134 | 
             
                      start_canister : (record {canister_id : canister_id}) -> ();
         | 
| 40 135 | 
             
                      stop_canister : (record {canister_id : canister_id}) -> ();
         | 
| 41 136 | 
             
                      canister_status : (record {canister_id : canister_id}) -> (record {
         | 
| @@ -44,12 +139,41 @@ module IcAgent | |
| 44 139 | 
             
                          module_hash: opt blob;
         | 
| 45 140 | 
             
                          memory_size: nat;
         | 
| 46 141 | 
             
                          cycles: nat;
         | 
| 142 | 
            +
                          idle_cycles_burned_per_day: nat;
         | 
| 143 | 
            +
                      });
         | 
| 144 | 
            +
                      canister_info : (record {
         | 
| 145 | 
            +
                          canister_id : canister_id;
         | 
| 146 | 
            +
                          num_requested_changes : opt nat64;
         | 
| 147 | 
            +
                      }) -> (record {
         | 
| 148 | 
            +
                          total_num_changes : nat64;
         | 
| 149 | 
            +
                          recent_changes : vec change;
         | 
| 150 | 
            +
                          module_hash : opt blob;
         | 
| 151 | 
            +
                          controllers : vec principal;
         | 
| 47 152 | 
             
                      });
         | 
| 48 153 | 
             
                      delete_canister : (record {canister_id : canister_id}) -> ();
         | 
| 49 154 | 
             
                      deposit_cycles : (record {canister_id : canister_id}) -> ();
         | 
| 155 | 
            +
                      raw_rand : () -> (blob);
         | 
| 156 | 
            +
             | 
| 157 | 
            +
                      ecdsa_public_key : (record {
         | 
| 158 | 
            +
                        canister_id : opt canister_id;
         | 
| 159 | 
            +
                        derivation_path : vec blob;
         | 
| 160 | 
            +
                        key_id : record { curve: ecdsa_curve; name: text };
         | 
| 161 | 
            +
                      }) -> (record { public_key : blob; chain_code : blob; });
         | 
| 162 | 
            +
                      sign_with_ecdsa : (record {
         | 
| 163 | 
            +
                        message_hash : blob;
         | 
| 164 | 
            +
                        derivation_path : vec blob;
         | 
| 165 | 
            +
                        key_id : record { curve: ecdsa_curve; name: text };
         | 
| 166 | 
            +
                      }) -> (record { signature : blob });
         | 
| 167 | 
            +
             | 
| 168 | 
            +
                      bitcoin_get_balance: (get_balance_request) -> (satoshi);
         | 
| 169 | 
            +
                      bitcoin_get_utxos: (get_utxos_request) -> (get_utxos_response);
         | 
| 170 | 
            +
                      bitcoin_send_transaction: (send_transaction_request) -> ();
         | 
| 171 | 
            +
                      bitcoin_get_current_fee_percentiles: (get_current_fee_percentiles_request) -> (vec millisatoshi_per_byte);
         | 
| 172 | 
            +
             | 
| 50 173 | 
             
                      provisional_create_canister_with_cycles : (record {
         | 
| 51 174 | 
             
                        amount: opt nat;
         | 
| 52 | 
            -
                        settings : opt canister_settings
         | 
| 175 | 
            +
                        settings : opt canister_settings;
         | 
| 176 | 
            +
                        specified_id: opt canister_id;
         | 
| 53 177 | 
             
                      }) -> (record {canister_id : canister_id});
         | 
| 54 178 | 
             
                      provisional_top_up_canister :
         | 
| 55 179 | 
             
                        (record { canister_id: canister_id; amount: nat }) -> ();
         | 
    
        data/lib/ic_agent/version.rb
    CHANGED
    
    
    
        data/lib/ic_agent.rb
    CHANGED
    
    | @@ -14,8 +14,10 @@ require_relative 'ic_agent/system_state' | |
| 14 14 | 
             
            require_relative 'ic_agent/canister'
         | 
| 15 15 |  | 
| 16 16 | 
             
            require_relative 'ic_agent/ast/nodes/named_nodes'
         | 
| 17 | 
            +
            require_relative 'ic_agent/ast/nodes/statement_nodes'
         | 
| 17 18 | 
             
            require_relative 'ic_agent/ast/nodes/string_literal'
         | 
| 18 19 | 
             
            require_relative 'ic_agent/ast/parser'
         | 
| 20 | 
            +
            require_relative 'ic_agent/ast/statement_parser'
         | 
| 19 21 | 
             
            require_relative 'ic_agent/ast/writer'
         | 
| 20 22 | 
             
            require_relative 'ic_agent/ast/assembler'
         | 
| 21 23 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: ic_agent
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Terry.Tu
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2023-06- | 
| 11 | 
            +
            date: 2023-06-19 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: base32
         | 
| @@ -241,9 +241,15 @@ files: | |
| 241 241 | 
             
            - lib/ic_agent/ast/assembler.rb
         | 
| 242 242 | 
             
            - lib/ic_agent/ast/did_grammar.treetop
         | 
| 243 243 | 
             
            - lib/ic_agent/ast/did_grammar_v1.treetop
         | 
| 244 | 
            +
            - lib/ic_agent/ast/did_grammar_v2.treetop
         | 
| 245 | 
            +
            - lib/ic_agent/ast/nested_type_grammar.treetop
         | 
| 244 246 | 
             
            - lib/ic_agent/ast/nodes/named_nodes.rb
         | 
| 247 | 
            +
            - lib/ic_agent/ast/nodes/statement_nodes.rb
         | 
| 245 248 | 
             
            - lib/ic_agent/ast/nodes/string_literal.rb
         | 
| 246 249 | 
             
            - lib/ic_agent/ast/parser.rb
         | 
| 250 | 
            +
            - lib/ic_agent/ast/record_parser.treetop
         | 
| 251 | 
            +
            - lib/ic_agent/ast/statement_parser.rb
         | 
| 252 | 
            +
            - lib/ic_agent/ast/variant_parser.treetop
         | 
| 247 253 | 
             
            - lib/ic_agent/ast/writer.rb
         | 
| 248 254 | 
             
            - lib/ic_agent/candid.rb
         | 
| 249 255 | 
             
            - lib/ic_agent/canister.rb
         |