From e7afa82468587e96978d452c2c000941aa6111fb Mon Sep 17 00:00:00 2001 From: Jaehyun Lee <99jaehyunlee@gmail.com> Date: Mon, 4 Nov 2024 23:58:46 +0900 Subject: [PATCH 1/2] Compile-time known-ness of field and index accesses Signed-off-by: Jaehyun Lee <99jaehyunlee@gmail.com> --- p4-16/spec/P4-16-spec.mdk | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/p4-16/spec/P4-16-spec.mdk b/p4-16/spec/P4-16-spec.mdk index fb28c1e6ce..adbd9f7359 100644 --- a/p4-16/spec/P4-16-spec.mdk +++ b/p4-16/spec/P4-16-spec.mdk @@ -7751,6 +7751,8 @@ The following are local compile-time known values: - Structure-valued expressions, where all fields are local compile-time known values. - Expressions evaluating to a list type, where all elements are local compile-time known values. - Legal casts applied to local compile-time known values. +- Indexing a local compile-time known tuple value with a local compile-time known index. +- Accessing a field of a local compile-time known struct, header, or header union value. - The following expressions (`+`, `-`, `|+|`, `|-|`, `*`, `/ `, `%`, `!`, `&`, `|`, `^`, `&&`, `||`, `<< `, `>>`, `~`, `/`, `>`, `<`, `==`, `!=`, `<=`, `>=`, `++`, `[:]`, `?:`) when their operands are all local compile-time known values. - Expressions of the form `e.minSizeInBits()`, `e.minSizeInBytes()`, `e.maxSizeInBits()` and `e.maxSizeInBytes()` where the type of `e` is not generic. @@ -7763,6 +7765,8 @@ The following are compile-time known values: - Structure-valued expressions, where all fields are compile-time known values. - Expressions evaluating to a list type, where all elements are compile-time known values. - Legal casts applied to compile-time known values. +- Indexing a compile-time known tuple value with a compile-time known index. +- Accessing a field of a compile-time known struct, header, or header union value. - The following expressions (`+`, `-`, `|+|`, `|-|`, `*`, `/ `, `%`, `cast`, `!`, `&`, `|`, `^`, `&&`, `||`, `<< `, `>> `, `~`, `/`, `>`, `<`, `==`, `!=`, `<=`, `>=`, `++`, `[:]`, `?:`) when their operands are all compile-time known values. - Expressions of the form `e.minSizeInBits()`, `e.minSizeInBytes()`, `e.maxSizeInBits()` and `e.maxSizeInBytes()` where the the type of `e` is generic. From cab88f708641a4540dfc95b54228a74021418d5f Mon Sep 17 00:00:00 2001 From: Jaehyun Lee <99jaehyunlee@gmail.com> Date: Tue, 5 Nov 2024 00:09:43 +0900 Subject: [PATCH 2/2] Stacks can be indexed as well Signed-off-by: Jaehyun Lee <99jaehyunlee@gmail.com> --- p4-16/spec/P4-16-spec.mdk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/p4-16/spec/P4-16-spec.mdk b/p4-16/spec/P4-16-spec.mdk index adbd9f7359..6429081123 100644 --- a/p4-16/spec/P4-16-spec.mdk +++ b/p4-16/spec/P4-16-spec.mdk @@ -7751,7 +7751,7 @@ The following are local compile-time known values: - Structure-valued expressions, where all fields are local compile-time known values. - Expressions evaluating to a list type, where all elements are local compile-time known values. - Legal casts applied to local compile-time known values. -- Indexing a local compile-time known tuple value with a local compile-time known index. +- Indexing a local compile-time known stack or tuple value with a local compile-time known index. - Accessing a field of a local compile-time known struct, header, or header union value. - The following expressions (`+`, `-`, `|+|`, `|-|`, `*`, `/ `, `%`, `!`, `&`, `|`, `^`, `&&`, `||`, `<< `, `>>`, `~`, `/`, `>`, `<`, `==`, `!=`, `<=`, `>=`, `++`, `[:]`, `?:`) when their operands are all local compile-time known values. - Expressions of the form `e.minSizeInBits()`, `e.minSizeInBytes()`, `e.maxSizeInBits()` and `e.maxSizeInBytes()` where the type of `e` is not generic. @@ -7765,7 +7765,7 @@ The following are compile-time known values: - Structure-valued expressions, where all fields are compile-time known values. - Expressions evaluating to a list type, where all elements are compile-time known values. - Legal casts applied to compile-time known values. -- Indexing a compile-time known tuple value with a compile-time known index. +- Indexing a compile-time known stack or tuple value with a compile-time known index. - Accessing a field of a compile-time known struct, header, or header union value. - The following expressions (`+`, `-`, `|+|`, `|-|`, `*`, `/ `, `%`, `cast`, `!`, `&`, `|`, `^`, `&&`, `||`, `<< `, `>> `, `~`, `/`, `>`, `<`, `==`, `!=`, `<=`, `>=`, `++`, `[:]`, `?:`) when their operands are all compile-time known values. - Expressions of the form `e.minSizeInBits()`, `e.minSizeInBytes()`, `e.maxSizeInBits()` and `e.maxSizeInBytes()` where the the type of `e` is generic.