• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Community
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
      • Gl
      • Esim
      • Vl2014
        • Warnings
        • Primitives
        • Use-set
        • Syntax
        • Getting-started
        • Utilities
        • Loader
        • Transforms
          • Expression-sizing
          • Occform
          • Oprewrite
          • Expand-functions
          • Delayredux
          • Unparameterization
          • Caseelim
          • Split
          • Selresolve
          • Weirdint-elim
          • Vl-delta
          • Replicate-insts
          • Rangeresolve
          • Propagate
          • Clean-selects
          • Clean-params
          • Blankargs
          • Inline-mods
          • Expr-simp
          • Trunc
          • Always-top
          • Gatesplit
          • Gate-elim
          • Expression-optimization
          • Elim-supplies
          • Wildelim
          • Drop-blankports
          • Clean-warnings
          • Addinstnames
          • Custom-transform-hooks
          • Annotate
            • Make-implicit-wires
              • Vl-modulelist-make-implicit-wires
              • Vl-make-implicit-wires-aux
              • Shadowcheck
                • Vl-shadowcheck-reference-name
                  • Vl-shadowcheck-aux
                  • Vl-shadowcheck-reference-names
                  • Vl-shadowcheck-declare-names
                  • Vl-shadowcheck-declare-name
                  • Vl-shadowcheck-fundecl
                  • Vl-shadowcheck-declare-typedefs
                  • Vl-shadowcheck-blockitemlist
                  • Vl-shadowcheck-taskdecl
                  • Vl-shadowcheck-portdecllist
                  • Vl-shadowcheck-paramdecls
                  • Vl-shadowcheck-taskdecls
                  • Vl-shadowcheck-paramdecl
                  • Vl-shadowcheck-gateinst
                  • Vl-shadowcheck-vardecls
                  • Vl-shadowcheck-vardecl
                  • Vl-shadowcheck-portdecl
                  • Vl-shadowcheck-modinst
                  • Vl-shadowcheck-imports
                  • Vl-shadowcheck-import
                  • Vl-shadowcheck-fundecls
                  • Vl-shadowcheck-blockitem
                  • Vl-shadowcheck-ports
                  • Vl-shadowcheck-port
                  • Vl-shadowcheck-initial
                  • Vl-shadowcheck-assign
                  • Vl-shadowcheck-always
                  • Vl-shadowcheck-alias
                  • Vl-shadowcheck-state
                  • Vl-shadowcheck-module
                  • Vl-shadowcheck-modules
                  • Vl-shadowcheck-push-scope
                  • Vl-lexscopes
                  • Vl-shadowcheck-design
                  • Vl-shadowcheck-pop-scope
                  • Vl-lexscope
                • Vl-stmt-check-undeclared
                • Vl-make-implicit-wires-main
                • Vl-fundecl-check-undeclared
                • Vl-warn-about-undeclared-wires
                • Vl-implicitst
                • Vl-blockitem-check-undeclared
                • Vl-taskdecl-check-undeclared
                • Vl-modinst-exprs-for-implicit-wires
                • Vl-blockitemlist-check-undeclared
                • Vl-import-check-undeclared
                • Vl-make-ordinary-implicit-wires
                • Vl-gateinst-exprs-for-implicit-wires
                • Vl-remove-declared-wires
                • Vl-make-port-implicit-wires
                • Vl-module-make-implicit-wires
                • Vl-vardecl-exprs-for-implicit-wires
                • Vl-design-make-implicit-wires
              • Resolve-indexing
              • Origexprs
              • Argresolve
              • Portdecl-sign
              • Designwires
              • Udp-elim
              • Vl-annotate-design
            • Latchcode
            • Elim-unused-vars
            • Problem-modules
          • Lint
          • Mlib
          • Server
          • Kit
          • Printer
          • Esim-vl
          • Well-formedness
        • Sv
        • Fgl
        • Vwsim
        • Vl
        • X86isa
        • Svl
        • Rtl
      • Software-verification
      • Math
      • Testing-utilities
    • Shadowcheck

    Vl-shadowcheck-reference-name

    Signature
    (vl-shadowcheck-reference-name name ctx st warnings) 
      → 
    (mv st warnings)
    Arguments
    name — Guard (stringp name).
    ctx — Guard (acl2::any-p ctx).
    st — Guard (vl-shadowcheck-state-p st).
    warnings — Guard (vl-warninglist-p warnings).
    Returns
    st — Type (vl-shadowcheck-state-p st).
    warnings — Type (vl-warninglist-p warnings).

    Definitions and Theorems

    Function: vl-shadowcheck-reference-name

    (defun vl-shadowcheck-reference-name (name ctx st warnings)
     (declare (xargs :guard (and (stringp name)
                                 (acl2::any-p ctx)
                                 (vl-shadowcheck-state-p st)
                                 (vl-warninglist-p warnings))))
     (let ((__function__ 'vl-shadowcheck-reference-name))
      (declare (ignorable __function__))
      (b*
       ((name (string-fix name))
        ((vl-shadowcheck-state st)
         (vl-shadowcheck-state-fix st))
        (- (vl-shadowcheck-debug
                "    vl-shadowcheck-reference-name: ~s0 for ~a1.~%"
                name ctx))
        ((mv entry tail)
         (vl-lexscopes-find name st.lexscopes))
        ((unless entry)
         (mv
            st
            (fatal :type :vl-undeclared-identifier
                   :msg "~a0: reference to undeclared identifier ~s1.~%"
                   :args (list ctx name))))
        ((vl-lexscope-entry entry))
        ((when (and (not entry.decl)
                    (not entry.direct-pkg)
                    (>= (len entry.wildpkgs) 2)))
         (mv
          st
          (fatal
           :type :vl-illegal-import
           :msg
           "~a0: the name ~s1 is imported by multiple wildcard ~
                             imports: ~&2."
           :args (list ctx name entry.wildpkgs))))
        ((mv item scopestack-at-import pkg-name)
         (vl-scopestack-find-item/context name st.ss))
        ((unless (or item pkg-name))
         (mv
          st
          (fatal
           :type :vl-programming-error
           :msg
           "~a0: scopestack can't resolve ~s1 but it is found ~
                             in the lexical scope, so how could that happen? ~x2."
           :args (list ctx name entry))))
        (ss-level (vl-scopestack-nesting-level scopestack-at-import))
        (lex-level (len tail))
        ((unless (equal ss-level lex-level))
         (mv
          st
          (fatal
           :type :vl-tricky-scope
           :msg
           "~a0: the name ~s1 has complex scoping that we do not ~
                             support.  Lexical level ~x2, scopestack level ~x3."
           :args (list ctx name lex-level ss-level))))
        ((unless pkg-name)
         (b*
          (((unless entry.decl)
            (mv
             st
             (fatal
              :type :vl-tricky-scope
              :msg
              "~a0: the name ~s1 has complex scoping that ~
                                      we do not support.  Lexically it appears to ~
                                      be imported from a package, but there is a ~
                                      subsequent declaration (~a2) which makes ~
                                      scoping confusing."
              :args (list ctx name item)))))
          (mv st (ok))))
        ((when entry.decl)
         (mv
          st
          (fatal
           :type :vl-programming-error
           :msg
           "~a0: scopestack thinks ~s1 is imported from ~s2 ~
                                but lexically it seems to be locally declared, ~
                                ~a3."
           :args (list ctx name pkg-name entry.decl))))
        ((when entry.direct-pkg)
         (b*
          (((unless (equal entry.direct-pkg pkg-name))
            (mv
             st
             (fatal
              :type :vl-import-conflict
              :msg
              "~a0: scopestack thinks ~s1 is imported from ~
                                      ~s2, but lexically it is directly imported from ~s3."
              :args (list ctx name pkg-name entry.direct-pkg)))))
          (mv st (ok))))
        ((unless (consp entry.wildpkgs))
         (mv
          st
          (fatal
           :type :vl-programming-error
           :msg
           "~a0: name ~s1 has a lexscope entry with no local ~
                                declaration, direct package, or wild packages.  ~
                                How did this happen?"
           :args (list ctx name))))
        (lex-pkg (and (mbt (equal (len entry.wildpkgs) 1))
                      (first entry.wildpkgs)))
        ((unless (equal lex-pkg pkg-name))
         (mv
          st
          (fatal
           :type :vl-import-conflict
           :msg
           "~a0: scopestack thinks ~s1 is imported from ~s2, ~
                                but lexically it is wildly imported from ~s3."
           :args (list ctx name pkg-name lex-pkg)))))
       (mv st (ok)))))

    Theorem: vl-shadowcheck-state-p-of-vl-shadowcheck-reference-name.st

    (defthm vl-shadowcheck-state-p-of-vl-shadowcheck-reference-name.st
      (b* (((mv ?st ?warnings)
            (vl-shadowcheck-reference-name name ctx st warnings)))
        (vl-shadowcheck-state-p st))
      :rule-classes :rewrite)

    Theorem: vl-warninglist-p-of-vl-shadowcheck-reference-name.warnings

    (defthm vl-warninglist-p-of-vl-shadowcheck-reference-name.warnings
      (b* (((mv ?st ?warnings)
            (vl-shadowcheck-reference-name name ctx st warnings)))
        (vl-warninglist-p warnings))
      :rule-classes :rewrite)

    Theorem: vl-shadowcheck-reference-name-of-str-fix-name

    (defthm vl-shadowcheck-reference-name-of-str-fix-name
      (equal (vl-shadowcheck-reference-name (str-fix name)
                                            ctx st warnings)
             (vl-shadowcheck-reference-name name ctx st warnings)))

    Theorem: vl-shadowcheck-reference-name-streqv-congruence-on-name

    (defthm vl-shadowcheck-reference-name-streqv-congruence-on-name
     (implies
       (streqv name name-equiv)
       (equal
            (vl-shadowcheck-reference-name name ctx st warnings)
            (vl-shadowcheck-reference-name name-equiv ctx st warnings)))
     :rule-classes :congruence)

    Theorem: vl-shadowcheck-reference-name-of-identity-ctx

    (defthm vl-shadowcheck-reference-name-of-identity-ctx
      (equal (vl-shadowcheck-reference-name name (identity ctx)
                                            st warnings)
             (vl-shadowcheck-reference-name name ctx st warnings)))

    Theorem: vl-shadowcheck-reference-name-equal-congruence-on-ctx

    (defthm vl-shadowcheck-reference-name-equal-congruence-on-ctx
     (implies
       (equal ctx ctx-equiv)
       (equal
            (vl-shadowcheck-reference-name name ctx st warnings)
            (vl-shadowcheck-reference-name name ctx-equiv st warnings)))
     :rule-classes :congruence)

    Theorem: vl-shadowcheck-reference-name-of-vl-shadowcheck-state-fix-st

    (defthm vl-shadowcheck-reference-name-of-vl-shadowcheck-state-fix-st
      (equal (vl-shadowcheck-reference-name
                  name ctx (vl-shadowcheck-state-fix st)
                  warnings)
             (vl-shadowcheck-reference-name name ctx st warnings)))

    Theorem: vl-shadowcheck-reference-name-vl-shadowcheck-state-equiv-congruence-on-st

    (defthm
     vl-shadowcheck-reference-name-vl-shadowcheck-state-equiv-congruence-on-st
     (implies
       (vl-shadowcheck-state-equiv st st-equiv)
       (equal
            (vl-shadowcheck-reference-name name ctx st warnings)
            (vl-shadowcheck-reference-name name ctx st-equiv warnings)))
     :rule-classes :congruence)

    Theorem: vl-shadowcheck-reference-name-of-vl-warninglist-fix-warnings

    (defthm vl-shadowcheck-reference-name-of-vl-warninglist-fix-warnings
      (equal (vl-shadowcheck-reference-name
                  name
                  ctx st (vl-warninglist-fix warnings))
             (vl-shadowcheck-reference-name name ctx st warnings)))

    Theorem: vl-shadowcheck-reference-name-vl-warninglist-equiv-congruence-on-warnings

    (defthm
     vl-shadowcheck-reference-name-vl-warninglist-equiv-congruence-on-warnings
     (implies
       (vl-warninglist-equiv warnings warnings-equiv)
       (equal
            (vl-shadowcheck-reference-name name ctx st warnings)
            (vl-shadowcheck-reference-name name ctx st warnings-equiv)))
     :rule-classes :congruence)