• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Community
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
    • Software-verification
      • Kestrel-books
        • Crypto-hdwallet
        • Apt
        • Error-checking
        • Fty-extensions
        • Isar
        • Kestrel-utilities
        • Set
        • C
          • Syntax-for-tools
            • Formalized-subset
            • Mapping-to-language-definition
            • Input-files
            • Compilation-database
            • Printer
            • Output-files
            • Abstract-syntax-operations
            • Implementation-environments
            • Abstract-syntax
            • Concrete-syntax
            • Disambiguation
            • Validation
            • Gcc-builtins
            • Preprocessing
              • Preprocessor
                • Pproc
                  • Pproc-directive
                  • Pproc-group-part
                  • Pproc-file
                  • Pproc-include-directive
                    • Pproc-text-line
                    • Pproc-*-group-part
                  • Preprocessor-states
                  • Preprocessor-printer
                  • Pproc-directive
                  • Pread-token
                  • Pproc-files
                  • Pread-token/newline
                  • Pproc-group-part
                  • Preprocessor-lexer
                  • Pproc-file
                  • Pproc-include-directive
                    • Pproc-text-line
                    • Pproc-*-group-part
                    • Punread-token
                    • *pproc-files-max*
                    • String-plexeme-list-alist-to-filepath-filedata-map
                    • String-plexeme-list-alist
                    • Read-input-file-to-preproc
                    • Preprocessor-reader
                    • Preprocessor-messages
                  • External-preprocessing
                • Parsing
              • Atc
              • Transformation-tools
              • Language
              • Representation
              • Insertion-sort
              • Pack
            • Soft
            • Bv
            • Imp-language
            • Ethereum
            • Event-macros
            • Java
            • Riscv
            • Bitcoin
            • Zcash
            • Yul
            • ACL2-programming-language
            • Prime-fields
            • Json
            • Syntheto
            • File-io-light
            • Cryptography
            • Number-theory
            • Axe
            • Lists-light
            • Builtins
            • Solidity
            • Helpers
            • Htclient
            • Typed-lists-light
            • Arithmetic-light
          • X86isa
          • Axe
          • Execloader
        • Math
        • Testing-utilities
      • Preprocessor
      • Pproc

      Pproc-include-directive

      Preprocess a #include directive.

      Signature
      (pproc-include-directive path file preprocessed 
                               preprocessing rev-lexemes ppstate state) 
       
        → 
      (mv erp new-rev-lexemes new-ppstate new-preprocessed state)
      Arguments
      path — Guard (stringp path).
      file — Guard (stringp file).
      preprocessed — Guard (string-plexeme-list-alistp preprocessed).
      preprocessing — Guard (string-listp preprocessing).
      rev-lexemes — Guard (plexeme-listp rev-lexemes).
      ppstate — Guard (ppstatep ppstate).
      Returns
      new-rev-lexemes — Type (plexeme-listp new-rev-lexemes).
      new-ppstate — Type (ppstatep new-ppstate), given (ppstatep ppstate).
      new-preprocessed — Type (string-plexeme-list-alistp new-preprocessed).

      This is called just after the include identifier has been parsed.

      If we do not find a token or new line, it is an error, because there is no header name.

      If we find a new line, it is an error, because there is no header name.

      If we find a header name, we find the file referenced by it and we recursively preprocess it. Note that we pass t as the headerp flag.

      If we find any other token, for now we return an error, but we should preprocess that token and any subsequent tokens, and see if they result in a header name.