cobol-parser 3.3.1__tar.gz → 3.3.2__tar.gz
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.
- {cobol_parser-3.3.1/cobol_parser.egg-info → cobol_parser-3.3.2}/PKG-INFO +1 -1
- {cobol_parser-3.3.1 → cobol_parser-3.3.2/cobol_parser.egg-info}/PKG-INFO +1 -1
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobol_parser.egg-info/SOURCES.txt +1 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/__init__.py +1 -1
- cobol_parser-3.3.2/cobolparser/analysis/_abend.py +25 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/move_type_checker.py +6 -6
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/program_flow/models.py +5 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/program_flow/scanner.py +13 -2
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/recursion_risk.py +1 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/xref.py +5 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/lexer.py +78 -6
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/mcp/tools.py +5 -1
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/pyproject.toml +1 -1
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/LICENSE +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/MANIFEST.in +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/README.md +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobol_parser.egg-info/dependency_links.txt +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobol_parser.egg-info/entry_points.txt +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobol_parser.egg-info/requires.txt +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobol_parser.egg-info/top_level.txt +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/__main__.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/_accel.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/_data_fast.c +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/_data_fast.pyx +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/_errors.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/_facts_cache.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/_lexer_fast.c +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/_lexer_fast.pyx +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/_lines.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/_literals.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/_preprocess_fast.c +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/_preprocess_fast.pyx +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/_source_directive.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/_storage.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/__init__.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/_cics.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/_files.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/_names.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/_procedures.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/_sql_flow.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/_sql_whenever.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/ast_diff.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/boundary_inventory.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/business_rules.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/call_interface.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/codebase.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/complexity.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/const_fold.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/constraints.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/crud_matrix.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/dclgen_check.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/dead_code.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/domains.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/field_lineage.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/field_widening.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/host_var_resolver.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/ims_segment_analyzer.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/invocation_counts.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/io_coverage_reporter.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/io_diagnostics.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/io_logger.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/io_sequence.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/language_env_analyzer.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/lineage_graph.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/lineage_jcl.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/linkage_checker.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/lint.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/program_flow/__init__.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/program_flow/analyzer.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/program_flow/condition_text.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/program_flow/cycles.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/program_flow/edges.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/program_flow/graph.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/program_flow/statement_text.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/program_signature.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/redundancy.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/sarif.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/sql_cics_lint.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/technical_debt.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/unused_variables.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/value_tracker.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/batch.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/cli/__init__.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/cli/_project_config.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/cli/coverage.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/cli/parse.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/config/__init__.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/config/_yaml.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/config/project.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/core/__init__.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/core/ast_factory.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/core/exceptions.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/core/interfaces.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/core/registry.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/core/token_stream.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/definitions/__init__.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/definitions/_asm.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/definitions/bms.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/definitions/csd.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/definitions/ddl.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/definitions/ims.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/dialects/__init__.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/dialects/ibm_enterprise.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/dialects/le_signatures.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/generators/__init__.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/generators/copybook_data.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/generators/data/__init__.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/generators/data/bundle.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/generators/data/compare.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/generators/data/copybook.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/generators/data/dataset.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/generators/data/decoding.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/generators/data/editing.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/generators/data/encoding.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/generators/data/errors.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/generators/data/layout.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/generators/data/layout_offsets.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/generators/data/options.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/generators/data/program_layout.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/generators/data/storage.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/generators/data/values.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/generators/data/views.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/generators/flowchart.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/generators/program_fixtures.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/generators/scenarios.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/generators/verification.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/jcl/__init__.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/jcl/bindings.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/jcl/models.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/jcl/parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/jcl/programs.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/mcp/__init__.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/mcp/claims.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/mcp/codebase_index.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/mcp/envelope.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/mcp/facts.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/mcp/hints.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/mcp/jcl_tools.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/mcp/languages.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/mcp/link_decks.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/mcp/navigation.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/mcp/prompts.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/mcp/server.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/mcp/slicing.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/mcp/sort_layout.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/mcp/workspace.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/models/__init__.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/models/ast_base.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/models/data_items.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/models/program.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/models/sql_statements.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/models/statements/__init__.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/models/statements/arithmetic.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/models/statements/base.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/models/statements/call.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/models/statements/communication.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/models/statements/control.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/models/statements/data.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/models/statements/io.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/models/statements/legacy.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/models/statements/misc.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/models/statements/report_writer.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/__init__.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/divisions/__init__.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/divisions/base.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/divisions/data.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/divisions/data_clauses.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/divisions/data_file_description.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/divisions/data_report_description.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/divisions/data_special_entries.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/divisions/environment.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/divisions/environment_sections.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/divisions/environment_select.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/divisions/factory.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/divisions/identification.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/divisions/procedure.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/divisions/procedure_boundaries.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/divisions/procedure_recovery.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/divisions/procedure_registry.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/__init__.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/_conditions.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/_utils.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/accept_parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/allocate_free_parsers.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/arithmetic_parsers.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/call_parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/close_parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/communication_parsers.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/delete_parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/display_parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/entry_parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/evaluate_parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/exception_parsers.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/go_parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/ibm_exec_statements.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/if_parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/initialize_inspect_parsers.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/invoke_parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/legacy_verb_parsers.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/move_parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/open_parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/perform_parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/read_parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/report_writer_parsers.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/rewrite_parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/search_parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/set_parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/simple_statement_parsers.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/sort_merge_parsers.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/start_parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/stop_parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/string_unstring_parsers.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/unlock_parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/write_parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/parsers/statements/xml_json_parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/plugins/__init__.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/plugins/core.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/preprocess/__init__.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/preprocess/_normalize.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/preprocess/copy_statement_parser.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/preprocess/copybook_expander.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/preprocess/models.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/preprocess/path_resolver.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/preprocess/replace_statement.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/preprocess/source_format.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/profiling.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/py.typed +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/scan.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/setup.cfg +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/setup.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/tests/test_all_samples.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/tests/test_okf_claims.py +0 -0
- {cobol_parser-3.3.1 → cobol_parser-3.3.2}/tests/test_okf_staleness_map.py +0 -0
|
@@ -231,7 +231,7 @@ from .scan import (
|
|
|
231
231
|
CobolParseError = ParseError
|
|
232
232
|
|
|
233
233
|
# Version info
|
|
234
|
-
__version__ = "3.3.
|
|
234
|
+
__version__ = "3.3.2" # x-release-please-version
|
|
235
235
|
__author__ = "Samuel Dion"
|
|
236
236
|
__license__ = "AGPL-3.0-or-later"
|
|
237
237
|
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""Static CALLs of abend services that never return to the caller."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
from ..models.statements.call import CallStatement
|
|
8
|
+
|
|
9
|
+
#: IBM abend services that end the run unit and never return: Language
|
|
10
|
+
#: Environment's CEE3ABD ("CEE3ABD does not return", ``le_signatures``) and
|
|
11
|
+
#: the COBOL library's ILBOABN0. Site-specific abend modules (``ABEND``,
|
|
12
|
+
#: ``CKRABEND``) are left out: whether they return is not known here.
|
|
13
|
+
NON_RETURNING_ABEND_PROGRAMS = frozenset({"CEE3ABD", "ILBOABN0"})
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def abend_call_target(stmt: Any) -> str | None:
|
|
17
|
+
"""The abend service *stmt* CALLs statically, or None.
|
|
18
|
+
|
|
19
|
+
Only a literal ``CALL 'CEE3ABD'`` counts: a dynamic CALL through a data
|
|
20
|
+
name may name any program at run time.
|
|
21
|
+
"""
|
|
22
|
+
if not isinstance(stmt, CallStatement) or stmt.is_dynamic:
|
|
23
|
+
return None
|
|
24
|
+
target = (stmt.called_program or "").strip().strip("'\"").upper()
|
|
25
|
+
return target if target in NON_RETURNING_ABEND_PROGRAMS else None
|
|
@@ -510,14 +510,14 @@ def _classify_picture(pic: PictureClause) -> DataCategory:
|
|
|
510
510
|
|
|
511
511
|
if has_edit_chars:
|
|
512
512
|
# Test symbols on pattern_no_reps: the 9 in a repeat count such as
|
|
513
|
-
# X(9)BX(9) is not a digit position.
|
|
514
|
-
#
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
#
|
|
513
|
+
# X(9)BX(9) is not a digit position. An edited picture holding an
|
|
514
|
+
# X or an A is alphanumeric-edited even when it also holds 9s
|
|
515
|
+
# (PIC XXB99, 99/XX, A9B9): only numeric editing symbols with 9s
|
|
516
|
+
# make an item numeric-edited (IBM Language Reference, "PICTURE
|
|
517
|
+
# clause editing").
|
|
518
518
|
if "X" in pattern_no_reps or "A" in pattern_no_reps:
|
|
519
519
|
return DataCategory.ALPHANUMERIC_EDITED
|
|
520
|
-
return DataCategory.NUMERIC_EDITED
|
|
520
|
+
return DataCategory.NUMERIC_EDITED
|
|
521
521
|
|
|
522
522
|
# Pure numeric: only S, 9, V, P and grouping digits
|
|
523
523
|
if _PIC_NUMERIC_ONLY_RE.match(pattern):
|
|
@@ -77,6 +77,9 @@ class FlowNode:
|
|
|
77
77
|
#: EXEC CICS RETURN / XCTL / ABEND: leaves the program, at least when
|
|
78
78
|
#: it succeeds (one with RESP / NOHANDLE may also fall through).
|
|
79
79
|
has_cics_exit: bool = False
|
|
80
|
+
#: A static CALL of a Language Environment abend service that never
|
|
81
|
+
#: returns (``CALL 'CEE3ABD'``, ``CALL 'ILBOABN0'``): ends the program.
|
|
82
|
+
has_abend_call: bool = False
|
|
80
83
|
#: A SORT/MERGE ``RETURN sd-file`` (reads the next sorted record) --
|
|
81
84
|
#: not a program terminator, unlike the four flags above.
|
|
82
85
|
has_return: bool = False
|
|
@@ -124,6 +127,8 @@ class FlowNode:
|
|
|
124
127
|
result["has_exit_program"] = True
|
|
125
128
|
if self.has_cics_exit:
|
|
126
129
|
result["has_cics_exit"] = True
|
|
130
|
+
if self.has_abend_call:
|
|
131
|
+
result["has_abend_call"] = True
|
|
127
132
|
if self.has_return:
|
|
128
133
|
result["has_return"] = True
|
|
129
134
|
if self.has_exit_section:
|
|
@@ -32,6 +32,7 @@ from ...models.statements.misc import (
|
|
|
32
32
|
SortStatement,
|
|
33
33
|
XmlJsonStatement,
|
|
34
34
|
)
|
|
35
|
+
from .._abend import abend_call_target
|
|
35
36
|
from .._cics import cics_exit_kind, cics_terminator_kind
|
|
36
37
|
from .._procedures import ProcedureIndex, branch_terminates, enclosing_section
|
|
37
38
|
from .condition_text import render_condition_text
|
|
@@ -337,6 +338,13 @@ class ProcedureScanner:
|
|
|
337
338
|
elif isinstance(stmt, CallStatement):
|
|
338
339
|
node.call_count += 1
|
|
339
340
|
self._collector.process_call(stmt, proc_name)
|
|
341
|
+
abend_target = abend_call_target(stmt)
|
|
342
|
+
if abend_target is not None:
|
|
343
|
+
node.has_abend_call = True
|
|
344
|
+
self._exit_points.add(proc_name)
|
|
345
|
+
self._record_exit_statement(
|
|
346
|
+
node, f"CALL '{abend_target}'", stmt.location
|
|
347
|
+
)
|
|
340
348
|
# Queue exception handler branches for nested flow
|
|
341
349
|
push_sequential(
|
|
342
350
|
[
|
|
@@ -678,8 +686,9 @@ class ProcedureScanner:
|
|
|
678
686
|
reached: STOP RUN (not STOP 'literal', which merely halts pending
|
|
679
687
|
operator action), GOBACK, EXIT PROGRAM, a non-DEPENDING GO TO --
|
|
680
688
|
including the alterable ``GO TO.`` with no operand, which always
|
|
681
|
-
transfers to whatever an ALTER last set it to --
|
|
682
|
-
RETURN / XCTL / ABEND (see ``_cics``)
|
|
689
|
+
transfers to whatever an ALTER last set it to -- EXEC CICS
|
|
690
|
+
RETURN / XCTL / ABEND (see ``_cics``), or a static CALL of a
|
|
691
|
+
non-returning abend service (``abend_call_target``, #817). Mirrors
|
|
683
692
|
DeadCodeAnalyzer._is_terminator, kept independent per this package's
|
|
684
693
|
existing collaborator architecture. An exhaustive IF/EVALUATE whose
|
|
685
694
|
every arm terminates counts too (``_procedures.branch_terminates``).
|
|
@@ -690,6 +699,8 @@ class ProcedureScanner:
|
|
|
690
699
|
return True
|
|
691
700
|
if isinstance(stmt, GobackStatement):
|
|
692
701
|
return True
|
|
702
|
+
if abend_call_target(stmt) is not None:
|
|
703
|
+
return True
|
|
693
704
|
if isinstance(stmt, StopStatement):
|
|
694
705
|
return stmt.stop_type == "RUN"
|
|
695
706
|
if isinstance(stmt, ExitStatement):
|
|
@@ -34,6 +34,7 @@ import re
|
|
|
34
34
|
from dataclasses import dataclass, field
|
|
35
35
|
from typing import Any
|
|
36
36
|
|
|
37
|
+
from .._literals import QUOTED_LITERAL_RE
|
|
37
38
|
from ..dialects.ibm_enterprise import IBMEnterpriseCobol
|
|
38
39
|
from ..lexer import CobolLexer
|
|
39
40
|
from ..models.ast_base import ASTNode, SourceLocation
|
|
@@ -500,6 +501,10 @@ def _split_operand(text: str) -> tuple[set[str], set[str], set[str], bool]:
|
|
|
500
501
|
"""
|
|
501
502
|
if not text:
|
|
502
503
|
return set(), set(), set(), True
|
|
504
|
+
# A literal's text is no operand: `MOVE "TEST(S) FAILED" TO X` read S as a
|
|
505
|
+
# subscript (NIST CCVS85, every program), since the parentheses were
|
|
506
|
+
# split off before the literal was dropped.
|
|
507
|
+
text = QUOTED_LITERAL_RE.sub(" ", text)
|
|
503
508
|
# DFHRESP(cond) / DFHVALUE(cvda): the argument is no subscript (#594).
|
|
504
509
|
text = strip_translator_arguments(text)
|
|
505
510
|
|
|
@@ -2731,15 +2731,70 @@ class _CobolLexerPure:
|
|
|
2731
2731
|
):
|
|
2732
2732
|
end += 1
|
|
2733
2733
|
if end - index > 1 and not self._after_picture(merged):
|
|
2734
|
-
|
|
2735
|
-
if
|
|
2736
|
-
|
|
2734
|
+
span = self._template_name_span(tokens, index, end)
|
|
2735
|
+
if span is not None:
|
|
2736
|
+
start, stop = span
|
|
2737
|
+
text = "".join(t.value or "" for t in tokens[start:stop])
|
|
2738
|
+
merged.extend(tokens[index:start])
|
|
2739
|
+
merged.append(
|
|
2740
|
+
Token(TokenType.IDENTIFIER, text, tokens[start].location)
|
|
2741
|
+
)
|
|
2742
|
+
merged.extend(tokens[stop:end])
|
|
2737
2743
|
index = end
|
|
2738
2744
|
continue
|
|
2739
2745
|
merged.extend(tokens[index:end])
|
|
2740
2746
|
index = end
|
|
2741
2747
|
tokens[:] = merged
|
|
2742
2748
|
|
|
2749
|
+
def _template_name_span(
|
|
2750
|
+
self, tokens: list[Token], index: int, end: int
|
|
2751
|
+
) -> tuple[int, int] | None:
|
|
2752
|
+
"""The ``[start, stop)`` slice of the run ``tokens[index:end]`` that
|
|
2753
|
+
spells a placeholder name, or None.
|
|
2754
|
+
|
|
2755
|
+
The run may carry a condition's own parentheses abutting the name:
|
|
2756
|
+
``IF (FLG-(TESTVAR1)-NOT-OK`` / ``OR FLG-(TESTVAR1)-BLANK)``. Those
|
|
2757
|
+
leading '(' and trailing ')' tokens are peeled off, fewest first,
|
|
2758
|
+
so a placeholder that ends the name (``WS-(SFX)``) keeps its ')'.
|
|
2759
|
+
A reserved word the '(' abuts (``NOT(``, ``AND(``, ``UNTIL(``, #814)
|
|
2760
|
+
is peeled off first: it is never part of the name.
|
|
2761
|
+
"""
|
|
2762
|
+
if (
|
|
2763
|
+
end - index > 2
|
|
2764
|
+
and tokens[index + 1].type == TokenType.LEFT_PAREN
|
|
2765
|
+
and self._is_reserved_word(tokens[index])
|
|
2766
|
+
):
|
|
2767
|
+
index += 1
|
|
2768
|
+
leading = 0
|
|
2769
|
+
while index + leading < end and tokens[index + leading].type == (
|
|
2770
|
+
TokenType.LEFT_PAREN
|
|
2771
|
+
):
|
|
2772
|
+
leading += 1
|
|
2773
|
+
trailing = 0
|
|
2774
|
+
while end - trailing > index and tokens[end - trailing - 1].type == (
|
|
2775
|
+
TokenType.RIGHT_PAREN
|
|
2776
|
+
):
|
|
2777
|
+
trailing += 1
|
|
2778
|
+
for peel_left in range(leading + 1):
|
|
2779
|
+
for peel_right in range(trailing + 1):
|
|
2780
|
+
start, stop = index + peel_left, end - peel_right
|
|
2781
|
+
if stop - start < 2:
|
|
2782
|
+
continue
|
|
2783
|
+
text = "".join(t.value or "" for t in tokens[start:stop])
|
|
2784
|
+
if self._TEMPLATE_NAME_RE.fullmatch(text):
|
|
2785
|
+
return start, stop
|
|
2786
|
+
return None
|
|
2787
|
+
|
|
2788
|
+
@staticmethod
|
|
2789
|
+
def _is_reserved_word(token: Token) -> bool:
|
|
2790
|
+
"""Whether *token* is a COBOL reserved word (a keyword token)."""
|
|
2791
|
+
value = token.value or ""
|
|
2792
|
+
return (
|
|
2793
|
+
token.type != TokenType.IDENTIFIER
|
|
2794
|
+
and value.isalpha()
|
|
2795
|
+
and token.type.name == value.upper().replace("-", "_")
|
|
2796
|
+
)
|
|
2797
|
+
|
|
2743
2798
|
@staticmethod
|
|
2744
2799
|
def _after_picture(merged: list[Token]) -> bool:
|
|
2745
2800
|
"""Whether the next token is a PICTURE string (``PIC [IS] ...``)."""
|
|
@@ -2781,8 +2836,9 @@ class _CobolLexerPure:
|
|
|
2781
2836
|
A '#' or '@' that abuts a word (``WS-#CPT``, ``@ADDR``) is a letter
|
|
2782
2837
|
of that name in some shops' dialects; it is glued into one
|
|
2783
2838
|
IDENTIFIER rather than dropped, so every reference to the name stays
|
|
2784
|
-
the same name
|
|
2785
|
-
|
|
2839
|
+
the same name, whether or not that character is also a declared
|
|
2840
|
+
PICTURE currency symbol. Otherwise a declared currency symbol
|
|
2841
|
+
(``CURRENCY SIGN IS 'EUR' WITH PICTURE SYMBOL '#'``) becomes CURRENCY.
|
|
2786
2842
|
|
|
2787
2843
|
A single linear pass, shared verbatim by the Cython fast path, which
|
|
2788
2844
|
inherits this method.
|
|
@@ -2796,9 +2852,17 @@ class _CobolLexerPure:
|
|
|
2796
2852
|
in_exec = False
|
|
2797
2853
|
# Whether kept[-1] is a name already glued around a '#' / '@'.
|
|
2798
2854
|
glued = False
|
|
2855
|
+
# Whether *token* belongs to a PICTURE string: the run of abutting
|
|
2856
|
+
# tokens right after PIC / PICTURE [IS]. Only there is a declared
|
|
2857
|
+
# currency symbol one (#809).
|
|
2858
|
+
in_picture = False
|
|
2799
2859
|
count = len(tokens)
|
|
2800
2860
|
for index, token in enumerate(tokens):
|
|
2801
2861
|
ttype = token.type
|
|
2862
|
+
if in_picture and not self._abuts(tokens[index - 1], token):
|
|
2863
|
+
in_picture = False
|
|
2864
|
+
if not in_picture and self._after_picture(kept):
|
|
2865
|
+
in_picture = True
|
|
2802
2866
|
if ttype == TokenType.EXEC:
|
|
2803
2867
|
in_exec = True
|
|
2804
2868
|
elif ttype == TokenType.END_EXEC:
|
|
@@ -2821,11 +2885,14 @@ class _CobolLexerPure:
|
|
|
2821
2885
|
continue
|
|
2822
2886
|
line = token.location.line if token.location else 0
|
|
2823
2887
|
if ttype == TokenType.SQL_NAME_CHAR:
|
|
2824
|
-
if token.value in self._currency_symbols:
|
|
2888
|
+
if in_picture and token.value in self._currency_symbols:
|
|
2825
2889
|
token.type = TokenType.CURRENCY
|
|
2826
2890
|
kept.append(token)
|
|
2827
2891
|
glued = False
|
|
2828
2892
|
continue
|
|
2893
|
+
# Outside a PICTURE string a currency symbol means nothing,
|
|
2894
|
+
# so ``WS-#N`` stays one name even when '#' is the PICTURE
|
|
2895
|
+
# currency symbol (#809).
|
|
2829
2896
|
prev = kept[-1] if kept else None
|
|
2830
2897
|
nxt = tokens[index + 1] if index + 1 < count else None
|
|
2831
2898
|
if (
|
|
@@ -2851,6 +2918,11 @@ class _CobolLexerPure:
|
|
|
2851
2918
|
glued = True
|
|
2852
2919
|
glued_names.setdefault(token.value, []).append(line)
|
|
2853
2920
|
continue
|
|
2921
|
+
if token.value in self._currency_symbols:
|
|
2922
|
+
token.type = TokenType.CURRENCY
|
|
2923
|
+
kept.append(token)
|
|
2924
|
+
glued = False
|
|
2925
|
+
continue
|
|
2854
2926
|
dropped.setdefault(token.value, []).append(line)
|
|
2855
2927
|
glued = False
|
|
2856
2928
|
tokens[:] = kept
|
|
@@ -3285,7 +3285,11 @@ def _control_flow_notes(nodes: list[Any]) -> list[str]:
|
|
|
3285
3285
|
ends = [
|
|
3286
3286
|
n
|
|
3287
3287
|
for n in nodes
|
|
3288
|
-
if n.has_stop_run
|
|
3288
|
+
if n.has_stop_run
|
|
3289
|
+
or n.has_goback
|
|
3290
|
+
or n.has_exit_program
|
|
3291
|
+
or n.has_cics_exit
|
|
3292
|
+
or n.has_abend_call
|
|
3289
3293
|
]
|
|
3290
3294
|
if not ends:
|
|
3291
3295
|
notes.append(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/program_flow/condition_text.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cobol_parser-3.3.1 → cobol_parser-3.3.2}/cobolparser/analysis/program_flow/statement_text.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|