diff --git a/Snippets/use-program-instanceswithtypes.swift b/Snippets/use-program-instanceswithtypes.swift
index ba88ba7..aa81c4c 100644
--- a/Snippets/use-program-instanceswithtypes.swift
+++ b/Snippets/use-program-instanceswithtypes.swift
@@ -39,8 +39,8 @@ let p4_program_with_control_decl = """
// snippet.include
-let flter = { (tipe: P4Type) -> Bool in
- switch tipe {
+let flter = { (tipe: P4TypeAttributed) -> Bool in
+ switch tipe.type {
case let c as Control: c.name == "simple"
default: false
}
diff --git a/Sources/Common/Compiler.swift b/Sources/Common/Compiler.swift
index 931bf16..5aca1e6 100644
--- a/Sources/Common/Compiler.swift
+++ b/Sources/Common/Compiler.swift
@@ -16,10 +16,10 @@
// along with this program. If not, see .
/// A scope that resolves variable identifiers to their types.
-public typealias VarTypeScope = Scope
+public typealias VarTypeScope = Scope
/// Scopes that resolve variable identifiers to their types.
-public typealias VarTypeScopes = Scopes
+public typealias VarTypeScopes = Scopes
/// A scope that resolves type identifiers to their types.
public typealias TypeTypeScope = Scope
diff --git a/Sources/Common/ProgramTypes.swift b/Sources/Common/ProgramTypes.swift
index 8beaa3e..3bcc55a 100644
--- a/Sources/Common/ProgramTypes.swift
+++ b/Sources/Common/ProgramTypes.swift
@@ -782,3 +782,76 @@ public class P4SetDefaultValue: P4Value {
"Default of P4Set of \(self.type()) type"
}
}
+
+public enum Direction: Equatable, CustomStringConvertible {
+ case In
+ case Out
+ case InOut
+
+ public var description: String {
+ return switch self {
+ case Direction.In: "In"
+ case Direction.Out: "Out"
+ case Direction.InOut: "InOut"
+ }
+ }
+
+ /// Compare two optional ``Direction``s
+ static public func eqopt(_ lhs: Direction?, _ rhs: Direction?) -> Bool {
+ // If both are empty, they are the same.
+ if lhs == .none && rhs == .none {
+ return true
+ }
+
+ // If one is empty, they are different
+ if lhs == .none || rhs == .none {
+ return false
+ }
+
+ // Both have values -- compare them natively.
+ return lhs! == rhs!
+ }
+}
+
+public enum P4TypeAttribute {
+ case Direction(Direction)
+ case Readonly // Not yet used -- here to keep Swift warnings at bay
+}
+
+public struct P4TypeAttributed {
+ let attributes: [P4TypeAttribute]
+ public let type: P4Type
+
+ public init(_ type: P4Type, _ attributes: [P4TypeAttribute]) {
+ self.attributes = attributes
+ self.type = type
+ }
+
+ public func direction() -> Direction? {
+ let result = attributes.firstIndex { attribute in
+ return switch attribute {
+ case .Direction(_): true
+ default: false
+ }
+ }
+ return result.flatMap { index in
+ return switch attributes[index] {
+ case .Direction(let d): d
+ default: Optional.none
+ }
+ }
+ }
+
+ public func readOnly() -> Bool {
+ return attributes.contains { attribute in
+ return switch attribute {
+ case .Readonly: true
+ default: false
+ }
+ }
+ }
+
+ public static func Attributeless(_ type: P4Type) -> P4TypeAttributed {
+ return P4TypeAttributed(type, [])
+ }
+}
diff --git a/Sources/P4Compiler/Common.swift b/Sources/P4Compiler/Common.swift
index 84cf5a9..b5cdc9e 100644
--- a/Sources/P4Compiler/Common.swift
+++ b/Sources/P4Compiler/Common.swift
@@ -120,6 +120,30 @@ extension ParameterList: Compilable {
}
}
+extension Direction: Compilable {
+ public typealias T = Direction
+ public static func Compile(
+ node: Node, withContext context: CompilerContext
+ ) -> Result<(Direction, CompilerContext)> {
+ let direction_node = node
+ #RequireNodeType(
+ node: direction_node, type: "direction", nice_type_name: "direction")
+ let directions = [
+ "in": Direction.In,
+ "out": Direction.Out,
+ "inout": Direction.InOut,
+ ]
+
+ guard let parsed_direction = directions[direction_node.text!] else {
+ return .Error(
+ ErrorOnNode(
+ node: direction_node, withError: "\(direction_node.text!) is not a valid direction"))
+ }
+
+ return .Ok((parsed_direction, context))
+ }
+}
+
extension Parameter: Compilable {
public typealias T = Parameter
public static func Compile(
@@ -148,15 +172,22 @@ extension Parameter: Compilable {
withError: "Annotations in parameter declarations are not yet handled"))
// Will increment indexes here.
}
+ currentChild = node.child(at: currentChildIdx)
+ var direction: Direction? = .none
// Direction?
if currentChild!.nodeType == "direction" {
- return .Error(
- ErrorOnNode(
- node: currentChild!, withError: "Direction in parameter declarations are not yet handled"
- ))
- // Will increment indexes here.
+
+ let maybe_parsed_direction = Direction.Compile(node: currentChild!, withContext: context)
+ guard case .Ok((let parsed_direction, _)) = maybe_parsed_direction else {
+ return .Error(maybe_parsed_direction.error()!)
+ }
+ direction = parsed_direction
+
+ currentChildIdx += 1
+ currentChildIdxSafe += 1
}
+ currentChild = node.child(at: currentChildIdx)
if currentChild!.nodeType != "typeRef" {
return Result.Error(
@@ -195,7 +226,7 @@ extension Parameter: Compilable {
return Result.Ok(
(
Parameter(
- identifier: parameter_name, withType: parameter_type),
+ identifier: parameter_name, withType: parameter_type, withDirection: direction),
context
))
}
diff --git a/Sources/P4Compiler/Declarations.swift b/Sources/P4Compiler/Declarations.swift
index 69cdf83..f501ca9 100644
--- a/Sources/P4Compiler/Declarations.swift
+++ b/Sources/P4Compiler/Declarations.swift
@@ -108,7 +108,8 @@ extension FunctionDeclaration: CompilableDeclaration {
// Add the parameters into scope.
var function_scope = context.instances.enter()
for parameter in function_parameters.parameters {
- function_scope = function_scope.declare(identifier: parameter.name, withValue: parameter.type)
+ function_scope = function_scope.declare(
+ identifier: parameter.name, withValue: parameter.attributedType())
}
let maybe_function_body = Parser.Statement.Compile(
@@ -331,7 +332,7 @@ extension P4Lang.Parser: CompilableDeclaration {
for parameter in parameter_list.parameters {
current_context = current_context.update(
newInstances: current_context.instances.declare(
- identifier: parameter.name, withValue: parameter.type))
+ identifier: parameter.name, withValue: parameter.attributedType()))
}
currentChildIdx += 1
@@ -374,7 +375,7 @@ extension P4Lang.Parser: CompilableDeclaration {
parser,
context.update(
newInstances: updated_context.instances.declare(
- identifier: parser.name, withValue: parser))
+ identifier: parser.name, withValue: P4TypeAttributed(parser, [])))
))
case Result.Error(let error): return .Error(error)
}
@@ -436,7 +437,8 @@ extension Control: CompilableDeclaration {
// Before continuing, make sure to put the parameters into context.
var control_scope = local_context.instances.enter()
for parameter in control_parameters.parameters {
- control_scope = control_scope.declare(identifier: parameter.name, withValue: parameter.type)
+ control_scope = control_scope.declare(
+ identifier: parameter.name, withValue: parameter.attributedType())
}
local_context = local_context.update(newInstances: control_scope)
@@ -505,7 +507,7 @@ extension Control: CompilableDeclaration {
declared_control,
context.update(
newInstances: context.instances.declare(
- identifier: control_name, withValue: declared_control))
+ identifier: control_name, withValue: P4TypeAttributed(declared_control, [])))
))
}
}
@@ -566,7 +568,8 @@ extension Action: Compilable {
// Add the parameters into scope.
var function_scope = context.instances.enter()
for parameter in action_parameters.parameters {
- function_scope = function_scope.declare(identifier: parameter.name, withValue: parameter.type)
+ function_scope = function_scope.declare(
+ identifier: parameter.name, withValue: parameter.attributedType())
}
let maybe_action_body = Parser.Statement.Compile(
diff --git a/Sources/P4Compiler/Expression.swift b/Sources/P4Compiler/Expression.swift
index eae1715..e8d59fc 100644
--- a/Sources/P4Compiler/Expression.swift
+++ b/Sources/P4Compiler/Expression.swift
@@ -43,13 +43,13 @@ extension TypedIdentifier: CompilableExpression {
node: node, type: "identifier")
guard
- case Result.Ok(let type) = context.instances.lookup(
+ case Result.Ok(let attributed_type) = context.instances.lookup(
identifier: Common.Identifier(name: node.text!))
else {
return .Error(ErrorOnNode(node: node, withError: "Cannot find \(node.text!) in scope"))
}
- return .Ok(TypedIdentifier(name: node.text!, withType: type))
+ return .Ok(TypedIdentifier(name: node.text!, withType: attributed_type.type))
}
}
diff --git a/Sources/P4Compiler/Statement.swift b/Sources/P4Compiler/Statement.swift
index 1e749b0..df7bfc3 100644
--- a/Sources/P4Compiler/Statement.swift
+++ b/Sources/P4Compiler/Statement.swift
@@ -231,7 +231,7 @@ extension VariableDeclarationStatement: CompilableStatement {
// Context with updated names to include the newly declared name.
context.update(
newInstances: context.instances.declare(
- identifier: parsed_variablename, withValue: declaration_p4_type))
+ identifier: parsed_variablename, withValue: P4TypeAttributed(declaration_p4_type, [])))
))
}
}
diff --git a/Sources/P4Lang/Common.swift b/Sources/P4Lang/Common.swift
index d54643c..a3b8d7e 100644
--- a/Sources/P4Lang/Common.swift
+++ b/Sources/P4Lang/Common.swift
@@ -19,21 +19,35 @@ import Common
public struct Parameter: CustomStringConvertible, Equatable {
public static func == (lhs: Parameter, rhs: Parameter) -> Bool {
- return lhs.name == rhs.name && lhs.type.eq(rhs: rhs.type)
+ return lhs.name == rhs.name && lhs.type.eq(rhs: rhs.type) && lhs.direction == rhs.direction
}
public var name: Identifier
public var type: P4Type
+ public var direction: Direction?
public init(
- identifier: Identifier, withType type: P4Type
+ identifier: Identifier, withType type: P4Type, withDirection direction: Direction? = .none
) {
self.name = identifier
self.type = type
+ self.direction = direction
}
public var description: String {
- return "Parameter: \(self.name) with type \(self.type)"
+ let direction = self.direction != .none ? self.direction!.description : "no"
+ return "Parameter: \(self.name) with type \(self.type) with \(direction) direction"
+ }
+
+ /// Calculate whether the `argument` is compatible with this parameter.
+ public func compatible(_ argument: Argument) -> Bool {
+ let arg_type = argument.argument.type()
+ return arg_type.eq(rhs: self.type)
+ }
+
+ public func attributedType() -> P4TypeAttributed {
+ return P4TypeAttributed(
+ self.type, self.direction == .none ? [] : [P4TypeAttribute.Direction(self.direction!)])
}
}
@@ -89,7 +103,7 @@ public struct ArgumentList {
for (arg, param) in zip(self.arguments, parameters.parameters) {
let arg_index = arg.index
let arg_type = arg.argument.type()
- if !arg_type.eq(rhs: param.type) {
+ if !param.compatible(arg) {
return .Error(
Error(
withMessage:
diff --git a/Sources/P4Lang/Program.swift b/Sources/P4Lang/Program.swift
index a1e5dfd..9986757 100644
--- a/Sources/P4Lang/Program.swift
+++ b/Sources/P4Lang/Program.swift
@@ -23,13 +23,15 @@ public struct ExpressionStatement {
public struct Program {
public var types: [P4Type] = Array()
- public var instances: [P4Type] = Array()
+ public var instances: [P4TypeAttributed] = Array()
- /// Type of closure for filtering results from ``Program/InstancesWithTypes(_:)`` and ``Program/TypesWithTypes(_:)``
+ /// Type of closure for filtering results from ``Program/InstancesWithTypes(_:)``
+ public typealias AttributedTypeFilter = (P4TypeAttributed) -> Bool
+ /// Type of closure for filtering results from ``Program/TypesWithTypes(_:)``
public typealias TypeFilter = (P4Type) -> Bool
/// Retrieve global instances in the compiled P4 program.
- public func InstancesWithTypes() -> [P4Type] {
+ public func InstancesWithTypes() -> [P4TypeAttributed] {
return self.instances
}
@@ -45,7 +47,7 @@ public struct Program {
///
/// @Snippet(path: "use-program-instanceswithtypes", slice: "include")
///
- public func InstancesWithTypes(_ filter: TypeFilter) -> [P4Type] {
+ public func InstancesWithTypes(_ filter: AttributedTypeFilter) -> [P4TypeAttributed] {
return self.instances.filter { instance in
filter(instance)
}
@@ -82,8 +84,8 @@ public struct Program {
}
public func find_parser(withName name: Identifier) -> Result {
- for instances in self.instances {
- guard let parser = instances as? Parser else {
+ for instance in self.instances {
+ guard let parser = instance.type as? Parser else {
continue
}
if parser.name == name {
diff --git a/Sources/P4Lang/Types.swift b/Sources/P4Lang/Types.swift
index aca375f..fc85538 100644
--- a/Sources/P4Lang/Types.swift
+++ b/Sources/P4Lang/Types.swift
@@ -14,3 +14,15 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+
+import Common
+
+public struct AttributedP4Type {
+ public let type: P4Type
+ public let attributes: P4TypeAttributed
+
+ public init(_ type: P4Type, _ attributes: P4TypeAttributed) {
+ self.type = type
+ self.attributes = attributes
+ }
+}
diff --git a/Sources/P4Runtime/Expressions.swift b/Sources/P4Runtime/Expressions.swift
index a975e63..f93595c 100644
--- a/Sources/P4Runtime/Expressions.swift
+++ b/Sources/P4Runtime/Expressions.swift
@@ -81,11 +81,12 @@ extension TypedIdentifier: EvaluatableLValueExpression {
return .Error(Error(withMessage: "Cannot assign to identifier not in scope"))
}
- if !type.eq(rhs: to.type()) {
+ if !type.type.eq(rhs: to.type()) {
return .Error(
Error(
withMessage:
- "Cannot assign value with type \(to.type()) to identifier \(self) with type \(type)"))
+ "Cannot assign value with type \(to.type()) to identifier \(self) with type \(type.type)"
+ ))
}
return .Ok(())
}
diff --git a/Tests/p4rseTests/ArrayTests.swift b/Tests/p4rseTests/ArrayTests.swift
index 37c07cf..fcd5148 100644
--- a/Tests/p4rseTests/ArrayTests.swift
+++ b/Tests/p4rseTests/ArrayTests.swift
@@ -40,7 +40,7 @@ import TreeSitterP4
};
"""
var test_declarations = VarTypeScopes().enter()
- test_declarations = test_declarations.declare(identifier: Identifier(name: "ta"), withValue: P4Array(withValueType: P4Int()))
+ test_declarations = test_declarations.declare(identifier: Identifier(name: "ta"), withValue: P4TypeAttributed.Attributeless(P4Array(withValueType: P4Int())))
var test_values = VarValueScopes().enter()
test_values = test_values.declare(
identifier: Identifier(name: "ta"),
@@ -68,7 +68,7 @@ import TreeSitterP4
};
"""
var test_declarations = VarTypeScopes().enter()
- test_declarations = test_declarations.declare(identifier: Identifier(name: "ta"), withValue: P4Int())
+ test_declarations = test_declarations.declare(identifier: Identifier(name: "ta"), withValue: P4TypeAttributed.Attributeless(P4Int()))
#expect(
#RequireErrorResult(
Error(
@@ -91,7 +91,7 @@ import TreeSitterP4
};
"""
var test_declarations = VarTypeScopes().enter()
- test_declarations = test_declarations.declare(identifier: Identifier(name: "ta"), withValue: P4Array(withValueType: P4Int()))
+ test_declarations = test_declarations.declare(identifier: Identifier(name: "ta"), withValue: P4TypeAttributed.Attributeless(P4Array(withValueType: P4Int())))
var test_values = VarValueScopes().enter()
test_values = test_values.declare(
identifier: Identifier(name: "ta"),
@@ -118,7 +118,7 @@ import TreeSitterP4
};
"""
var test_declarations = VarTypeScopes().enter()
- test_declarations = test_declarations.declare(identifier: Identifier(name: "ta"), withValue: P4Array(withValueType: P4Int()))
+ test_declarations = test_declarations.declare(identifier: Identifier(name: "ta"), withValue: P4TypeAttributed.Attributeless(P4Array(withValueType: P4Int())))
var test_values = VarValueScopes().enter()
test_values = test_values.declare(
identifier: Identifier(name: "ta"),
@@ -145,7 +145,7 @@ import TreeSitterP4
};
"""
var test_declarations = VarTypeScopes().enter()
- test_declarations = test_declarations.declare(identifier: Identifier(name: "ta"), withValue: P4Array(withValueType: P4Int()))
+ test_declarations = test_declarations.declare(identifier: Identifier(name: "ta"), withValue: P4TypeAttributed.Attributeless(P4Array(withValueType: P4Int())))
var test_values = VarValueScopes().enter()
test_values = test_values.declare(
identifier: Identifier(name: "ta"),
@@ -173,7 +173,7 @@ import TreeSitterP4
};
"""
var test_declarations = VarTypeScopes().enter()
- test_declarations = test_declarations.declare(identifier: Identifier(name: "ta"), withValue: P4Array(withValueType: P4Array(withValueType: P4Int())))
+ test_declarations = test_declarations.declare(identifier: Identifier(name: "ta"), withValue: P4TypeAttributed.Attributeless(P4Array(withValueType: P4Array(withValueType: P4Int()))))
var test_values = VarValueScopes().enter()
let nested = P4ArrayValue(
@@ -206,7 +206,7 @@ import TreeSitterP4
};
"""
var test_declarations = VarTypeScopes().enter()
- test_declarations = test_declarations.declare(identifier: Identifier(name: "ta"), withValue: P4Array(withValueType: P4Int()))
+ test_declarations = test_declarations.declare(identifier: Identifier(name: "ta"), withValue: P4TypeAttributed.Attributeless(P4Array(withValueType: P4Int())))
var test_values = VarValueScopes().enter()
test_values = test_values.declare(
identifier: Identifier(name: "ta"),
@@ -235,7 +235,7 @@ import TreeSitterP4
};
"""
var test_declarations = VarTypeScopes().enter()
- test_declarations = test_declarations.declare(identifier: Identifier(name: "ta"), withValue: P4Array(withValueType: P4Array(withValueType: P4Int())))
+ test_declarations = test_declarations.declare(identifier: Identifier(name: "ta"), withValue: P4TypeAttributed.Attributeless(P4Array(withValueType: P4Array(withValueType: P4Int()))))
var test_values = VarValueScopes().enter()
let nested = P4ArrayValue(
diff --git a/Tests/p4rseTests/ControlCompilerTests.swift b/Tests/p4rseTests/ControlCompilerTests.swift
index e4a8333..4b36fce 100644
--- a/Tests/p4rseTests/ControlCompilerTests.swift
+++ b/Tests/p4rseTests/ControlCompilerTests.swift
@@ -39,8 +39,8 @@ import P4Lang
}
};
"""
- let x = { (tipe: P4Type) -> Bool in
- switch tipe {
+ let x = { (tipe: P4TypeAttributed) -> Bool in
+ switch tipe.type {
case let c as Control: c.name == "simple"
default: false
}
@@ -73,8 +73,8 @@ import P4Lang
};
"""
- let filter = { (tipe: P4Type) -> Bool in
- switch tipe {
+ let filter = { (tipe: P4TypeAttributed) -> Bool in
+ switch tipe.type {
case let c as Control: c.name == "simple" || c.name == "complex"
default: false
}
diff --git a/Tests/p4rseTests/Declarations.swift b/Tests/p4rseTests/Declarations.swift
index 331aff0..5a99f20 100644
--- a/Tests/p4rseTests/Declarations.swift
+++ b/Tests/p4rseTests/Declarations.swift
@@ -166,3 +166,12 @@ import TreeSitterP4
#expect(#RequireOkResult(Program.Compile(simple_parser_declaration)))
}
+@Test func test_function_declaration_with_parameters_and_direction() async throws {
+ let simple_parser_declaration = """
+ bool functionb(in bool x, out string y, inout int z) {
+ x = true;
+ };
+ """
+ #expect(#RequireOkResult(Program.Compile(simple_parser_declaration)))
+}
+
diff --git a/Tests/p4rseTests/ScopeTests.swift b/Tests/p4rseTests/ScopeTests.swift
index e40a106..457a78f 100644
--- a/Tests/p4rseTests/ScopeTests.swift
+++ b/Tests/p4rseTests/ScopeTests.swift
@@ -28,39 +28,39 @@ import TreeSitterP4
@Test func test_scope() async throws {
let s = VarTypeScope()
- let s2 = s.declare(identifier: Identifier(name: "first"), withValue: P4Int())
+ let s2 = s.declare(identifier: Identifier(name: "first"), withValue: P4TypeAttributed.Attributeless(P4Int()))
let found_first = try! #require(s2.lookup(identifier: Identifier(name: "first")))
- #expect(found_first.eq(rhs: P4Int()))
+ #expect(found_first.type.eq(rhs: P4Int()))
#expect(s2.count == 1)
}
@Test func test_scope_no_set() async throws {
var ss = VarTypeScopes().enter()
- ss = ss.declare(identifier: Identifier(name: "first"), withValue: P4Int())
+ ss = ss.declare(identifier: Identifier(name: "first"), withValue: P4TypeAttributed.Attributeless(P4Int()))
ss = ss.enter()
- ss = ss.declare(identifier: Identifier(name: "second"), withValue: P4Boolean())
+ ss = ss.declare(identifier: Identifier(name: "second"), withValue: P4TypeAttributed.Attributeless(P4Boolean()))
let found_first = try! #UseOkResult(ss.lookup(identifier: Identifier(name: "first")))
let found_second = try! #UseOkResult(ss.lookup(identifier: Identifier(name: "second")))
- #expect(found_first.eq(rhs: P4Int()))
- #expect(found_second.eq(rhs: P4Boolean()))
+ #expect(found_first.type.eq(rhs: P4Int()))
+ #expect(found_second.type.eq(rhs: P4Boolean()))
}
@Test func test_scope_set() async throws {
var ss = VarTypeScopes().enter()
let id = Identifier(name: "first")
- let id_type = P4Int()
+ let id_type = P4TypeAttributed.Attributeless(P4Int())
ss = ss.declare(identifier: id, withValue: id_type)
ss = ss.enter()
- ss = ss.declare(identifier: Identifier(name: "second"), withValue: P4Boolean())
+ ss = ss.declare(identifier: Identifier(name: "second"), withValue: P4TypeAttributed.Attributeless(P4Boolean()))
// Change the value of `first`.
- ss = ss.set(identifier: id, withValue: P4String())
+ ss = ss.set(identifier: id, withValue: P4TypeAttributed.Attributeless(P4String()))
// Verify the change!
let found = try! #UseOkResult(ss.lookup(identifier: id))
- #expect(found.eq(rhs: P4String()))
+ #expect(found.type.eq(rhs: P4String()))
}
diff --git a/Tests/p4rseTests/StructTests.swift b/Tests/p4rseTests/StructTests.swift
index 56ab83c..e97df55 100644
--- a/Tests/p4rseTests/StructTests.swift
+++ b/Tests/p4rseTests/StructTests.swift
@@ -45,7 +45,7 @@ import TreeSitterP4
P4StructFieldIdentifier(name: "count", withType: P4Int()),
])
let struct_type = P4Struct(withName: Identifier(name: "Testing"), andFields: fields)
- test_declarations = test_declarations.declare(identifier: Identifier(name: "ts"), withValue: struct_type)
+ test_declarations = test_declarations.declare(identifier: Identifier(name: "ts"), withValue: P4TypeAttributed.Attributeless(struct_type))
var test_values = VarValueScopes().enter()
test_values = test_values.declare(
@@ -139,7 +139,7 @@ import TreeSitterP4
P4StructFieldIdentifier(name: "count", withType: P4Int()),
])
let struct_type = P4Struct(withName: Identifier(name: "Testing"), andFields: fields)
- test_declarations = test_declarations.declare(identifier: Identifier(name: "ts"), withValue: struct_type)
+ test_declarations = test_declarations.declare(identifier: Identifier(name: "ts"), withValue: P4TypeAttributed.Attributeless(struct_type))
var test_values = VarValueScopes().enter()
test_values = test_values.declare(
@@ -174,7 +174,7 @@ import TreeSitterP4
P4StructFieldIdentifier(name: "count", withType: P4Int()),
])
let struct_type = P4Struct(withName: Identifier(name: "Testing"), andFields: fields)
- test_declarations = test_declarations.declare(identifier: Identifier(name: "ts"), withValue: struct_type)
+ test_declarations = test_declarations.declare(identifier: Identifier(name: "ts"), withValue: P4TypeAttributed.Attributeless(struct_type))
var test_values = VarValueScopes().enter()
test_values = test_values.declare(
@@ -208,7 +208,7 @@ import TreeSitterP4
P4StructFieldIdentifier(name: "count", withType: P4Int()),
])
let struct_type = P4Struct(withName: Identifier(name: "Testing"), andFields: fields)
- test_declarations = test_declarations.declare(identifier: Identifier(name: "ts"), withValue: struct_type)
+ test_declarations = test_declarations.declare(identifier: Identifier(name: "ts"), withValue: P4TypeAttributed.Attributeless(struct_type))
var test_values = VarValueScopes().enter()
test_values = test_values.declare(
@@ -248,7 +248,7 @@ import TreeSitterP4
let ts_fields = P4StructFields([P4StructFieldIdentifier(name: "ty", withType: ty_struct_type)])
let ts_struct_type = P4Struct(withName: Identifier(name: "outer"), andFields: ts_fields)
- test_declarations = test_declarations.declare(identifier: Identifier(name: "ts"), withValue: ts_struct_type)
+ test_declarations = test_declarations.declare(identifier: Identifier(name: "ts"), withValue: P4TypeAttributed.Attributeless(ts_struct_type))
var test_values = VarValueScopes().enter()
@@ -290,7 +290,7 @@ import TreeSitterP4
P4StructFieldIdentifier(name: "count", withType: P4Int()),
])
let struct_type = P4Struct(withName: Identifier(name: "Testing"), andFields: fields)
- test_declarations = test_declarations.declare(identifier: Identifier(name: "ts"), withValue: struct_type)
+ test_declarations = test_declarations.declare(identifier: Identifier(name: "ts"), withValue: P4TypeAttributed.Attributeless(struct_type))
var test_values = VarValueScopes().enter()
test_values = test_values.declare(
@@ -322,7 +322,7 @@ import TreeSitterP4
P4StructFieldIdentifier(name: "count", withType: P4Int()),
])
let struct_type = P4Struct(withName: Identifier(name: "Testing"), andFields: fields)
- test_declarations = test_declarations.declare(identifier: Identifier(name: "ts"), withValue: struct_type)
+ test_declarations = test_declarations.declare(identifier: Identifier(name: "ts"), withValue: P4TypeAttributed.Attributeless(struct_type))
#expect(
#RequireErrorResult(
@@ -357,7 +357,7 @@ import TreeSitterP4
let ts_fields = P4StructFields([P4StructFieldIdentifier(name: "ty", withType: ty_struct_type)])
let ts_struct_type = P4Struct(withName: Identifier(name: "outer"), andFields: ts_fields)
- test_declarations = test_declarations.declare(identifier: Identifier(name: "ts"), withValue: ts_struct_type)
+ test_declarations = test_declarations.declare(identifier: Identifier(name: "ts"), withValue: P4TypeAttributed.Attributeless(ts_struct_type))
var test_values = VarValueScopes().enter()
@@ -405,7 +405,7 @@ import TreeSitterP4
let ts_fields = P4StructFields([P4StructFieldIdentifier(name: "ty", withType: ty_struct_type)])
let ts_struct_type = P4Struct(withName: Identifier(name: "outer"), andFields: ts_fields)
- test_declarations = test_declarations.declare(identifier: Identifier(name: "ts"), withValue: ts_struct_type)
+ test_declarations = test_declarations.declare(identifier: Identifier(name: "ts"), withValue: P4TypeAttributed.Attributeless(ts_struct_type))
var test_values = VarValueScopes().enter()
@@ -452,7 +452,7 @@ import TreeSitterP4
let ts_fields = P4StructFields([P4StructFieldIdentifier(name: "ty", withType: ty_struct_type)])
let ts_struct_type = P4Struct(withName: Identifier(name: "outer"), andFields: ts_fields)
- test_declarations = test_declarations.declare(identifier: Identifier(name: "ts"), withValue: ts_struct_type)
+ test_declarations = test_declarations.declare(identifier: Identifier(name: "ts"), withValue: P4TypeAttributed.Attributeless(ts_struct_type))
#expect(
#RequireErrorResult(
diff --git a/Tests/p4rseTests/ValueTypeParserTests.swift b/Tests/p4rseTests/ValueTypeParserTests.swift
index de6155a..9c8072e 100644
--- a/Tests/p4rseTests/ValueTypeParserTests.swift
+++ b/Tests/p4rseTests/ValueTypeParserTests.swift
@@ -253,7 +253,7 @@ import TreeSitterP4
};
"""
var test_types = VarTypeScopes().enter()
- test_types = test_types.declare(identifier: Identifier(name: "ta"), withValue: P4Array(withValueType: P4Int()))
+ test_types = test_types.declare(identifier: Identifier(name: "ta"), withValue: P4TypeAttributed.Attributeless(P4Array(withValueType: P4Int())))
#expect(
#RequireErrorResult(
Error(