Skip to content

P4インタプリタ: top-levelの not(...) を_boolean評価すると常にfalse (if内は正常) #25

Description

@opaopa6969

症状

top-level の not(...) 式を _boolean 結果型で評価すると常に false を返す(P4-typed インタプリタ)。if(...) 文脈内の not(...) は正常。

not(false)        -> false  (正解 true)   [p4-typed]
not(true)         -> false  (正解 false)  ※偶然一致
not(not(true))    -> false  (正解 true)   [p4-typed]
not(1>2)          -> false  (正解 true)   [p4-typed]

if(not(false)){1}else{0}     -> 1  (正常)
if(not(true)){1}else{0}      -> 0  (正常)
if(not(not(true))){1}else{0} -> 1  (正常)

javacode バックエンドでは not(false) = true(正しい)。インタプリタのみ誤り。

推定原因

evalNotExpr (!toBoolean(eval(value))) と toBoolean 自体は正しい。standalone not(...) を root として評価する際、findBestMappedToken/preferred-root 選択が外側 NotExpr を選ばず内側オペランドを評価していると推定(not(not(true)) が内側 not(true)=false に化けるのと整合)。top-level Expression の型ディスパッチ(#23)と関連の可能性。

再現テスト

KnownP4BugsTest.standaloneNotReturnsFalse@ignore)に収録。GrammarCoverageInterpreterTestif(not(...)) 形式でカバレッジ維持。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions