• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Community
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
    • Software-verification
      • Kestrel-books
        • Crypto-hdwallet
        • Apt
        • Error-checking
        • Fty-extensions
        • Isar
        • Kestrel-utilities
        • Set
        • Soft
        • C
        • Bv
        • Imp-language
        • Event-macros
        • Java
          • Atj
            • Atj-implementation
              • Atj-types
              • Atj-java-primitive-array-model
              • Atj-java-abstract-syntax
              • Atj-input-processing
              • Atj-java-pretty-printer
                • Jexpr-rank
                • Print-jexprs
                • Print-jchar
                • Print-jstatems+jblocks
                  • Print-jstatem
                  • Print-jblock
                • Print-jclasses+jcmembers
                • Jbinop-expected-ranks
                • Jexpr->rank
                • Jexpr-rank-<=
                • Print-jexpr
                • Print-optional-integer-type-suffix
                • Print-octdig/uscore-list
                • Print-oct-integer-literal
                • Print-jcunit
                • Print-hexdig/uscore-list
                • Print-hex-integer-literal
                • Print-decdig/uscore-list
                • Print-dec-integer-literal
                • Print-bindig/uscore-list
                • Print-bin-integer-literal
                • Print-integer-literal
                • Print-octdig/uscore
                • Print-jmethod
                • Print-jfield
                • Print-hexdig/uscore
                • Print-decdig/uscore
                • Print-bindig/uscore
                • Print-jclass-list
                • Print-jlocvar
                • Print-jliteral
                • Print-jcinitializer
                • Print-jline
                • Print-jimports
                • Print-jchars
                • Print-comma-sep
                • Print-jimport
                • Print-jbinop
                • Print-primitive-type
                • Print-jparam-list
                • Print-jlines-to-channel
                • Jexpr-rank-index
                • Atj-indent
                • Print-to-jfile
                • Print-jparam
                • Print-jaccess
                • Print-oct-digit
                • Print-junop
                • Print-jtype
                • Print-jresult
                • Print-hex-digit
                • Print-dec-digit
                • Print-bin-digit
                • Print-jline-blank
              • Atj-code-generation
              • Atj-java-primitives
              • Atj-java-primitive-arrays
              • Atj-type-macros
              • Atj-java-syntax-operations
              • Atj-fn
              • Atj-library-extensions
              • Atj-java-input-types
              • Atj-test-structures
              • Aij-notions
              • Atj-macro-definition
            • Atj-tutorial
          • Aij
          • Language
        • Bitcoin
        • Ethereum
        • Yul
        • Zcash
        • ACL2-programming-language
        • Prime-fields
        • Json
        • Syntheto
        • File-io-light
        • Cryptography
        • Number-theory
        • Lists-light
        • Axe
        • Builtins
        • Solidity
        • Helpers
        • Htclient
        • Typed-lists-light
        • Arithmetic-light
      • X86isa
      • Axe
      • Execloader
    • Math
    • Testing-utilities
  • Atj-java-pretty-printer

Print-jstatems+jblocks

Pretty-print a statement or block.

Note that we print the statements that form a block one after the other, without surrounding them with curly braces. We do print curly braces when printing method declarations and if statements, producing valid Java concrete syntax, but our current treatment of blocks is somewhat ``improper'', because syntactically blocks include curly braces. This impropriety should be remedied in future versions of this pretty-printer.

Definitions and Theorems

Function: print-jstatem

(defun print-jstatem (statem indent-level)
 (declare (xargs :guard (and (jstatemp statem)
                             (natp indent-level))))
 (let ((__function__ 'print-jstatem))
  (declare (ignorable __function__))
  (jstatem-case
   statem
   :locvar (list (print-jlocvar statem.get indent-level))
   :expr
   (list (print-jline
              (msg "~@0;"
                   (print-jexpr statem.get (jexpr-rank-expression)))
              indent-level))
   :return
   (list
     (if statem.expr?
       (print-jline
            (msg "return ~@0;"
                 (print-jexpr statem.expr? (jexpr-rank-expression)))
            indent-level)
       (print-jline "return;" indent-level)))
   :throw
   (list
        (print-jline
             (msg "throw ~@0;"
                  (print-jexpr statem.expr (jexpr-rank-expression)))
             indent-level))
   :break (list (print-jline "break;" indent-level))
   :continue (list (print-jline "continue;" indent-level))
   :if
   (append
    (list
        (print-jline
             (msg "if (~@0) {"
                  (print-jexpr statem.test (jexpr-rank-expression)))
             indent-level))
    (print-jblock statem.then (1+ indent-level))
    (list (print-jline "}" indent-level)))
   :ifelse
   (append
    (list
        (print-jline
             (msg "if (~@0) {"
                  (print-jexpr statem.test (jexpr-rank-expression)))
             indent-level))
    (print-jblock statem.then (1+ indent-level))
    (list (print-jline "} else {" indent-level))
    (print-jblock statem.else (1+ indent-level))
    (list (print-jline "}" indent-level)))
   :while
   (append
    (list
        (print-jline
             (msg "while (~@0) {"
                  (print-jexpr statem.test (jexpr-rank-expression)))
             indent-level))
    (print-jblock statem.body (1+ indent-level))
    (list (print-jline "}" indent-level)))
   :do
   (append
    (list (print-jline "do {" indent-level))
    (print-jblock statem.body (1+ indent-level))
    (list
        (print-jline
             (msg "} while (~@0);"
                  (print-jexpr statem.test (jexpr-rank-expression)))
             indent-level)))
   :for
   (append
    (list
      (print-jline
           (msg "for (~@0; ~@1; ~@2) {"
                (print-jexpr statem.init (jexpr-rank-expression))
                (print-jexpr statem.test (jexpr-rank-expression))
                (print-jexpr statem.update (jexpr-rank-expression)))
           indent-level))
    (print-jblock statem.body (1+ indent-level))
    (list (print-jline "}" indent-level))))))

Function: print-jblock

(defun print-jblock (block indent-level)
  (declare (xargs :guard (and (jblockp block)
                              (natp indent-level))))
  (let ((__function__ 'print-jblock))
    (declare (ignorable __function__))
    (cond ((endp block) nil)
          (t (append (print-jstatem (car block) indent-level)
                     (print-jblock (cdr block)
                                   indent-level))))))

Theorem: return-type-of-print-jstatem.lines

(defthm return-type-of-print-jstatem.lines
  (b* ((?lines (print-jstatem statem indent-level)))
    (msg-listp lines))
  :rule-classes :rewrite)

Theorem: return-type-of-print-jblock.lines

(defthm return-type-of-print-jblock.lines
  (b* ((?lines (print-jblock block indent-level)))
    (msg-listp lines))
  :rule-classes :rewrite)

Subtopics

Print-jstatem
Print-jblock