From 7d016f958bcf362fc5feb4b998ebc2e1546f2334 Mon Sep 17 00:00:00 2001 From: Tim Holy Date: Tue, 19 Feb 2019 14:37:49 -0600 Subject: [PATCH] Fix and test docstring extraction --- src/JuliaInterpreter.jl | 2 +- test/toplevel.jl | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/JuliaInterpreter.jl b/src/JuliaInterpreter.jl index 536519003d3680..93f99628f902ae 100644 --- a/src/JuliaInterpreter.jl +++ b/src/JuliaInterpreter.jl @@ -455,7 +455,7 @@ function prepare_toplevel!(modexs, docexprs, lex::Expr, mod::Module, ex::Expr; e end push!(docexs, ex) body = ex.args[4] - if isa(body, Expr) + if isa(body, Expr) && body.head != :call prepare_toplevel!(modexs, docexprs, lex, mod, body; extract_docexprs=extract_docexprs, filename=filename) end else diff --git a/test/toplevel.jl b/test/toplevel.jl index 5d2bdc369ed04f..13b3bfd6eed0ec 100644 --- a/test/toplevel.jl +++ b/test/toplevel.jl @@ -287,3 +287,37 @@ end end @test LowerAnon.z == [4,7,12] end + +@testset "Docstrings" begin + ex = quote + """ + A docstring + """ + f(x) = 1 + + g(T::Type) = 1 + g(x) = 2 + + """ + Docstring 2 + """ + g(T::Type) + + module Sub + """ + Docstring 3 + """ + f(x) = 2 + end + end + Core.eval(Toplevel, Expr(:toplevel, ex.args...)) + modexs, docexprs = JuliaInterpreter.prepare_toplevel(Toplevel, ex; extract_docexprs=true) + for (mod, ex) in modexs + frame = JuliaInterpreter.prepare_thunk(mod, ex) + while true + JuliaInterpreter.through_methoddef_or_done!(stack, frame) === nothing && break + end + end + @test length(docexprs[Toplevel]) == 2 + @test length(docexprs[Toplevel.Sub]) == 1 +end