Skip to content

Commit 88fd0c2

Browse files
committed
only parse public in toplevel scopse
1 parent 5535ff1 commit 88fd0c2

File tree

3 files changed

+21
-10
lines changed

3 files changed

+21
-10
lines changed

src/components/keywords.jl

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
44
Dispatch function for when the parser has reached a keyword.
55
"""
6-
function parse_kw(ps::ParseState)
6+
function parse_kw(ps::ParseState; is_toplevel = false)
77
k = kindof(ps.t)
88
if ps.closer.precedence == 20 && ps.lt.kind === Tokens.EX_OR && k !== Tokens.END
99
return EXPR(:IDENTIFIER, ps)
@@ -73,7 +73,11 @@ function parse_kw(ps::ParseState)
7373
elseif k === Tokens.PRIMITIVE
7474
return @default ps parse_primitive(ps)
7575
elseif k === Tokens.PUBLIC
76-
return @default ps parse_public(ps)
76+
if is_toplevel
77+
return @default ps parse_public(ps)
78+
else
79+
return EXPR(:IDENTIFIER, ps)
80+
end
7781
elseif k === Tokens.TYPE
7882
return EXPR(:IDENTIFIER, ps)
7983
elseif k === Tokens.STRUCT

src/packagedef.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ Acceptable starting tokens are:
3333
+ An `@`.
3434
3535
"""
36-
function parse_expression(ps::ParseState, esc_on_error = false)
36+
function parse_expression(ps::ParseState, esc_on_error = false; is_toplevel = false)
3737
if kindof(ps.nt) === Tokens.ENDMARKER
3838
ret = mErrorToken(ps, UnexpectedToken)
3939
elseif (esc_on_error && ps.nt.kind == Tokens.ERROR)
@@ -47,7 +47,7 @@ function parse_expression(ps::ParseState, esc_on_error = false)
4747
else
4848
next(ps)
4949
if iskeyword(kindof(ps.t)) && kindof(ps.t) != Tokens.DO
50-
ret = parse_kw(ps)
50+
ret = parse_kw(ps; is_toplevel=is_toplevel)
5151
elseif kindof(ps.t) === Tokens.LPAREN
5252
ret = parse_paren(ps)
5353
elseif kindof(ps.t) === Tokens.LSQUARE
@@ -212,14 +212,14 @@ function parse_doc(ps::ParseState)
212212
elseif isbinaryop(ps.nt) && !closer(ps)
213213
ret = parse_compound_recur(ps, doc)
214214
else
215-
ret = parse_expression(ps)
215+
ret = parse_expression(ps; is_toplevel = true)
216216
ret = EXPR(:macrocall, EXPR[EXPR(:globalrefdoc, 0, 0), EXPR(:NOTHING, 0, 0), doc, ret], nothing)
217217
end
218218
else
219-
ret = parse_expression(ps)
219+
ret = parse_expression(ps; is_toplevel = true)
220220
end
221221
if _continue_doc_parse(ps, ret)
222-
push!(ret, parse_expression(ps))
222+
push!(ret, parse_expression(ps; is_toplevel = true))
223223
end
224224
return ret
225225
end

test/parser/test_keyword_blocks.jl

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -195,10 +195,17 @@ if VERSION > v"1.11-"
195195
using CSTParser: remlineinfo!
196196
include("../shared.jl")
197197

198-
@test """public foo""" |> test_expr
199-
@test """public foo, bar""" |> test_expr
200-
@test """public foo,
198+
@test "public foo" |> test_expr
199+
@test "public foo, bar" |> test_expr
200+
@test """
201+
public foo,
201202
bar
202203
""" |> test_expr
204+
@test "f() = public" |> test_expr
205+
@test """
206+
let
207+
public
208+
end
209+
""" |> test_expr
203210
end
204211
end

0 commit comments

Comments
 (0)