kanayago 0.1.1 → 0.3.0
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/.rubocop.yml +12 -0
 - data/.ruby-version +1 -0
 - data/README.md +20 -29
 - data/Rakefile +24 -120
 - data/ext/kanayago/extconf.rb +14 -0
 - data/ext/kanayago/kanayago.c +554 -235
 - data/ext/kanayago/kanayago.h +5 -0
 - data/ext/kanayago/literal_node.c +343 -0
 - data/ext/kanayago/literal_node.h +30 -0
 - data/ext/kanayago/pattern_node.c +78 -0
 - data/ext/kanayago/pattern_node.h +13 -0
 - data/ext/kanayago/scope_node.c +34 -0
 - data/ext/kanayago/scope_node.h +8 -0
 - data/ext/kanayago/statement_node.c +795 -0
 - data/ext/kanayago/statement_node.h +66 -0
 - data/ext/kanayago/string_node.c +192 -0
 - data/ext/kanayago/string_node.h +19 -0
 - data/ext/kanayago/variable_node.c +72 -0
 - data/ext/kanayago/variable_node.h +12 -0
 - data/lib/kanayago/literal_node.rb +87 -0
 - data/lib/kanayago/pattern_node.rb +19 -0
 - data/lib/kanayago/statement_node.rb +222 -0
 - data/lib/kanayago/string_node.rb +43 -0
 - data/lib/kanayago/variable_node.rb +23 -0
 - data/lib/kanayago/version.rb +1 -1
 - data/lib/kanayago.rb +22 -0
 - data/patch/3.4/copy_target.rb +78 -0
 - data/patch/3.4/kanayago.patch +162 -0
 - data/patch/head/copy_target.rb +84 -0
 - data/patch/head/kanayago.patch +162 -0
 - data/sample/minitest_generator.rb +266 -0
 - data/sample/test_generator.rb +272 -0
 - data/script/setup_parser.rb +136 -0
 - data/typeprof.conf.json +9 -0
 - metadata +30 -64
 - data/ext/kanayago/ccan/check_type/check_type.h +0 -63
 - data/ext/kanayago/ccan/container_of/container_of.h +0 -142
 - data/ext/kanayago/ccan/list/list.h +0 -791
 - data/ext/kanayago/ccan/str/str.h +0 -17
 - data/ext/kanayago/constant.h +0 -53
 - data/ext/kanayago/id.h +0 -347
 - data/ext/kanayago/id_table.h +0 -39
 - data/ext/kanayago/internal/array.h +0 -151
 - data/ext/kanayago/internal/basic_operators.h +0 -64
 - data/ext/kanayago/internal/bignum.h +0 -244
 - data/ext/kanayago/internal/bits.h +0 -568
 - data/ext/kanayago/internal/compile.h +0 -34
 - data/ext/kanayago/internal/compilers.h +0 -107
 - data/ext/kanayago/internal/complex.h +0 -29
 - data/ext/kanayago/internal/encoding.h +0 -36
 - data/ext/kanayago/internal/error.h +0 -218
 - data/ext/kanayago/internal/fixnum.h +0 -184
 - data/ext/kanayago/internal/gc.h +0 -322
 - data/ext/kanayago/internal/hash.h +0 -191
 - data/ext/kanayago/internal/imemo.h +0 -261
 - data/ext/kanayago/internal/io.h +0 -140
 - data/ext/kanayago/internal/numeric.h +0 -274
 - data/ext/kanayago/internal/parse.h +0 -117
 - data/ext/kanayago/internal/rational.h +0 -71
 - data/ext/kanayago/internal/re.h +0 -28
 - data/ext/kanayago/internal/ruby_parser.h +0 -125
 - data/ext/kanayago/internal/sanitizers.h +0 -297
 - data/ext/kanayago/internal/serial.h +0 -23
 - data/ext/kanayago/internal/static_assert.h +0 -16
 - data/ext/kanayago/internal/string.h +0 -186
 - data/ext/kanayago/internal/symbol.h +0 -45
 - data/ext/kanayago/internal/thread.h +0 -79
 - data/ext/kanayago/internal/variable.h +0 -72
 - data/ext/kanayago/internal/vm.h +0 -137
 - data/ext/kanayago/internal/warnings.h +0 -16
 - data/ext/kanayago/internal.h +0 -108
 - data/ext/kanayago/lex.c +0 -302
 - data/ext/kanayago/method.h +0 -255
 - data/ext/kanayago/node.c +0 -440
 - data/ext/kanayago/node.h +0 -111
 - data/ext/kanayago/node_name.inc +0 -224
 - data/ext/kanayago/parse.c +0 -26931
 - data/ext/kanayago/parse.h +0 -244
 - data/ext/kanayago/parse.tmp.y +0 -16145
 - data/ext/kanayago/parser_bits.h +0 -564
 - data/ext/kanayago/parser_node.h +0 -32
 - data/ext/kanayago/parser_st.c +0 -164
 - data/ext/kanayago/parser_st.h +0 -162
 - data/ext/kanayago/parser_value.h +0 -106
 - data/ext/kanayago/probes.h +0 -4
 - data/ext/kanayago/ruby_assert.h +0 -14
 - data/ext/kanayago/ruby_atomic.h +0 -23
 - data/ext/kanayago/ruby_parser.c +0 -1165
 - data/ext/kanayago/rubyparser.h +0 -1391
 - data/ext/kanayago/shape.h +0 -234
 - data/ext/kanayago/st.c +0 -2339
 - data/ext/kanayago/symbol.h +0 -123
 - data/ext/kanayago/thread_pthread.h +0 -168
 - data/ext/kanayago/universal_parser.c +0 -230
 - data/ext/kanayago/vm_core.h +0 -2215
 - data/ext/kanayago/vm_opts.h +0 -67
 
    
        metadata
    CHANGED
    
    | 
         @@ -1,13 +1,13 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: kanayago
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.3.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - S-H-GAMELINKS
         
     | 
| 
       8 
8 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       9 
9 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       10 
     | 
    
         
            -
            date:  
     | 
| 
      
 10 
     | 
    
         
            +
            date: 1980-01-02 00:00:00.000000000 Z
         
     | 
| 
       11 
11 
     | 
    
         
             
            dependencies: []
         
     | 
| 
       12 
12 
     | 
    
         
             
            description: Trying to Make Ruby's Parser Available as a Gem
         
     | 
| 
       13 
13 
     | 
    
         
             
            email:
         
     | 
| 
         @@ -19,76 +19,41 @@ extra_rdoc_files: [] 
     | 
|
| 
       19 
19 
     | 
    
         
             
            files:
         
     | 
| 
       20 
20 
     | 
    
         
             
            - ".rubocop.yml"
         
     | 
| 
       21 
21 
     | 
    
         
             
            - ".rubocop_todo.yml"
         
     | 
| 
      
 22 
     | 
    
         
            +
            - ".ruby-version"
         
     | 
| 
       22 
23 
     | 
    
         
             
            - LICENSE.txt
         
     | 
| 
       23 
24 
     | 
    
         
             
            - README.md
         
     | 
| 
       24 
25 
     | 
    
         
             
            - Rakefile
         
     | 
| 
       25 
     | 
    
         
            -
            - ext/kanayago/ccan/check_type/check_type.h
         
     | 
| 
       26 
     | 
    
         
            -
            - ext/kanayago/ccan/container_of/container_of.h
         
     | 
| 
       27 
     | 
    
         
            -
            - ext/kanayago/ccan/list/list.h
         
     | 
| 
       28 
     | 
    
         
            -
            - ext/kanayago/ccan/str/str.h
         
     | 
| 
       29 
     | 
    
         
            -
            - ext/kanayago/constant.h
         
     | 
| 
       30 
26 
     | 
    
         
             
            - ext/kanayago/extconf.rb
         
     | 
| 
       31 
     | 
    
         
            -
            - ext/kanayago/id.h
         
     | 
| 
       32 
     | 
    
         
            -
            - ext/kanayago/id_table.h
         
     | 
| 
       33 
     | 
    
         
            -
            - ext/kanayago/internal.h
         
     | 
| 
       34 
     | 
    
         
            -
            - ext/kanayago/internal/array.h
         
     | 
| 
       35 
     | 
    
         
            -
            - ext/kanayago/internal/basic_operators.h
         
     | 
| 
       36 
     | 
    
         
            -
            - ext/kanayago/internal/bignum.h
         
     | 
| 
       37 
     | 
    
         
            -
            - ext/kanayago/internal/bits.h
         
     | 
| 
       38 
     | 
    
         
            -
            - ext/kanayago/internal/compile.h
         
     | 
| 
       39 
     | 
    
         
            -
            - ext/kanayago/internal/compilers.h
         
     | 
| 
       40 
     | 
    
         
            -
            - ext/kanayago/internal/complex.h
         
     | 
| 
       41 
     | 
    
         
            -
            - ext/kanayago/internal/encoding.h
         
     | 
| 
       42 
     | 
    
         
            -
            - ext/kanayago/internal/error.h
         
     | 
| 
       43 
     | 
    
         
            -
            - ext/kanayago/internal/fixnum.h
         
     | 
| 
       44 
     | 
    
         
            -
            - ext/kanayago/internal/gc.h
         
     | 
| 
       45 
     | 
    
         
            -
            - ext/kanayago/internal/hash.h
         
     | 
| 
       46 
     | 
    
         
            -
            - ext/kanayago/internal/imemo.h
         
     | 
| 
       47 
     | 
    
         
            -
            - ext/kanayago/internal/io.h
         
     | 
| 
       48 
     | 
    
         
            -
            - ext/kanayago/internal/numeric.h
         
     | 
| 
       49 
     | 
    
         
            -
            - ext/kanayago/internal/parse.h
         
     | 
| 
       50 
     | 
    
         
            -
            - ext/kanayago/internal/rational.h
         
     | 
| 
       51 
     | 
    
         
            -
            - ext/kanayago/internal/re.h
         
     | 
| 
       52 
     | 
    
         
            -
            - ext/kanayago/internal/ruby_parser.h
         
     | 
| 
       53 
     | 
    
         
            -
            - ext/kanayago/internal/sanitizers.h
         
     | 
| 
       54 
     | 
    
         
            -
            - ext/kanayago/internal/serial.h
         
     | 
| 
       55 
     | 
    
         
            -
            - ext/kanayago/internal/static_assert.h
         
     | 
| 
       56 
     | 
    
         
            -
            - ext/kanayago/internal/string.h
         
     | 
| 
       57 
     | 
    
         
            -
            - ext/kanayago/internal/symbol.h
         
     | 
| 
       58 
     | 
    
         
            -
            - ext/kanayago/internal/thread.h
         
     | 
| 
       59 
     | 
    
         
            -
            - ext/kanayago/internal/variable.h
         
     | 
| 
       60 
     | 
    
         
            -
            - ext/kanayago/internal/vm.h
         
     | 
| 
       61 
     | 
    
         
            -
            - ext/kanayago/internal/warnings.h
         
     | 
| 
       62 
27 
     | 
    
         
             
            - ext/kanayago/kanayago.c
         
     | 
| 
       63 
28 
     | 
    
         
             
            - ext/kanayago/kanayago.h
         
     | 
| 
       64 
     | 
    
         
            -
            - ext/kanayago/ 
     | 
| 
       65 
     | 
    
         
            -
            - ext/kanayago/ 
     | 
| 
       66 
     | 
    
         
            -
            - ext/kanayago/ 
     | 
| 
       67 
     | 
    
         
            -
            - ext/kanayago/ 
     | 
| 
       68 
     | 
    
         
            -
            - ext/kanayago/ 
     | 
| 
       69 
     | 
    
         
            -
            - ext/kanayago/ 
     | 
| 
       70 
     | 
    
         
            -
            - ext/kanayago/ 
     | 
| 
       71 
     | 
    
         
            -
            - ext/kanayago/ 
     | 
| 
       72 
     | 
    
         
            -
            - ext/kanayago/ 
     | 
| 
       73 
     | 
    
         
            -
            - ext/kanayago/ 
     | 
| 
       74 
     | 
    
         
            -
            - ext/kanayago/ 
     | 
| 
       75 
     | 
    
         
            -
            - ext/kanayago/ 
     | 
| 
       76 
     | 
    
         
            -
            - ext/kanayago/parser_value.h
         
     | 
| 
       77 
     | 
    
         
            -
            - ext/kanayago/probes.h
         
     | 
| 
       78 
     | 
    
         
            -
            - ext/kanayago/ruby_assert.h
         
     | 
| 
       79 
     | 
    
         
            -
            - ext/kanayago/ruby_atomic.h
         
     | 
| 
       80 
     | 
    
         
            -
            - ext/kanayago/ruby_parser.c
         
     | 
| 
       81 
     | 
    
         
            -
            - ext/kanayago/rubyparser.h
         
     | 
| 
       82 
     | 
    
         
            -
            - ext/kanayago/shape.h
         
     | 
| 
       83 
     | 
    
         
            -
            - ext/kanayago/st.c
         
     | 
| 
       84 
     | 
    
         
            -
            - ext/kanayago/symbol.h
         
     | 
| 
       85 
     | 
    
         
            -
            - ext/kanayago/thread_pthread.h
         
     | 
| 
       86 
     | 
    
         
            -
            - ext/kanayago/universal_parser.c
         
     | 
| 
       87 
     | 
    
         
            -
            - ext/kanayago/vm_core.h
         
     | 
| 
       88 
     | 
    
         
            -
            - ext/kanayago/vm_opts.h
         
     | 
| 
      
 29 
     | 
    
         
            +
            - ext/kanayago/literal_node.c
         
     | 
| 
      
 30 
     | 
    
         
            +
            - ext/kanayago/literal_node.h
         
     | 
| 
      
 31 
     | 
    
         
            +
            - ext/kanayago/pattern_node.c
         
     | 
| 
      
 32 
     | 
    
         
            +
            - ext/kanayago/pattern_node.h
         
     | 
| 
      
 33 
     | 
    
         
            +
            - ext/kanayago/scope_node.c
         
     | 
| 
      
 34 
     | 
    
         
            +
            - ext/kanayago/scope_node.h
         
     | 
| 
      
 35 
     | 
    
         
            +
            - ext/kanayago/statement_node.c
         
     | 
| 
      
 36 
     | 
    
         
            +
            - ext/kanayago/statement_node.h
         
     | 
| 
      
 37 
     | 
    
         
            +
            - ext/kanayago/string_node.c
         
     | 
| 
      
 38 
     | 
    
         
            +
            - ext/kanayago/string_node.h
         
     | 
| 
      
 39 
     | 
    
         
            +
            - ext/kanayago/variable_node.c
         
     | 
| 
      
 40 
     | 
    
         
            +
            - ext/kanayago/variable_node.h
         
     | 
| 
       89 
41 
     | 
    
         
             
            - lib/kanayago.rb
         
     | 
| 
      
 42 
     | 
    
         
            +
            - lib/kanayago/literal_node.rb
         
     | 
| 
      
 43 
     | 
    
         
            +
            - lib/kanayago/pattern_node.rb
         
     | 
| 
      
 44 
     | 
    
         
            +
            - lib/kanayago/statement_node.rb
         
     | 
| 
      
 45 
     | 
    
         
            +
            - lib/kanayago/string_node.rb
         
     | 
| 
      
 46 
     | 
    
         
            +
            - lib/kanayago/variable_node.rb
         
     | 
| 
       90 
47 
     | 
    
         
             
            - lib/kanayago/version.rb
         
     | 
| 
      
 48 
     | 
    
         
            +
            - patch/3.4/copy_target.rb
         
     | 
| 
      
 49 
     | 
    
         
            +
            - patch/3.4/kanayago.patch
         
     | 
| 
      
 50 
     | 
    
         
            +
            - patch/head/copy_target.rb
         
     | 
| 
      
 51 
     | 
    
         
            +
            - patch/head/kanayago.patch
         
     | 
| 
      
 52 
     | 
    
         
            +
            - sample/minitest_generator.rb
         
     | 
| 
      
 53 
     | 
    
         
            +
            - sample/test_generator.rb
         
     | 
| 
      
 54 
     | 
    
         
            +
            - script/setup_parser.rb
         
     | 
| 
       91 
55 
     | 
    
         
             
            - sig/kanayago.rbs
         
     | 
| 
      
 56 
     | 
    
         
            +
            - typeprof.conf.json
         
     | 
| 
       92 
57 
     | 
    
         
             
            homepage: https://github.com/S-H-GAMELINKS/kanayago
         
     | 
| 
       93 
58 
     | 
    
         
             
            licenses:
         
     | 
| 
       94 
59 
     | 
    
         
             
            - MIT
         
     | 
| 
         @@ -96,6 +61,7 @@ metadata: 
     | 
|
| 
       96 
61 
     | 
    
         
             
              homepage_uri: https://github.com/S-H-GAMELINKS/kanayago
         
     | 
| 
       97 
62 
     | 
    
         
             
              source_code_uri: https://github.com/S-H-GAMELINKS/kanayago
         
     | 
| 
       98 
63 
     | 
    
         
             
              changelog_uri: https://github.com/S-H-GAMELINKS/kanayago/releases
         
     | 
| 
      
 64 
     | 
    
         
            +
              rubygems_mfa_required: 'true'
         
     | 
| 
       99 
65 
     | 
    
         
             
            rdoc_options: []
         
     | 
| 
       100 
66 
     | 
    
         
             
            require_paths:
         
     | 
| 
       101 
67 
     | 
    
         
             
            - lib
         
     | 
| 
         @@ -110,7 +76,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       110 
76 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       111 
77 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       112 
78 
     | 
    
         
             
            requirements: []
         
     | 
| 
       113 
     | 
    
         
            -
            rubygems_version: 3. 
     | 
| 
      
 79 
     | 
    
         
            +
            rubygems_version: 3.8.0.dev
         
     | 
| 
       114 
80 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       115 
81 
     | 
    
         
             
            summary: Trying to Make Ruby's Parser Available as a Gem
         
     | 
| 
       116 
82 
     | 
    
         
             
            test_files: []
         
     | 
| 
         @@ -1,63 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            /* CC0 (Public domain) - see ccan/licenses/CC0 file for details */
         
     | 
| 
       2 
     | 
    
         
            -
            #ifndef CCAN_CHECK_TYPE_H
         
     | 
| 
       3 
     | 
    
         
            -
            #define CCAN_CHECK_TYPE_H
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            /**
         
     | 
| 
       6 
     | 
    
         
            -
             * ccan_check_type - issue a warning or build failure if type is not correct.
         
     | 
| 
       7 
     | 
    
         
            -
             * @expr: the expression whose type we should check (not evaluated).
         
     | 
| 
       8 
     | 
    
         
            -
             * @type: the exact type we expect the expression to be.
         
     | 
| 
       9 
     | 
    
         
            -
             *
         
     | 
| 
       10 
     | 
    
         
            -
             * This macro is usually used within other macros to try to ensure that a macro
         
     | 
| 
       11 
     | 
    
         
            -
             * argument is of the expected type.  No type promotion of the expression is
         
     | 
| 
       12 
     | 
    
         
            -
             * done: an unsigned int is not the same as an int!
         
     | 
| 
       13 
     | 
    
         
            -
             *
         
     | 
| 
       14 
     | 
    
         
            -
             * ccan_check_type() always evaluates to 0.
         
     | 
| 
       15 
     | 
    
         
            -
             *
         
     | 
| 
       16 
     | 
    
         
            -
             * If your compiler does not support typeof, then the best we can do is fail
         
     | 
| 
       17 
     | 
    
         
            -
             * to compile if the sizes of the types are unequal (a less complete check).
         
     | 
| 
       18 
     | 
    
         
            -
             *
         
     | 
| 
       19 
     | 
    
         
            -
             * Example:
         
     | 
| 
       20 
     | 
    
         
            -
             *	// They should always pass a 64-bit value to _set_some_value!
         
     | 
| 
       21 
     | 
    
         
            -
             *	#define set_some_value(expr)			\
         
     | 
| 
       22 
     | 
    
         
            -
             *		_set_some_value((ccan_check_type((expr), uint64_t), (expr)))
         
     | 
| 
       23 
     | 
    
         
            -
             */
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
            /**
         
     | 
| 
       26 
     | 
    
         
            -
             * ccan_check_types_match - issue a warning or build failure if types are not same.
         
     | 
| 
       27 
     | 
    
         
            -
             * @expr1: the first expression (not evaluated).
         
     | 
| 
       28 
     | 
    
         
            -
             * @expr2: the second expression (not evaluated).
         
     | 
| 
       29 
     | 
    
         
            -
             *
         
     | 
| 
       30 
     | 
    
         
            -
             * This macro is usually used within other macros to try to ensure that
         
     | 
| 
       31 
     | 
    
         
            -
             * arguments are of identical types.  No type promotion of the expressions is
         
     | 
| 
       32 
     | 
    
         
            -
             * done: an unsigned int is not the same as an int!
         
     | 
| 
       33 
     | 
    
         
            -
             *
         
     | 
| 
       34 
     | 
    
         
            -
             * ccan_check_types_match() always evaluates to 0.
         
     | 
| 
       35 
     | 
    
         
            -
             *
         
     | 
| 
       36 
     | 
    
         
            -
             * If your compiler does not support typeof, then the best we can do is fail
         
     | 
| 
       37 
     | 
    
         
            -
             * to compile if the sizes of the types are unequal (a less complete check).
         
     | 
| 
       38 
     | 
    
         
            -
             *
         
     | 
| 
       39 
     | 
    
         
            -
             * Example:
         
     | 
| 
       40 
     | 
    
         
            -
             *	// Do subtraction to get to enclosing type, but make sure that
         
     | 
| 
       41 
     | 
    
         
            -
             *	// pointer is of correct type for that member.
         
     | 
| 
       42 
     | 
    
         
            -
             *	#define ccan_container_of(mbr_ptr, encl_type, mbr)			\
         
     | 
| 
       43 
     | 
    
         
            -
             *		(ccan_check_types_match((mbr_ptr), &((encl_type *)0)->mbr),	\
         
     | 
| 
       44 
     | 
    
         
            -
             *		 ((encl_type *)						\
         
     | 
| 
       45 
     | 
    
         
            -
             *		  ((char *)(mbr_ptr) - offsetof(enclosing_type, mbr))))
         
     | 
| 
       46 
     | 
    
         
            -
             */
         
     | 
| 
       47 
     | 
    
         
            -
            #if defined(HAVE_TYPEOF) && HAVE_TYPEOF
         
     | 
| 
       48 
     | 
    
         
            -
            #define ccan_check_type(expr, type)			\
         
     | 
| 
       49 
     | 
    
         
            -
            	((typeof(expr) *)0 != (type *)0)
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
            #define ccan_check_types_match(expr1, expr2)		\
         
     | 
| 
       52 
     | 
    
         
            -
            	((typeof(expr1) *)0 != (typeof(expr2) *)0)
         
     | 
| 
       53 
     | 
    
         
            -
            #else
         
     | 
| 
       54 
     | 
    
         
            -
            #include "ccan/build_assert/build_assert.h"
         
     | 
| 
       55 
     | 
    
         
            -
            /* Without typeof, we can only test the sizes. */
         
     | 
| 
       56 
     | 
    
         
            -
            #define ccan_check_type(expr, type)					\
         
     | 
| 
       57 
     | 
    
         
            -
            	CCAN_BUILD_ASSERT_OR_ZERO(sizeof(expr) == sizeof(type))
         
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
            #define ccan_check_types_match(expr1, expr2)				\
         
     | 
| 
       60 
     | 
    
         
            -
            	CCAN_BUILD_ASSERT_OR_ZERO(sizeof(expr1) == sizeof(expr2))
         
     | 
| 
       61 
     | 
    
         
            -
            #endif /* HAVE_TYPEOF */
         
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
            #endif /* CCAN_CHECK_TYPE_H */
         
     | 
| 
         @@ -1,142 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            /* CC0 (Public domain) - see ccan/licenses/CC0 file for details */
         
     | 
| 
       2 
     | 
    
         
            -
            #ifndef CCAN_CONTAINER_OF_H
         
     | 
| 
       3 
     | 
    
         
            -
            #define CCAN_CONTAINER_OF_H
         
     | 
| 
       4 
     | 
    
         
            -
            #include "ccan/check_type/check_type.h"
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
            /**
         
     | 
| 
       7 
     | 
    
         
            -
             * ccan_container_of - get pointer to enclosing structure
         
     | 
| 
       8 
     | 
    
         
            -
             * @member_ptr: pointer to the structure member
         
     | 
| 
       9 
     | 
    
         
            -
             * @containing_type: the type this member is within
         
     | 
| 
       10 
     | 
    
         
            -
             * @member: the name of this member within the structure.
         
     | 
| 
       11 
     | 
    
         
            -
             *
         
     | 
| 
       12 
     | 
    
         
            -
             * Given a pointer to a member of a structure, this macro does pointer
         
     | 
| 
       13 
     | 
    
         
            -
             * subtraction to return the pointer to the enclosing type.
         
     | 
| 
       14 
     | 
    
         
            -
             *
         
     | 
| 
       15 
     | 
    
         
            -
             * Example:
         
     | 
| 
       16 
     | 
    
         
            -
             *	struct foo {
         
     | 
| 
       17 
     | 
    
         
            -
             *		int fielda, fieldb;
         
     | 
| 
       18 
     | 
    
         
            -
             *		// ...
         
     | 
| 
       19 
     | 
    
         
            -
             *	};
         
     | 
| 
       20 
     | 
    
         
            -
             *	struct info {
         
     | 
| 
       21 
     | 
    
         
            -
             *		int some_other_field;
         
     | 
| 
       22 
     | 
    
         
            -
             *		struct foo my_foo;
         
     | 
| 
       23 
     | 
    
         
            -
             *	};
         
     | 
| 
       24 
     | 
    
         
            -
             *
         
     | 
| 
       25 
     | 
    
         
            -
             *	static struct info *foo_to_info(struct foo *foo)
         
     | 
| 
       26 
     | 
    
         
            -
             *	{
         
     | 
| 
       27 
     | 
    
         
            -
             *		return ccan_container_of(foo, struct info, my_foo);
         
     | 
| 
       28 
     | 
    
         
            -
             *	}
         
     | 
| 
       29 
     | 
    
         
            -
             */
         
     | 
| 
       30 
     | 
    
         
            -
            #define ccan_container_of(member_ptr, containing_type, member)		\
         
     | 
| 
       31 
     | 
    
         
            -
            	 ((containing_type *)						\
         
     | 
| 
       32 
     | 
    
         
            -
            	  ((char *)(member_ptr)						\
         
     | 
| 
       33 
     | 
    
         
            -
            	   - ccan_container_off(containing_type, member))		\
         
     | 
| 
       34 
     | 
    
         
            -
            	  + ccan_check_types_match(*(member_ptr), ((containing_type *)0)->member))
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
            /**
         
     | 
| 
       38 
     | 
    
         
            -
             * ccan_container_of_or_null - get pointer to enclosing structure, or NULL
         
     | 
| 
       39 
     | 
    
         
            -
             * @member_ptr: pointer to the structure member
         
     | 
| 
       40 
     | 
    
         
            -
             * @containing_type: the type this member is within
         
     | 
| 
       41 
     | 
    
         
            -
             * @member: the name of this member within the structure.
         
     | 
| 
       42 
     | 
    
         
            -
             *
         
     | 
| 
       43 
     | 
    
         
            -
             * Given a pointer to a member of a structure, this macro does pointer
         
     | 
| 
       44 
     | 
    
         
            -
             * subtraction to return the pointer to the enclosing type, unless it
         
     | 
| 
       45 
     | 
    
         
            -
             * is given NULL, in which case it also returns NULL.
         
     | 
| 
       46 
     | 
    
         
            -
             *
         
     | 
| 
       47 
     | 
    
         
            -
             * Example:
         
     | 
| 
       48 
     | 
    
         
            -
             *	struct foo {
         
     | 
| 
       49 
     | 
    
         
            -
             *		int fielda, fieldb;
         
     | 
| 
       50 
     | 
    
         
            -
             *		// ...
         
     | 
| 
       51 
     | 
    
         
            -
             *	};
         
     | 
| 
       52 
     | 
    
         
            -
             *	struct info {
         
     | 
| 
       53 
     | 
    
         
            -
             *		int some_other_field;
         
     | 
| 
       54 
     | 
    
         
            -
             *		struct foo my_foo;
         
     | 
| 
       55 
     | 
    
         
            -
             *	};
         
     | 
| 
       56 
     | 
    
         
            -
             *
         
     | 
| 
       57 
     | 
    
         
            -
             *	static struct info *foo_to_info_allowing_null(struct foo *foo)
         
     | 
| 
       58 
     | 
    
         
            -
             *	{
         
     | 
| 
       59 
     | 
    
         
            -
             *		return ccan_container_of_or_null(foo, struct info, my_foo);
         
     | 
| 
       60 
     | 
    
         
            -
             *	}
         
     | 
| 
       61 
     | 
    
         
            -
             */
         
     | 
| 
       62 
     | 
    
         
            -
            static inline char *container_of_or_null_(void *member_ptr, size_t offset)
         
     | 
| 
       63 
     | 
    
         
            -
            {
         
     | 
| 
       64 
     | 
    
         
            -
            	return member_ptr ? (char *)member_ptr - offset : NULL;
         
     | 
| 
       65 
     | 
    
         
            -
            }
         
     | 
| 
       66 
     | 
    
         
            -
            #define ccan_container_of_or_null(member_ptr, containing_type, member)	\
         
     | 
| 
       67 
     | 
    
         
            -
            	((containing_type *)						\
         
     | 
| 
       68 
     | 
    
         
            -
            	 ccan_container_of_or_null_(member_ptr,				\
         
     | 
| 
       69 
     | 
    
         
            -
            			       ccan_container_off(containing_type, member))	\
         
     | 
| 
       70 
     | 
    
         
            -
            	 + ccan_check_types_match(*(member_ptr), ((containing_type *)0)->member))
         
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
            /**
         
     | 
| 
       73 
     | 
    
         
            -
             * ccan_container_off - get offset to enclosing structure
         
     | 
| 
       74 
     | 
    
         
            -
             * @containing_type: the type this member is within
         
     | 
| 
       75 
     | 
    
         
            -
             * @member: the name of this member within the structure.
         
     | 
| 
       76 
     | 
    
         
            -
             *
         
     | 
| 
       77 
     | 
    
         
            -
             * Given a pointer to a member of a structure, this macro does
         
     | 
| 
       78 
     | 
    
         
            -
             * typechecking and figures out the offset to the enclosing type.
         
     | 
| 
       79 
     | 
    
         
            -
             *
         
     | 
| 
       80 
     | 
    
         
            -
             * Example:
         
     | 
| 
       81 
     | 
    
         
            -
             *	struct foo {
         
     | 
| 
       82 
     | 
    
         
            -
             *		int fielda, fieldb;
         
     | 
| 
       83 
     | 
    
         
            -
             *		// ...
         
     | 
| 
       84 
     | 
    
         
            -
             *	};
         
     | 
| 
       85 
     | 
    
         
            -
             *	struct info {
         
     | 
| 
       86 
     | 
    
         
            -
             *		int some_other_field;
         
     | 
| 
       87 
     | 
    
         
            -
             *		struct foo my_foo;
         
     | 
| 
       88 
     | 
    
         
            -
             *	};
         
     | 
| 
       89 
     | 
    
         
            -
             *
         
     | 
| 
       90 
     | 
    
         
            -
             *	static struct info *foo_to_info(struct foo *foo)
         
     | 
| 
       91 
     | 
    
         
            -
             *	{
         
     | 
| 
       92 
     | 
    
         
            -
             *		size_t off = ccan_container_off(struct info, my_foo);
         
     | 
| 
       93 
     | 
    
         
            -
             *		return (void *)((char *)foo - off);
         
     | 
| 
       94 
     | 
    
         
            -
             *	}
         
     | 
| 
       95 
     | 
    
         
            -
             */
         
     | 
| 
       96 
     | 
    
         
            -
            #define ccan_container_off(containing_type, member)	\
         
     | 
| 
       97 
     | 
    
         
            -
            	offsetof(containing_type, member)
         
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
       99 
     | 
    
         
            -
            /**
         
     | 
| 
       100 
     | 
    
         
            -
             * ccan_container_of_var - get pointer to enclosing structure using a variable
         
     | 
| 
       101 
     | 
    
         
            -
             * @member_ptr: pointer to the structure member
         
     | 
| 
       102 
     | 
    
         
            -
             * @container_var: a pointer of same type as this member's container
         
     | 
| 
       103 
     | 
    
         
            -
             * @member: the name of this member within the structure.
         
     | 
| 
       104 
     | 
    
         
            -
             *
         
     | 
| 
       105 
     | 
    
         
            -
             * Given a pointer to a member of a structure, this macro does pointer
         
     | 
| 
       106 
     | 
    
         
            -
             * subtraction to return the pointer to the enclosing type.
         
     | 
| 
       107 
     | 
    
         
            -
             *
         
     | 
| 
       108 
     | 
    
         
            -
             * Example:
         
     | 
| 
       109 
     | 
    
         
            -
             *	static struct info *foo_to_i(struct foo *foo)
         
     | 
| 
       110 
     | 
    
         
            -
             *	{
         
     | 
| 
       111 
     | 
    
         
            -
             *		struct info *i = ccan_container_of_var(foo, i, my_foo);
         
     | 
| 
       112 
     | 
    
         
            -
             *		return i;
         
     | 
| 
       113 
     | 
    
         
            -
             *	}
         
     | 
| 
       114 
     | 
    
         
            -
             */
         
     | 
| 
       115 
     | 
    
         
            -
            #if defined(HAVE_TYPEOF) && HAVE_TYPEOF
         
     | 
| 
       116 
     | 
    
         
            -
            #define ccan_container_of_var(member_ptr, container_var, member) \
         
     | 
| 
       117 
     | 
    
         
            -
            	ccan_container_of(member_ptr, typeof(*container_var), member)
         
     | 
| 
       118 
     | 
    
         
            -
            #else
         
     | 
| 
       119 
     | 
    
         
            -
            #define ccan_container_of_var(member_ptr, container_var, member)	\
         
     | 
| 
       120 
     | 
    
         
            -
            	((void *)((char *)(member_ptr)	-			\
         
     | 
| 
       121 
     | 
    
         
            -
            		  ccan_container_off_var(container_var, member)))
         
     | 
| 
       122 
     | 
    
         
            -
            #endif
         
     | 
| 
       123 
     | 
    
         
            -
             
     | 
| 
       124 
     | 
    
         
            -
            /**
         
     | 
| 
       125 
     | 
    
         
            -
             * ccan_container_off_var - get offset of a field in enclosing structure
         
     | 
| 
       126 
     | 
    
         
            -
             * @container_var: a pointer to a container structure
         
     | 
| 
       127 
     | 
    
         
            -
             * @member: the name of a member within the structure.
         
     | 
| 
       128 
     | 
    
         
            -
             *
         
     | 
| 
       129 
     | 
    
         
            -
             * Given (any) pointer to a structure and a its member name, this
         
     | 
| 
       130 
     | 
    
         
            -
             * macro does pointer subtraction to return offset of member in a
         
     | 
| 
       131 
     | 
    
         
            -
             * structure memory layout.
         
     | 
| 
       132 
     | 
    
         
            -
             *
         
     | 
| 
       133 
     | 
    
         
            -
             */
         
     | 
| 
       134 
     | 
    
         
            -
            #if defined(HAVE_TYPEOF) && HAVE_TYPEOF
         
     | 
| 
       135 
     | 
    
         
            -
            #define ccan_container_off_var(var, member)		\
         
     | 
| 
       136 
     | 
    
         
            -
            	ccan_container_off(typeof(*var), member)
         
     | 
| 
       137 
     | 
    
         
            -
            #else
         
     | 
| 
       138 
     | 
    
         
            -
            #define ccan_container_off_var(var, member)			\
         
     | 
| 
       139 
     | 
    
         
            -
            	((const char *)&(var)->member - (const char *)(var))
         
     | 
| 
       140 
     | 
    
         
            -
            #endif
         
     | 
| 
       141 
     | 
    
         
            -
             
     | 
| 
       142 
     | 
    
         
            -
            #endif /* CCAN_CONTAINER_OF_H */
         
     |