Add Defaults For All Types
Signed-off-by: Will Hawkins <hawkinsw@obs.cr>
This commit is contained in:
@@ -158,6 +158,10 @@ public struct P4Struct: P4Type {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
public func def() -> any P4Value {
|
||||
return P4StructValue(withType: self)
|
||||
}
|
||||
}
|
||||
|
||||
/// An instance of a P4 struct
|
||||
@@ -231,6 +235,9 @@ public struct P4Boolean: P4Type {
|
||||
default: false
|
||||
}
|
||||
}
|
||||
public func def() -> any P4Value {
|
||||
return P4BooleanValue(withValue: false)
|
||||
}
|
||||
}
|
||||
|
||||
/// An instance of a P4 boolean
|
||||
@@ -269,6 +276,9 @@ public struct P4Int: P4Type {
|
||||
default: false
|
||||
}
|
||||
}
|
||||
public func def() -> any P4Value {
|
||||
return P4IntValue(withValue: 0)
|
||||
}
|
||||
}
|
||||
|
||||
/// An instance of a P4 integer
|
||||
@@ -309,6 +319,9 @@ public struct P4String: P4Type {
|
||||
default: false
|
||||
}
|
||||
}
|
||||
public func def() -> any P4Value {
|
||||
return P4StringValue(withValue: "")
|
||||
}
|
||||
}
|
||||
/// An instance of a P4 string
|
||||
public class P4StringValue: P4Value {
|
||||
@@ -358,6 +371,10 @@ public struct P4Array: P4Type {
|
||||
default: false
|
||||
}
|
||||
}
|
||||
|
||||
public func def() -> P4Value {
|
||||
return P4ArrayValue(withType: self, withValue: [])
|
||||
}
|
||||
}
|
||||
|
||||
/// An instance of a P4 array
|
||||
|
||||
@@ -34,14 +34,21 @@ public protocol EvaluatableStatement {
|
||||
|
||||
public protocol P4Type: CustomStringConvertible {
|
||||
func eq(rhs: any P4Type) -> Bool
|
||||
func def() -> P4Value
|
||||
}
|
||||
|
||||
public protocol P4Value: CustomStringConvertible {
|
||||
public protocol P4Value: EvaluatableExpression, CustomStringConvertible {
|
||||
func type() -> any P4Type
|
||||
func eq(rhs: P4Value) -> Bool
|
||||
}
|
||||
|
||||
public protocol EvaluatableLValueExpression: EvaluatableExpression {
|
||||
func set(to: P4Value, inScopes scopes: ValueScopes, duringExecution execution: ProgramExecution) -> Result<(ValueScopes, P4Value)>
|
||||
func check(to: EvaluatableExpression, inScopes scopes: TypeScopes) -> Result<()>
|
||||
public extension P4Value {
|
||||
func evaluate(execution: ProgramExecution) -> Result<P4Value> {
|
||||
return Result.Ok(self)
|
||||
}
|
||||
}
|
||||
|
||||
public protocol EvaluatableLValueExpression: EvaluatableExpression {
|
||||
func set(to: P4Value, inScopes scopes: VarValueScopes, duringExecution execution: ProgramExecution) -> Result<(VarValueScopes, P4Value)>
|
||||
func check(to: EvaluatableExpression, inScopes scopes: VarTypeScopes) -> Result<()>
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user