prism 0.26.0 → 0.27.0

Sign up to get free protection for your applications and to get access to all the features.
data/ext/prism/api_node.c CHANGED
@@ -263,21 +263,21 @@ pm_node_stack_pop(pm_node_stack_node_t **stack) {
263
263
 
264
264
  VALUE
265
265
  pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encoding, VALUE source) {
266
- ID *constants = xcalloc(parser->constant_pool.size, sizeof(ID));
266
+ VALUE constants = rb_ary_new_capa(parser->constant_pool.size);
267
267
 
268
268
  for (uint32_t index = 0; index < parser->constant_pool.size; index++) {
269
269
  pm_constant_t *constant = &parser->constant_pool.constants[index];
270
270
  int state = 0;
271
271
 
272
272
  VALUE string = rb_enc_str_new((const char *) constant->start, constant->length, encoding);
273
- ID value = rb_protect(rb_intern_str, string, &state);
273
+ VALUE value = rb_protect(rb_str_intern, string, &state);
274
274
 
275
275
  if (state != 0) {
276
- value = rb_intern_const("?");
276
+ value = ID2SYM(rb_intern_const("?"));
277
277
  rb_set_errinfo(Qnil);
278
278
  }
279
279
 
280
- constants[index] = value;
280
+ rb_ary_push(constants, value);
281
281
  }
282
282
 
283
283
  pm_node_stack_node_t *node_stack = NULL;
@@ -1365,7 +1365,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
1365
1365
  // name
1366
1366
  #line 199 "api_node.c.erb"
1367
1367
  assert(cast->name != 0);
1368
- argv[1] = rb_id2sym(constants[cast->name - 1]);
1368
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
1369
1369
 
1370
1370
  // location
1371
1371
  argv[2] = pm_location_new(parser, node->location.start, node->location.end);
@@ -1448,7 +1448,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
1448
1448
  // name
1449
1449
  #line 199 "api_node.c.erb"
1450
1450
  assert(cast->name != 0);
1451
- argv[2] = rb_id2sym(constants[cast->name - 1]);
1451
+ argv[2] = RARRAY_AREF(constants, cast->name - 1);
1452
1452
 
1453
1453
  // location
1454
1454
  argv[3] = pm_location_new(parser, node->location.start, node->location.end);
@@ -1469,7 +1469,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
1469
1469
  argv[1] = rb_ary_new_capa(cast->locals.size);
1470
1470
  for (size_t index = 0; index < cast->locals.size; index++) {
1471
1471
  assert(cast->locals.ids[index] != 0);
1472
- rb_ary_push(argv[1], rb_id2sym(constants[cast->locals.ids[index] - 1]));
1472
+ rb_ary_push(argv[1], RARRAY_AREF(constants, cast->locals.ids[index] - 1));
1473
1473
  }
1474
1474
 
1475
1475
  // parameters
@@ -1507,7 +1507,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
1507
1507
  argv[1] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
1508
1508
 
1509
1509
  // name
1510
- argv[2] = cast->name == 0 ? Qnil : rb_id2sym(constants[cast->name - 1]);
1510
+ argv[2] = cast->name == 0 ? Qnil : RARRAY_AREF(constants, cast->name - 1);
1511
1511
 
1512
1512
  // name_loc
1513
1513
  #line 215 "api_node.c.erb"
@@ -1605,12 +1605,12 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
1605
1605
  // read_name
1606
1606
  #line 199 "api_node.c.erb"
1607
1607
  assert(cast->read_name != 0);
1608
- argv[5] = rb_id2sym(constants[cast->read_name - 1]);
1608
+ argv[5] = RARRAY_AREF(constants, cast->read_name - 1);
1609
1609
 
1610
1610
  // write_name
1611
1611
  #line 199 "api_node.c.erb"
1612
1612
  assert(cast->write_name != 0);
1613
- argv[6] = rb_id2sym(constants[cast->write_name - 1]);
1613
+ argv[6] = RARRAY_AREF(constants, cast->write_name - 1);
1614
1614
 
1615
1615
  // operator_loc
1616
1616
  #line 212 "api_node.c.erb"
@@ -1649,7 +1649,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
1649
1649
  // name
1650
1650
  #line 199 "api_node.c.erb"
1651
1651
  assert(cast->name != 0);
1652
- argv[4] = rb_id2sym(constants[cast->name - 1]);
1652
+ argv[4] = RARRAY_AREF(constants, cast->name - 1);
1653
1653
 
1654
1654
  // message_loc
1655
1655
  #line 215 "api_node.c.erb"
@@ -1704,17 +1704,17 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
1704
1704
  // read_name
1705
1705
  #line 199 "api_node.c.erb"
1706
1706
  assert(cast->read_name != 0);
1707
- argv[5] = rb_id2sym(constants[cast->read_name - 1]);
1707
+ argv[5] = RARRAY_AREF(constants, cast->read_name - 1);
1708
1708
 
1709
1709
  // write_name
1710
1710
  #line 199 "api_node.c.erb"
1711
1711
  assert(cast->write_name != 0);
1712
- argv[6] = rb_id2sym(constants[cast->write_name - 1]);
1712
+ argv[6] = RARRAY_AREF(constants, cast->write_name - 1);
1713
1713
 
1714
1714
  // operator
1715
1715
  #line 199 "api_node.c.erb"
1716
1716
  assert(cast->operator != 0);
1717
- argv[7] = rb_id2sym(constants[cast->operator - 1]);
1717
+ argv[7] = RARRAY_AREF(constants, cast->operator - 1);
1718
1718
 
1719
1719
  // operator_loc
1720
1720
  #line 212 "api_node.c.erb"
@@ -1757,12 +1757,12 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
1757
1757
  // read_name
1758
1758
  #line 199 "api_node.c.erb"
1759
1759
  assert(cast->read_name != 0);
1760
- argv[5] = rb_id2sym(constants[cast->read_name - 1]);
1760
+ argv[5] = RARRAY_AREF(constants, cast->read_name - 1);
1761
1761
 
1762
1762
  // write_name
1763
1763
  #line 199 "api_node.c.erb"
1764
1764
  assert(cast->write_name != 0);
1765
- argv[6] = rb_id2sym(constants[cast->write_name - 1]);
1765
+ argv[6] = RARRAY_AREF(constants, cast->write_name - 1);
1766
1766
 
1767
1767
  // operator_loc
1768
1768
  #line 212 "api_node.c.erb"
@@ -1801,7 +1801,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
1801
1801
  // name
1802
1802
  #line 199 "api_node.c.erb"
1803
1803
  assert(cast->name != 0);
1804
- argv[4] = rb_id2sym(constants[cast->name - 1]);
1804
+ argv[4] = RARRAY_AREF(constants, cast->name - 1);
1805
1805
 
1806
1806
  // message_loc
1807
1807
  #line 212 "api_node.c.erb"
@@ -1926,7 +1926,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
1926
1926
  argv[1] = rb_ary_new_capa(cast->locals.size);
1927
1927
  for (size_t index = 0; index < cast->locals.size; index++) {
1928
1928
  assert(cast->locals.ids[index] != 0);
1929
- rb_ary_push(argv[1], rb_id2sym(constants[cast->locals.ids[index] - 1]));
1929
+ rb_ary_push(argv[1], RARRAY_AREF(constants, cast->locals.ids[index] - 1));
1930
1930
  }
1931
1931
 
1932
1932
  // class_keyword_loc
@@ -1956,7 +1956,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
1956
1956
  // name
1957
1957
  #line 199 "api_node.c.erb"
1958
1958
  assert(cast->name != 0);
1959
- argv[8] = rb_id2sym(constants[cast->name - 1]);
1959
+ argv[8] = RARRAY_AREF(constants, cast->name - 1);
1960
1960
 
1961
1961
  // location
1962
1962
  argv[9] = pm_location_new(parser, node->location.start, node->location.end);
@@ -1975,7 +1975,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
1975
1975
  // name
1976
1976
  #line 199 "api_node.c.erb"
1977
1977
  assert(cast->name != 0);
1978
- argv[1] = rb_id2sym(constants[cast->name - 1]);
1978
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
1979
1979
 
1980
1980
  // name_loc
1981
1981
  #line 212 "api_node.c.erb"
@@ -2006,7 +2006,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
2006
2006
  // name
2007
2007
  #line 199 "api_node.c.erb"
2008
2008
  assert(cast->name != 0);
2009
- argv[1] = rb_id2sym(constants[cast->name - 1]);
2009
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
2010
2010
 
2011
2011
  // name_loc
2012
2012
  #line 212 "api_node.c.erb"
@@ -2023,7 +2023,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
2023
2023
  // operator
2024
2024
  #line 199 "api_node.c.erb"
2025
2025
  assert(cast->operator != 0);
2026
- argv[5] = rb_id2sym(constants[cast->operator - 1]);
2026
+ argv[5] = RARRAY_AREF(constants, cast->operator - 1);
2027
2027
 
2028
2028
  // location
2029
2029
  argv[6] = pm_location_new(parser, node->location.start, node->location.end);
@@ -2042,7 +2042,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
2042
2042
  // name
2043
2043
  #line 199 "api_node.c.erb"
2044
2044
  assert(cast->name != 0);
2045
- argv[1] = rb_id2sym(constants[cast->name - 1]);
2045
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
2046
2046
 
2047
2047
  // name_loc
2048
2048
  #line 212 "api_node.c.erb"
@@ -2073,7 +2073,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
2073
2073
  // name
2074
2074
  #line 199 "api_node.c.erb"
2075
2075
  assert(cast->name != 0);
2076
- argv[1] = rb_id2sym(constants[cast->name - 1]);
2076
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
2077
2077
 
2078
2078
  // location
2079
2079
  argv[2] = pm_location_new(parser, node->location.start, node->location.end);
@@ -2092,7 +2092,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
2092
2092
  // name
2093
2093
  #line 199 "api_node.c.erb"
2094
2094
  assert(cast->name != 0);
2095
- argv[1] = rb_id2sym(constants[cast->name - 1]);
2095
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
2096
2096
 
2097
2097
  // location
2098
2098
  argv[2] = pm_location_new(parser, node->location.start, node->location.end);
@@ -2111,7 +2111,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
2111
2111
  // name
2112
2112
  #line 199 "api_node.c.erb"
2113
2113
  assert(cast->name != 0);
2114
- argv[1] = rb_id2sym(constants[cast->name - 1]);
2114
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
2115
2115
 
2116
2116
  // name_loc
2117
2117
  #line 212 "api_node.c.erb"
@@ -2142,7 +2142,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
2142
2142
  // name
2143
2143
  #line 199 "api_node.c.erb"
2144
2144
  assert(cast->name != 0);
2145
- argv[1] = rb_id2sym(constants[cast->name - 1]);
2145
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
2146
2146
 
2147
2147
  // name_loc
2148
2148
  #line 212 "api_node.c.erb"
@@ -2173,7 +2173,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
2173
2173
  // name
2174
2174
  #line 199 "api_node.c.erb"
2175
2175
  assert(cast->name != 0);
2176
- argv[1] = rb_id2sym(constants[cast->name - 1]);
2176
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
2177
2177
 
2178
2178
  // name_loc
2179
2179
  #line 212 "api_node.c.erb"
@@ -2190,7 +2190,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
2190
2190
  // operator
2191
2191
  #line 199 "api_node.c.erb"
2192
2192
  assert(cast->operator != 0);
2193
- argv[5] = rb_id2sym(constants[cast->operator - 1]);
2193
+ argv[5] = RARRAY_AREF(constants, cast->operator - 1);
2194
2194
 
2195
2195
  // location
2196
2196
  argv[6] = pm_location_new(parser, node->location.start, node->location.end);
@@ -2209,7 +2209,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
2209
2209
  // name
2210
2210
  #line 199 "api_node.c.erb"
2211
2211
  assert(cast->name != 0);
2212
- argv[1] = rb_id2sym(constants[cast->name - 1]);
2212
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
2213
2213
 
2214
2214
  // name_loc
2215
2215
  #line 212 "api_node.c.erb"
@@ -2304,7 +2304,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
2304
2304
  // operator
2305
2305
  #line 199 "api_node.c.erb"
2306
2306
  assert(cast->operator != 0);
2307
- argv[4] = rb_id2sym(constants[cast->operator - 1]);
2307
+ argv[4] = RARRAY_AREF(constants, cast->operator - 1);
2308
2308
 
2309
2309
  // location
2310
2310
  argv[5] = pm_location_new(parser, node->location.start, node->location.end);
@@ -2401,7 +2401,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
2401
2401
  // name
2402
2402
  #line 199 "api_node.c.erb"
2403
2403
  assert(cast->name != 0);
2404
- argv[1] = rb_id2sym(constants[cast->name - 1]);
2404
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
2405
2405
 
2406
2406
  // location
2407
2407
  argv[2] = pm_location_new(parser, node->location.start, node->location.end);
@@ -2420,7 +2420,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
2420
2420
  // name
2421
2421
  #line 199 "api_node.c.erb"
2422
2422
  assert(cast->name != 0);
2423
- argv[1] = rb_id2sym(constants[cast->name - 1]);
2423
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
2424
2424
 
2425
2425
  // location
2426
2426
  argv[2] = pm_location_new(parser, node->location.start, node->location.end);
@@ -2439,7 +2439,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
2439
2439
  // name
2440
2440
  #line 199 "api_node.c.erb"
2441
2441
  assert(cast->name != 0);
2442
- argv[1] = rb_id2sym(constants[cast->name - 1]);
2442
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
2443
2443
 
2444
2444
  // name_loc
2445
2445
  #line 212 "api_node.c.erb"
@@ -2470,7 +2470,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
2470
2470
  // name
2471
2471
  #line 199 "api_node.c.erb"
2472
2472
  assert(cast->name != 0);
2473
- argv[1] = rb_id2sym(constants[cast->name - 1]);
2473
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
2474
2474
 
2475
2475
  // name_loc
2476
2476
  #line 212 "api_node.c.erb"
@@ -2493,7 +2493,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
2493
2493
  argv[6] = rb_ary_new_capa(cast->locals.size);
2494
2494
  for (size_t index = 0; index < cast->locals.size; index++) {
2495
2495
  assert(cast->locals.ids[index] != 0);
2496
- rb_ary_push(argv[6], rb_id2sym(constants[cast->locals.ids[index] - 1]));
2496
+ rb_ary_push(argv[6], RARRAY_AREF(constants, cast->locals.ids[index] - 1));
2497
2497
  }
2498
2498
 
2499
2499
  // def_keyword_loc
@@ -2854,7 +2854,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
2854
2854
  // name
2855
2855
  #line 199 "api_node.c.erb"
2856
2856
  assert(cast->name != 0);
2857
- argv[1] = rb_id2sym(constants[cast->name - 1]);
2857
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
2858
2858
 
2859
2859
  // name_loc
2860
2860
  #line 212 "api_node.c.erb"
@@ -2885,7 +2885,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
2885
2885
  // name
2886
2886
  #line 199 "api_node.c.erb"
2887
2887
  assert(cast->name != 0);
2888
- argv[1] = rb_id2sym(constants[cast->name - 1]);
2888
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
2889
2889
 
2890
2890
  // name_loc
2891
2891
  #line 212 "api_node.c.erb"
@@ -2902,7 +2902,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
2902
2902
  // operator
2903
2903
  #line 199 "api_node.c.erb"
2904
2904
  assert(cast->operator != 0);
2905
- argv[5] = rb_id2sym(constants[cast->operator - 1]);
2905
+ argv[5] = RARRAY_AREF(constants, cast->operator - 1);
2906
2906
 
2907
2907
  // location
2908
2908
  argv[6] = pm_location_new(parser, node->location.start, node->location.end);
@@ -2921,7 +2921,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
2921
2921
  // name
2922
2922
  #line 199 "api_node.c.erb"
2923
2923
  assert(cast->name != 0);
2924
- argv[1] = rb_id2sym(constants[cast->name - 1]);
2924
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
2925
2925
 
2926
2926
  // name_loc
2927
2927
  #line 212 "api_node.c.erb"
@@ -2952,7 +2952,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
2952
2952
  // name
2953
2953
  #line 199 "api_node.c.erb"
2954
2954
  assert(cast->name != 0);
2955
- argv[1] = rb_id2sym(constants[cast->name - 1]);
2955
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
2956
2956
 
2957
2957
  // location
2958
2958
  argv[2] = pm_location_new(parser, node->location.start, node->location.end);
@@ -2971,7 +2971,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
2971
2971
  // name
2972
2972
  #line 199 "api_node.c.erb"
2973
2973
  assert(cast->name != 0);
2974
- argv[1] = rb_id2sym(constants[cast->name - 1]);
2974
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
2975
2975
 
2976
2976
  // location
2977
2977
  argv[2] = pm_location_new(parser, node->location.start, node->location.end);
@@ -2990,7 +2990,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
2990
2990
  // name
2991
2991
  #line 199 "api_node.c.erb"
2992
2992
  assert(cast->name != 0);
2993
- argv[1] = rb_id2sym(constants[cast->name - 1]);
2993
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
2994
2994
 
2995
2995
  // name_loc
2996
2996
  #line 212 "api_node.c.erb"
@@ -3280,7 +3280,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
3280
3280
  // operator
3281
3281
  #line 199 "api_node.c.erb"
3282
3282
  assert(cast->operator != 0);
3283
- argv[8] = rb_id2sym(constants[cast->operator - 1]);
3283
+ argv[8] = RARRAY_AREF(constants, cast->operator - 1);
3284
3284
 
3285
3285
  // operator_loc
3286
3286
  #line 212 "api_node.c.erb"
@@ -3395,7 +3395,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
3395
3395
  // name
3396
3396
  #line 199 "api_node.c.erb"
3397
3397
  assert(cast->name != 0);
3398
- argv[1] = rb_id2sym(constants[cast->name - 1]);
3398
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
3399
3399
 
3400
3400
  // name_loc
3401
3401
  #line 212 "api_node.c.erb"
@@ -3426,7 +3426,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
3426
3426
  // name
3427
3427
  #line 199 "api_node.c.erb"
3428
3428
  assert(cast->name != 0);
3429
- argv[1] = rb_id2sym(constants[cast->name - 1]);
3429
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
3430
3430
 
3431
3431
  // name_loc
3432
3432
  #line 212 "api_node.c.erb"
@@ -3443,7 +3443,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
3443
3443
  // operator
3444
3444
  #line 199 "api_node.c.erb"
3445
3445
  assert(cast->operator != 0);
3446
- argv[5] = rb_id2sym(constants[cast->operator - 1]);
3446
+ argv[5] = RARRAY_AREF(constants, cast->operator - 1);
3447
3447
 
3448
3448
  // location
3449
3449
  argv[6] = pm_location_new(parser, node->location.start, node->location.end);
@@ -3462,7 +3462,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
3462
3462
  // name
3463
3463
  #line 199 "api_node.c.erb"
3464
3464
  assert(cast->name != 0);
3465
- argv[1] = rb_id2sym(constants[cast->name - 1]);
3465
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
3466
3466
 
3467
3467
  // name_loc
3468
3468
  #line 212 "api_node.c.erb"
@@ -3493,7 +3493,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
3493
3493
  // name
3494
3494
  #line 199 "api_node.c.erb"
3495
3495
  assert(cast->name != 0);
3496
- argv[1] = rb_id2sym(constants[cast->name - 1]);
3496
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
3497
3497
 
3498
3498
  // location
3499
3499
  argv[2] = pm_location_new(parser, node->location.start, node->location.end);
@@ -3512,7 +3512,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
3512
3512
  // name
3513
3513
  #line 199 "api_node.c.erb"
3514
3514
  assert(cast->name != 0);
3515
- argv[1] = rb_id2sym(constants[cast->name - 1]);
3515
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
3516
3516
 
3517
3517
  // location
3518
3518
  argv[2] = pm_location_new(parser, node->location.start, node->location.end);
@@ -3531,7 +3531,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
3531
3531
  // name
3532
3532
  #line 199 "api_node.c.erb"
3533
3533
  assert(cast->name != 0);
3534
- argv[1] = rb_id2sym(constants[cast->name - 1]);
3534
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
3535
3535
 
3536
3536
  // name_loc
3537
3537
  #line 212 "api_node.c.erb"
@@ -3781,7 +3781,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
3781
3781
  argv[1] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
3782
3782
 
3783
3783
  // name
3784
- argv[2] = cast->name == 0 ? Qnil : rb_id2sym(constants[cast->name - 1]);
3784
+ argv[2] = cast->name == 0 ? Qnil : RARRAY_AREF(constants, cast->name - 1);
3785
3785
 
3786
3786
  // name_loc
3787
3787
  #line 215 "api_node.c.erb"
@@ -3810,7 +3810,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
3810
3810
  argv[1] = rb_ary_new_capa(cast->locals.size);
3811
3811
  for (size_t index = 0; index < cast->locals.size; index++) {
3812
3812
  assert(cast->locals.ids[index] != 0);
3813
- rb_ary_push(argv[1], rb_id2sym(constants[cast->locals.ids[index] - 1]));
3813
+ rb_ary_push(argv[1], RARRAY_AREF(constants, cast->locals.ids[index] - 1));
3814
3814
  }
3815
3815
 
3816
3816
  // operator_loc
@@ -3862,7 +3862,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
3862
3862
  // name
3863
3863
  #line 199 "api_node.c.erb"
3864
3864
  assert(cast->name != 0);
3865
- argv[4] = rb_id2sym(constants[cast->name - 1]);
3865
+ argv[4] = RARRAY_AREF(constants, cast->name - 1);
3866
3866
 
3867
3867
  // depth
3868
3868
  #line 221 "api_node.c.erb"
@@ -3897,12 +3897,12 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
3897
3897
  // name
3898
3898
  #line 199 "api_node.c.erb"
3899
3899
  assert(cast->name != 0);
3900
- argv[4] = rb_id2sym(constants[cast->name - 1]);
3900
+ argv[4] = RARRAY_AREF(constants, cast->name - 1);
3901
3901
 
3902
3902
  // operator
3903
3903
  #line 199 "api_node.c.erb"
3904
3904
  assert(cast->operator != 0);
3905
- argv[5] = rb_id2sym(constants[cast->operator - 1]);
3905
+ argv[5] = RARRAY_AREF(constants, cast->operator - 1);
3906
3906
 
3907
3907
  // depth
3908
3908
  #line 221 "api_node.c.erb"
@@ -3937,7 +3937,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
3937
3937
  // name
3938
3938
  #line 199 "api_node.c.erb"
3939
3939
  assert(cast->name != 0);
3940
- argv[4] = rb_id2sym(constants[cast->name - 1]);
3940
+ argv[4] = RARRAY_AREF(constants, cast->name - 1);
3941
3941
 
3942
3942
  // depth
3943
3943
  #line 221 "api_node.c.erb"
@@ -3960,7 +3960,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
3960
3960
  // name
3961
3961
  #line 199 "api_node.c.erb"
3962
3962
  assert(cast->name != 0);
3963
- argv[1] = rb_id2sym(constants[cast->name - 1]);
3963
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
3964
3964
 
3965
3965
  // depth
3966
3966
  #line 221 "api_node.c.erb"
@@ -3983,7 +3983,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
3983
3983
  // name
3984
3984
  #line 199 "api_node.c.erb"
3985
3985
  assert(cast->name != 0);
3986
- argv[1] = rb_id2sym(constants[cast->name - 1]);
3986
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
3987
3987
 
3988
3988
  // depth
3989
3989
  #line 221 "api_node.c.erb"
@@ -4006,7 +4006,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
4006
4006
  // name
4007
4007
  #line 199 "api_node.c.erb"
4008
4008
  assert(cast->name != 0);
4009
- argv[1] = rb_id2sym(constants[cast->name - 1]);
4009
+ argv[1] = RARRAY_AREF(constants, cast->name - 1);
4010
4010
 
4011
4011
  // depth
4012
4012
  #line 221 "api_node.c.erb"
@@ -4167,7 +4167,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
4167
4167
  argv[1] = rb_ary_new_capa(cast->locals.size);
4168
4168
  for (size_t index = 0; index < cast->locals.size; index++) {
4169
4169
  assert(cast->locals.ids[index] != 0);
4170
- rb_ary_push(argv[1], rb_id2sym(constants[cast->locals.ids[index] - 1]));
4170
+ rb_ary_push(argv[1], RARRAY_AREF(constants, cast->locals.ids[index] - 1));
4171
4171
  }
4172
4172
 
4173
4173
  // module_keyword_loc
@@ -4189,7 +4189,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
4189
4189
  // name
4190
4190
  #line 199 "api_node.c.erb"
4191
4191
  assert(cast->name != 0);
4192
- argv[6] = rb_id2sym(constants[cast->name - 1]);
4192
+ argv[6] = RARRAY_AREF(constants, cast->name - 1);
4193
4193
 
4194
4194
  // location
4195
4195
  argv[7] = pm_location_new(parser, node->location.start, node->location.end);
@@ -4393,7 +4393,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
4393
4393
  // name
4394
4394
  #line 199 "api_node.c.erb"
4395
4395
  assert(cast->name != 0);
4396
- argv[2] = rb_id2sym(constants[cast->name - 1]);
4396
+ argv[2] = RARRAY_AREF(constants, cast->name - 1);
4397
4397
 
4398
4398
  // name_loc
4399
4399
  #line 212 "api_node.c.erb"
@@ -4424,7 +4424,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
4424
4424
  // name
4425
4425
  #line 199 "api_node.c.erb"
4426
4426
  assert(cast->name != 0);
4427
- argv[2] = rb_id2sym(constants[cast->name - 1]);
4427
+ argv[2] = RARRAY_AREF(constants, cast->name - 1);
4428
4428
 
4429
4429
  // name_loc
4430
4430
  #line 212 "api_node.c.erb"
@@ -4675,7 +4675,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
4675
4675
  argv[1] = rb_ary_new_capa(cast->locals.size);
4676
4676
  for (size_t index = 0; index < cast->locals.size; index++) {
4677
4677
  assert(cast->locals.ids[index] != 0);
4678
- rb_ary_push(argv[1], rb_id2sym(constants[cast->locals.ids[index] - 1]));
4678
+ rb_ary_push(argv[1], RARRAY_AREF(constants, cast->locals.ids[index] - 1));
4679
4679
  }
4680
4680
 
4681
4681
  // statements
@@ -4797,7 +4797,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
4797
4797
  // name
4798
4798
  #line 199 "api_node.c.erb"
4799
4799
  assert(cast->name != 0);
4800
- argv[2] = rb_id2sym(constants[cast->name - 1]);
4800
+ argv[2] = RARRAY_AREF(constants, cast->name - 1);
4801
4801
 
4802
4802
  // name_loc
4803
4803
  #line 212 "api_node.c.erb"
@@ -4824,7 +4824,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
4824
4824
  // name
4825
4825
  #line 199 "api_node.c.erb"
4826
4826
  assert(cast->name != 0);
4827
- argv[2] = rb_id2sym(constants[cast->name - 1]);
4827
+ argv[2] = RARRAY_AREF(constants, cast->name - 1);
4828
4828
 
4829
4829
  // location
4830
4830
  argv[3] = pm_location_new(parser, node->location.start, node->location.end);
@@ -4912,7 +4912,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
4912
4912
  argv[1] = ULONG2NUM(node->flags & ~PM_NODE_FLAG_COMMON_MASK);
4913
4913
 
4914
4914
  // name
4915
- argv[2] = cast->name == 0 ? Qnil : rb_id2sym(constants[cast->name - 1]);
4915
+ argv[2] = cast->name == 0 ? Qnil : RARRAY_AREF(constants, cast->name - 1);
4916
4916
 
4917
4917
  // name_loc
4918
4918
  #line 215 "api_node.c.erb"
@@ -5010,7 +5010,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
5010
5010
  argv[1] = rb_ary_new_capa(cast->locals.size);
5011
5011
  for (size_t index = 0; index < cast->locals.size; index++) {
5012
5012
  assert(cast->locals.ids[index] != 0);
5013
- rb_ary_push(argv[1], rb_id2sym(constants[cast->locals.ids[index] - 1]));
5013
+ rb_ary_push(argv[1], RARRAY_AREF(constants, cast->locals.ids[index] - 1));
5014
5014
  }
5015
5015
 
5016
5016
  // class_keyword_loc
@@ -5479,9 +5479,7 @@ pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encodi
5479
5479
  }
5480
5480
  }
5481
5481
 
5482
- VALUE result = rb_ary_pop(value_stack);
5483
- xfree(constants);
5484
- return result;
5482
+ return rb_ary_pop(value_stack);
5485
5483
  }
5486
5484
 
5487
5485
  void
data/ext/prism/extconf.rb CHANGED
@@ -40,15 +40,34 @@ def generate_templates
40
40
  end
41
41
  end
42
42
 
43
+ # We're going to need to run `make` using prism's `Makefile`. We want to match
44
+ # up as much of the configuration to the configuration that built the current
45
+ # version of Ruby as possible.
43
46
  require "rbconfig"
47
+ env = RbConfig::CONFIG.slice("SOEXT", "CPPFLAGS", "CFLAGS", "CC", "AR", "ARFLAGS", "MAKEDIRS", "RMALL")
48
+
49
+ # It's possible that the Ruby that is being run wasn't actually compiled on this
50
+ # machine, in which case the configuration might be incorrect. In this case
51
+ # we'll need to do some additional checks and potentially fall back to defaults.
52
+ if env.key?("CC") && !File.exist?(env["CC"])
53
+ env.delete("CC")
54
+ env.delete("CFLAGS")
55
+ env.delete("CPPFLAGS")
56
+ end
57
+
58
+ if env.key?("AR") && !File.exist?(env["AR"])
59
+ env.delete("AR")
60
+ env.delete("ARFLAGS")
61
+ end
44
62
 
45
63
  # Runs `make` in the root directory of the project. Note that this is the
46
64
  # `Makefile` for the overall project, not the `Makefile` that is being generated
47
65
  # by this script.`
48
- def make(target)
66
+ def make(env, target)
67
+ puts "Running make #{target} with #{env.inspect}"
49
68
  Dir.chdir(File.expand_path("../..", __dir__)) do
50
69
  system(
51
- RbConfig::CONFIG.slice(*%w[SOEXT CPPFLAGS CFLAGS CC AR ARFLAGS MAKEDIRS RMALL]), # env
70
+ env,
52
71
  RUBY_PLATFORM.include?("openbsd") ? "gmake" : "make",
53
72
  target,
54
73
  exception: true
@@ -62,7 +81,7 @@ end
62
81
  # but we want to use the native toolchain here since libprism is run natively.
63
82
  if RUBY_ENGINE != "ruby"
64
83
  generate_templates
65
- make("build/libprism.#{RbConfig::CONFIG["SOEXT"]}")
84
+ make(env, "build/libprism.#{RbConfig::CONFIG["SOEXT"]}")
66
85
  File.write("Makefile", "all install clean:\n\t@#{RbConfig::CONFIG["NULLCMD"]}\n")
67
86
  return
68
87
  end
@@ -110,7 +129,7 @@ append_cflags("-fvisibility=hidden")
110
129
  archive_target = "build/libprism.a"
111
130
  archive_path = File.expand_path("../../#{archive_target}", __dir__)
112
131
 
113
- make(archive_target) unless File.exist?(archive_path)
132
+ make(env, archive_target) unless File.exist?(archive_path)
114
133
  $LOCAL_LIBS << " #{archive_path}"
115
134
 
116
135
  # Finally, we'll create the `Makefile` that is going to be used to configure and