Skip to content

Commit 177163a

Browse files
authored
Merge pull request #359 from flintlang/revert-354-trait_specification_contracts
Revert "Trait specification contracts"
2 parents ac580e9 + f379e0c commit 177163a

File tree

8 files changed

+15
-86
lines changed

8 files changed

+15
-86
lines changed

Sources/AST/ASTDumper.swift

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,6 @@ public class ASTDumper {
6565
writeNode("ContractDeclaration") {
6666
self.dump(contractDeclaration.contractToken)
6767
self.dump(contractDeclaration.identifier)
68-
if !contractDeclaration.conformances.isEmpty {
69-
self.writeNode("Conforms to") {
70-
for traitIdentifier in contractDeclaration.conformances {
71-
self.dump(traitIdentifier)
72-
}
73-
}
74-
}
7568
if !contractDeclaration.states.isEmpty {
7669
self.dump(contractDeclaration.states)
7770
}

Sources/AST/Declaration/ContractDeclaration.swift

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ public struct ContractDeclaration: ASTNode {
1313

1414
public var contractToken: Token
1515
public var identifier: Identifier
16-
public var conformances: [Identifier]
1716
public var states: [TypeState]
1817
public var members: [ContractMember]
1918

@@ -47,19 +46,17 @@ public struct ContractDeclaration: ASTNode {
4746
return EnumDeclaration(enumToken: enumToken, identifier: stateEnumIdentifier, type: intType, cases: cases)
4847
}
4948

50-
public init(contractToken: Token, identifier: Identifier, conformances: [Identifier], states: [TypeState], members: [ContractMember]) {
49+
public init(contractToken: Token, identifier: Identifier, states: [TypeState], members: [ContractMember]) {
5150
self.identifier = identifier
5251
self.members = members
53-
self.conformances = conformances
5452
self.states = states
5553
self.contractToken = contractToken
5654
}
5755

5856
// MARK: - ASTNode
5957
public var description: String {
60-
let conformsText = conformances.map ({ $0.description }).joined(separator: ", ")
61-
let stateText = states.map({ $0.description }).joined(separator: ", ")
62-
let headText = "contract \(identifier): \(conformsText) \(stateText)"
58+
let stateText = states.map({ $0.description }).joined(separator: " ")
59+
let headText = "contract \(identifier) \(stateText)"
6360
let memberText = members.map({ $0.description }).joined(separator: "\n")
6461
return "\(headText) {\(memberText)}"
6562
}

Sources/Parser/Parser+Components.swift

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,17 @@ extension Parser {
2121

2222
func parseIdentifierGroup() throws -> (identifiers: [Identifier], closeBracketToken: Token) {
2323
try consume(.punctuation(.openBracket), or: .badDeclaration(at: latestSource))
24-
guard let closingIndex = indexOfFirstAtCurrentDepth([.punctuation(.closeBracket)]) else {
25-
throw raise(.expectedCloseParen(at: latestSource))
26-
}
27-
let identifiers = try parseIdentifierList(upTo: closingIndex)
24+
let identifiers = try parseIdentifierList()
2825
let closeBracketToken = try consume(.punctuation(.closeBracket), or: .expectedCloseParen(at: latestSource))
2926

3027
return (identifiers, closeBracketToken)
3128
}
3229

33-
func parseIdentifierList(upTo closingIndex: Int) throws -> [Identifier] {
30+
func parseIdentifierList() throws -> [Identifier] {
3431
var identifiers = [Identifier]()
35-
32+
guard let closingIndex = indexOfFirstAtCurrentDepth([.punctuation(.closeBracket)]) else {
33+
return []
34+
}
3635
while currentIndex < closingIndex {
3736
identifiers.append(try parseIdentifier())
3837
if currentIndex < closingIndex {
@@ -158,15 +157,6 @@ extension Parser {
158157
return (callerCapabilities, closeBracketToken)
159158
}
160159

161-
// MARK: Conformances
162-
func parseConformances() throws -> [Identifier] {
163-
try consume(.punctuation(.colon), or: .expectedConformance(at: latestSource))
164-
guard let endOfConformances = indexOfFirstAtCurrentDepth([.punctuation(.openBracket), .newline, .punctuation(.openBrace)]) else {
165-
throw raise(.expectedConformance(at: latestSource))
166-
}
167-
return try parseIdentifierList(upTo: endOfConformances)
168-
}
169-
170160
// MARK: Type State
171161
func parseTypeStateGroup() throws -> [TypeState] {
172162
let (identifiers, _) = try parseIdentifierGroup()

Sources/Parser/Parser+Declaration.swift

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,19 +47,17 @@ extension Parser {
4747
func parseContractDeclaration() throws -> ContractDeclaration {
4848
let contractToken = try consume(.contract, or: .badTopLevelDeclaration(at: latestSource))
4949
let identifier = try parseIdentifier()
50-
var states: [TypeState] = []
51-
var conformances: [Identifier] = []
52-
if currentToken?.kind == .punctuation(.colon) {
53-
conformances = try parseConformances()
54-
}
50+
let states: [TypeState]
5551
if currentToken?.kind == .punctuation(.openBracket) {
5652
states = try parseTypeStateGroup()
53+
} else {
54+
states = []
5755
}
5856
try consume(.punctuation(.openBrace), or: .leftBraceExpected(in: "contract declaration", at: latestSource))
5957
let members = try parseContractMembers(enclosingType: identifier.name)
6058
try consume(.punctuation(.closeBrace), or: .rightBraceExpected(in: "contract declaration", at: latestSource))
6159

62-
return ContractDeclaration(contractToken: contractToken, identifier: identifier, conformances: conformances, states: states, members: members)
60+
return ContractDeclaration(contractToken: contractToken, identifier: identifier, states: states, members: members)
6361
}
6462

6563
func parseStructDeclaration() throws -> StructDeclaration {

Sources/Parser/Parser.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ public class Parser {
5555
switch tld {
5656
case .contractDeclaration(let contract):
5757
environment.addContract(contract)
58-
// TODO: Add conformances here
5958
if contract.isStateful {
6059
environment.addEnum(contract.stateEnum)
6160
}

Sources/Parser/ParserError.swift

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,6 @@ extension Diagnostic {
5454
static func expectedBehaviourSeparator(at sourceLocation: SourceLocation) -> Diagnostic {
5555
return Diagnostic(severity: .error, sourceLocation: sourceLocation, message: "Expected behaviour separator")
5656
}
57-
static func expectedConformance(at sourceLocation: SourceLocation) -> Diagnostic {
58-
return Diagnostic(severity: .error, sourceLocation: sourceLocation, message: "Expected conformance")
59-
}
6057

6158
// MARK: Statement
6259
static func expectedStatement(at sourceLocation: SourceLocation) -> Diagnostic {

Tests/ParserTests/conformance.flint

Lines changed: 0 additions & 44 deletions
This file was deleted.

docs/grammar.abnf

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ topLevelDeclaration = contractDeclaration
99
/ enumDeclaration;
1010

1111
; CONTRACTS
12-
contractDeclaration = %s"contract" SP identifier [":" WSP identifierList ] SP [identifierGroup] SP "{" *(WSP variableDeclaration CRLF) "}";
12+
contractDeclaration = %s"contract" SP identifier SP [identifierGroup] SP "{" *(WSP variableDeclaration CRLF) "}";
1313

1414
; VARIABLES
1515
variableDeclaration = [*(modifier SP)] SP (%s"var" / %s"let") SP identifier typeAnnotation [WSP "=" WSP expression];
@@ -55,11 +55,10 @@ contractBehaviourMember = functionDeclaration
5555
/ fallbackDeclaration;
5656

5757
; ACCESS GROUPS
58-
stateGroup = "@" identifierGroup;
58+
stateGroup = "@" identifierGroup;
5959
callerCapabilityBinding = identifier WSP "<-";
6060
callerCapabilityGroup = identifierGroup;
61-
identifierGroup = "(" identifierList ")";
62-
identifierList = identifier *("," WSP identifier)
61+
identifierGroup = "(" identifier *("," WSP identifier) ")";
6362

6463
; FUNCTIONS + INITIALIZER + FALLBACK
6564
functionDeclaration = functionHead SP identifier parameterList [returnType] codeBlock;

0 commit comments

Comments
 (0)