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
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func def() -> any P4Value {
|
||||||
|
return P4StructValue(withType: self)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// An instance of a P4 struct
|
/// An instance of a P4 struct
|
||||||
@@ -231,6 +235,9 @@ public struct P4Boolean: P4Type {
|
|||||||
default: false
|
default: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public func def() -> any P4Value {
|
||||||
|
return P4BooleanValue(withValue: false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// An instance of a P4 boolean
|
/// An instance of a P4 boolean
|
||||||
@@ -269,6 +276,9 @@ public struct P4Int: P4Type {
|
|||||||
default: false
|
default: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public func def() -> any P4Value {
|
||||||
|
return P4IntValue(withValue: 0)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// An instance of a P4 integer
|
/// An instance of a P4 integer
|
||||||
@@ -309,6 +319,9 @@ public struct P4String: P4Type {
|
|||||||
default: false
|
default: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public func def() -> any P4Value {
|
||||||
|
return P4StringValue(withValue: "")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/// An instance of a P4 string
|
/// An instance of a P4 string
|
||||||
public class P4StringValue: P4Value {
|
public class P4StringValue: P4Value {
|
||||||
@@ -358,6 +371,10 @@ public struct P4Array: P4Type {
|
|||||||
default: false
|
default: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func def() -> P4Value {
|
||||||
|
return P4ArrayValue(withType: self, withValue: [])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// An instance of a P4 array
|
/// An instance of a P4 array
|
||||||
|
|||||||
@@ -34,14 +34,21 @@ public protocol EvaluatableStatement {
|
|||||||
|
|
||||||
public protocol P4Type: CustomStringConvertible {
|
public protocol P4Type: CustomStringConvertible {
|
||||||
func eq(rhs: any P4Type) -> Bool
|
func eq(rhs: any P4Type) -> Bool
|
||||||
|
func def() -> P4Value
|
||||||
}
|
}
|
||||||
|
|
||||||
public protocol P4Value: CustomStringConvertible {
|
public protocol P4Value: EvaluatableExpression, CustomStringConvertible {
|
||||||
func type() -> any P4Type
|
func type() -> any P4Type
|
||||||
func eq(rhs: P4Value) -> Bool
|
func eq(rhs: P4Value) -> Bool
|
||||||
}
|
}
|
||||||
|
|
||||||
public protocol EvaluatableLValueExpression: EvaluatableExpression {
|
public extension P4Value {
|
||||||
func set(to: P4Value, inScopes scopes: ValueScopes, duringExecution execution: ProgramExecution) -> Result<(ValueScopes, P4Value)>
|
func evaluate(execution: ProgramExecution) -> Result<P4Value> {
|
||||||
func check(to: EvaluatableExpression, inScopes scopes: TypeScopes) -> Result<()>
|
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<()>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -83,6 +83,10 @@ public class ParserState: P4Type, P4Value, Equatable, CustomStringConvertible {
|
|||||||
state = name
|
state = name
|
||||||
statements = Array()
|
statements = Array()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func def() -> any P4Value {
|
||||||
|
return ParserState(name: Identifier(name: ""))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ParserStateDirectTransition: ParserState {
|
public class ParserStateDirectTransition: ParserState {
|
||||||
@@ -211,4 +215,8 @@ public struct Parser: P4Type, P4Value {
|
|||||||
public var description: String {
|
public var description: String {
|
||||||
return "Parser"
|
return "Parser"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func def() -> any P4Value {
|
||||||
|
return Parser(withName: Identifier(name: ""))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user