Skip to content

Commit

Permalink
1.0 compat
Browse files Browse the repository at this point in the history
  • Loading branch information
LilithHafner committed Jul 6, 2024
1 parent 24165b8 commit 3820851
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 15 deletions.
2 changes: 1 addition & 1 deletion src/source_files.jl
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ struct SourceFile
end

Base.hash(s::SourceFile, h::UInt) = hash((s.code, s.byte_offset, s.filename, s.first_line, s.line_starts), h)
function Base.var"=="(a::SourceFile, b::SourceFile)
function Base.:(==)(a::SourceFile, b::SourceFile)
a.code == b.code && a.byte_offset == b.byte_offset && a.filename == b.filename &&
a.first_line == b.first_line && a.line_starts == b.line_starts
end
Expand Down
4 changes: 2 additions & 2 deletions src/syntax_tree.jl
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ end

# Exclude parent from hash and equality checks. This means that subtrees can compare equal.
Base.hash(node::TreeNode, h::UInt) = hash((node.children, node.data), h)
function Base.var"=="(a::TreeNode{T}, b::TreeNode{T}) where T
function Base.:(==)(a::TreeNode{T}, b::TreeNode{T}) where T
a.children == b.children && a.data == b.data
end

Expand Down Expand Up @@ -51,7 +51,7 @@ struct SyntaxData <: AbstractSyntaxData
end

Base.hash(data::SyntaxData, h::UInt) = hash((data.source, data.raw, data.position, data.val), h)
function Base.var"=="(a::SyntaxData, b::SyntaxData)
function Base.:(==)(a::SyntaxData, b::SyntaxData)
a.source == b.source && a.raw == b.raw && a.position == b.position && a.val == b.val
end

Expand Down
26 changes: 14 additions & 12 deletions test/serialization.jl
Original file line number Diff line number Diff line change
@@ -1,27 +1,29 @@
using Serialization

@testset "Equality" for T in [Expr, SyntaxNode, JuliaSyntax.GreenNode]
x = JuliaSyntax.parse(T, "f(x) = x + 2")
y = JuliaSyntax.parse(T, "f(x) = x + 2")
z = JuliaSyntax.parse(T, "f(x) = 2 + x")
@testset "Equality $T" for T in [Expr, SyntaxNode, JuliaSyntax.GreenNode]
x = JuliaSyntax.parsestmt(T, "f(x) = x + 2")
y = JuliaSyntax.parsestmt(T, "f(x) = x + 2")
z = JuliaSyntax.parsestmt(T, "f(x) = 2 + x")
@test x == y
@test x != z
@test y != z
end

@testset "Hashing" for T in [Expr, SyntaxNode, JuliaSyntax.GreenNode]
x = hash(JuliaSyntax.parse(T, "f(x) = x + 2"))::UInt
y = hash(JuliaSyntax.parse(T, "f(x) = x + 2"))::UInt
z = hash(JuliaSyntax.parse(T, "f(x) = 2 + x"))::UInt
@testset "Hashing $T" for T in [Expr, SyntaxNode, JuliaSyntax.GreenNode]
x = hash(JuliaSyntax.parsestmt(T, "f(x) = x + 2"))::UInt
y = hash(JuliaSyntax.parsestmt(T, "f(x) = x + 2"))::UInt
z = hash(JuliaSyntax.parsestmt(T, "f(x) = 2 + x"))::UInt
@test x == y # Correctness
@test x != z # Collision
@test y != z # Collision
end

@testset "Serialization" for T in [Expr, SyntaxNode, JuliaSyntax.GreenNode]
x = JuliaSyntax.parse(T, "f(x) = x + 2")
@testset "Serialization $T" for T in [Expr, SyntaxNode, JuliaSyntax.GreenNode]
x = JuliaSyntax.parsestmt(T, "f(x) = x + 2")
f = tempname()
serialize(f, x)
y = deserialize(f)
open(f, "w") do io
serialize(io, x)
end
y = open(deserialize, f, "r")
@test x == y
end

0 comments on commit 3820851

Please sign in to comment.