diff --git a/src/Classes.jl b/src/Classes.jl index da73858..fed71de 100644 --- a/src/Classes.jl +++ b/src/Classes.jl @@ -251,13 +251,13 @@ function _defclass(clsname, supercls, mutable, wheres, exprs) # partition expressions into constructors and field defs ctors = Vector{Expr}() - fields = Vector{Expr}() + fields = Vector{Union{Expr, Symbol}}() for ex in exprs - try + if ex isa Symbol || (ex isa Expr && ex.head === :(::) && ex.args[1] isa Symbol ) # x or x::Int64 + push!(fields, ex) + else splitdef(ex) # throws AssertionError if not a func def push!(ctors, ex) - catch - push!(fields, ex) end end diff --git a/test/test_classes.jl b/test/test_classes.jl index e752467..7b600ad 100644 --- a/test/test_classes.jl +++ b/test/test_classes.jl @@ -167,3 +167,11 @@ obj = AbstractLog{Float64}([1. 2.; 3. 4.]) # #= /Users/rjp/.julia/packages/MacroTools/4AjBS/src/utils.jl:302 =# # new{T3, T4}(one, two, x, y) # end + +# x is a typeless field +@class Cat begin + x +end + +@test Cat(1).x == 1 +@test Cat("a").x == "a"