@@ -324,12 +324,100 @@ def do_boot_defclass
324
324
# Scans #content for rb_define_class, boot_defclass, rb_define_class_under
325
325
# and rb_singleton_class
326
326
327
- def do_classes
328
- do_boot_defclass
329
- do_define_class
330
- do_define_class_under
331
- do_singleton_class
332
- do_struct_define_without_accessor
327
+ def do_classes_and_modules
328
+ do_boot_defclass if @file_name == "class.c"
329
+
330
+ @content . scan (
331
+ %r(
332
+ (?<var_name>[\w \. ]+)\s * =
333
+ \s *rb_(?:
334
+ define_(?:
335
+ class(?: # rb_define_class(class_name_1, parent_name_1)
336
+ \s *\(
337
+ \s *"(?<class_name_1>\w +)",
338
+ \s *(?<parent_name_1>\w +)\s *
339
+ \)
340
+ |
341
+ _under\s *\( # rb_define_class_under(class_under, class_name2, parent_name2...)
342
+ \s * (?<class_under>\w +),
343
+ \s * "(?<class_name_2>\w +)",
344
+ \s *
345
+ (?:
346
+ (?<parent_name_2>[\w \* \s \( \) \. \- >]+) |
347
+ rb_path2class\( "(?<path>[\w :]+)"\)
348
+ )
349
+ \s *\)
350
+ )
351
+ |
352
+ module(?: # rb_define_module(module_name_1)
353
+ \s *\(
354
+ \s *"(?<module_name_1>\w +)"\s *
355
+ \)
356
+ |
357
+ _under\s *\( # rb_define_module_under(module_under, module_name_1)
358
+ \s *(?<module_under>\w +),
359
+ \s *"(?<module_name_2>\w +)"
360
+ \s *\)
361
+ )
362
+ )
363
+ |
364
+ struct_define_without_accessor\s *\( # rb_struct_define_without_accessor(class_name_3, parent_name_3, ...)
365
+ \s *"(?<class_name_3>\w +)",
366
+ \s *(?<parent_name_3>\w +),
367
+ \s *\w +, # Allocation function
368
+ (?:\s *"\w +",)* # Attributes
369
+ \s *NULL
370
+ \)
371
+ |
372
+ singleton_class\s *\( # rb_singleton_class(target_class_name)
373
+ \s *(?<target_class_name>\w +)
374
+ \)
375
+ )
376
+ )mx
377
+ ) do
378
+ class_name = $~[ :class_name_1 ]
379
+ type = :class
380
+ if class_name
381
+ # rb_define_class(class_name_1, parent_name_1)
382
+ parent_name = $~[ :parent_name_1 ]
383
+ #under = nil
384
+ else
385
+ class_name = $~[ :class_name_2 ]
386
+ if class_name
387
+ # rb_define_class_under(class_under, class_name2, parent_name2...)
388
+ parent_name = $~[ :parent_name_2 ] || $~[ :path ]
389
+ under = $~[ :class_under ]
390
+ else
391
+ class_name = $~[ :class_name_3 ]
392
+ if class_name
393
+ # rb_struct_define_without_accessor(class_name_3, parent_name_3, ...)
394
+ parent_name = $~[ :parent_name_3 ]
395
+ #under = nil
396
+ else
397
+ type = :module
398
+ class_name = $~[ :module_name_1 ]
399
+ #parent_name = nil
400
+ if class_name
401
+ # rb_define_module(module_name_1)
402
+ #under = nil
403
+ else
404
+ class_name = $~[ :module_name_2 ]
405
+ if class_name
406
+ # rb_define_module_under(module_under, module_name_1)
407
+ under = $~[ :module_under ]
408
+ else
409
+ # rb_singleton_class(target_class_name)
410
+ target_class_name = $~[ :target_class_name ]
411
+ handle_singleton $~[ :var_name ] , target_class_name
412
+ return
413
+ end
414
+ end
415
+ end
416
+ end
417
+ end
418
+
419
+ handle_class_module ( $~[ :var_name ] , type , class_name , parent_name , under )
420
+ end
333
421
end
334
422
335
423
##
@@ -378,65 +466,6 @@ def do_constants
378
466
end
379
467
end
380
468
381
- ##
382
- # Scans #content for rb_define_class
383
-
384
- def do_define_class
385
- # The '.' lets us handle SWIG-generated files
386
- @content . scan ( /([\w \. ]+)\s * = \s *rb_define_class\s *
387
- \(
388
- \s *"(\w +)",
389
- \s *(\w +)\s *
390
- \) /mx ) do |var_name , class_name , parent |
391
- handle_class_module ( var_name , :class , class_name , parent , nil )
392
- end
393
- end
394
-
395
- ##
396
- # Scans #content for rb_define_class_under
397
-
398
- def do_define_class_under
399
- @content . scan ( /([\w \. ]+)\s * = # var_name
400
- \s *rb_define_class_under\s *
401
- \(
402
- \s * (\w +), # under
403
- \s * "(\w +)", # class_name
404
- \s *
405
- (?:
406
- ([\w \* \s \( \) \. \- >]+) | # parent_name
407
- rb_path2class\( "([\w :]+)"\) # path
408
- )
409
- \s *
410
- \)
411
- /mx ) do |var_name , under , class_name , parent_name , path |
412
- parent = path || parent_name
413
-
414
- handle_class_module var_name , :class , class_name , parent , under
415
- end
416
- end
417
-
418
- ##
419
- # Scans #content for rb_define_module
420
-
421
- def do_define_module
422
- @content . scan ( /(\w +)\s * = \s *rb_define_module\s *\( \s *"(\w +)"\s *\) /mx ) do
423
- |var_name , class_name |
424
- handle_class_module ( var_name , :module , class_name , nil , nil )
425
- end
426
- end
427
-
428
- ##
429
- # Scans #content for rb_define_module_under
430
-
431
- def do_define_module_under
432
- @content . scan ( /(\w +)\s * = \s *rb_define_module_under\s *
433
- \(
434
- \s *(\w +),
435
- \s *"(\w +)"
436
- \s *\) /mx ) do |var_name , in_module , class_name |
437
- handle_class_module ( var_name , :module , class_name , nil , in_module )
438
- end
439
- end
440
469
441
470
##
442
471
# Scans #content for rb_include_module
@@ -518,42 +547,6 @@ def do_missing
518
547
end
519
548
end
520
549
521
- ##
522
- # Scans #content for rb_define_module and rb_define_module_under
523
-
524
- def do_modules
525
- do_define_module
526
- do_define_module_under
527
- end
528
-
529
- ##
530
- # Scans #content for rb_singleton_class
531
-
532
- def do_singleton_class
533
- @content . scan ( /([\w \. ]+)\s * = \s *rb_singleton_class\s *
534
- \(
535
- \s *(\w +)
536
- \s *\) /mx ) do |sclass_var , class_var |
537
- handle_singleton sclass_var , class_var
538
- end
539
- end
540
-
541
- ##
542
- # Scans #content for struct_define_without_accessor
543
-
544
- def do_struct_define_without_accessor
545
- @content . scan ( /([\w \. ]+)\s * = \s *rb_struct_define_without_accessor\s *
546
- \(
547
- \s *"(\w +)", # Class name
548
- \s *(\w +), # Parent class
549
- \s *\w +, # Allocation function
550
- (\s *"\w +",)* # Attributes
551
- \s *NULL
552
- \) /mx ) do |var_name , class_name , parent |
553
- handle_class_module ( var_name , :class , class_name , parent , nil )
554
- end
555
- end
556
-
557
550
##
558
551
# Finds the comment for an alias on +class_name+ from +new_name+ to
559
552
# +old_name+
@@ -1247,8 +1240,7 @@ def remove_commented_out_lines
1247
1240
def scan
1248
1241
remove_commented_out_lines
1249
1242
1250
- do_modules
1251
- do_classes
1243
+ do_classes_and_modules
1252
1244
do_missing
1253
1245
1254
1246
do_constants
0 commit comments