Class: CExtractorFunctions
- Includes:
- CExtractorConstants, CExtractorTypes
- Defined in:
- lib/ceedling/c_extractor/c_extractor_functions.rb
Constant Summary
Constants included from CExtractorConstants
CExtractorConstants::C11_SPECIFIER_KEYWORDS, CExtractorConstants::DECORATOR_KEYWORDS, CExtractorConstants::DEFAULT_CHUNK_SIZE, CExtractorConstants::DEFAULT_MAX_FUNCTION_LENGTH, CExtractorConstants::MODIFIER_KEYWORDS, CExtractorConstants::MSVC_CALLING_CONVENTIONS, CExtractorConstants::PRIVATE_KEYWORDS, CExtractorConstants::TYPE_KEYWORDS, CExtractorConstants::TYPE_QUALIFIER_KEYWORDS
Instance Method Summary collapse
- #setup ⇒ Object
- #try_extract_function_declaration(scanner) ⇒ Object
-
#try_extract_function_definition(scanner, filepath) ⇒ Object
Try to extract a complete function from the scanner Returns [success, function_data] where: - success: boolean indicating if extraction was successful - function_data: CFunctionDefinition with as much info as available (may be partial on failure).
Instance Method Details
#setup ⇒ Object
18 19 20 21 |
# File 'lib/ceedling/c_extractor/c_extractor_functions.rb', line 18 def setup() # Aliases @code_text = @c_extractor_code_text end |
#try_extract_function_declaration(scanner) ⇒ Object
23 24 25 26 27 28 29 30 31 |
# File 'lib/ceedling/c_extractor/c_extractor_functions.rb', line 23 def try_extract_function_declaration(scanner) # Look for function signature signature = extract_function_signature(scanner, :declaration) return [false, nil] unless signature name = extract_function_name(signature) decorators, signature_stripped = parse_decorators_and_strip(signature, name) return [true, CFunctionDeclaration.new(name: name, signature: signature, decorators: decorators, signature_stripped: signature_stripped)] end |
#try_extract_function_definition(scanner, filepath) ⇒ Object
Try to extract a complete function from the scanner Returns [success, function_data] where:
- success: boolean indicating if extraction was successful
- function_data: CFunctionDefinition with as much info as available (may be partial on failure)
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/ceedling/c_extractor/c_extractor_functions.rb', line 37 def try_extract_function_definition(scanner, filepath) start_pos = scanner.pos # Look for function signature signature = extract_function_signature(scanner, :definition) return [false, CFunctionDefinition.new] unless signature @code_text.skip_deadspace(scanner) unless scanner.peek(1) == '{' return [false, CFunctionDefinition.new( name: extract_function_name(signature), signature: signature, filepath: filepath )] end # Extract function body success, braced_body = @code_text.extract_balanced_braces(scanner) unless success return [false, CFunctionDefinition.new( name: extract_function_name(signature), signature: signature, source_filepath: filepath, code_block: scanner.string[start_pos...scanner.pos] )] end # Extract full function definition code_block = scanner.string[start_pos...scanner.pos] # Fill out function data class name = extract_function_name(signature) decorators, signature_stripped = parse_decorators_and_strip(signature, name) func = CFunctionDefinition.new( name: name, signature: signature, source_filepath: filepath, body: braced_body, code_block: code_block, line_count: code_block.count("\n") + 1, decorators: decorators, signature_stripped: signature_stripped ) return [true, func] end |