Skip to content

v0.2.0

Choose a tag to compare

@tannevaled tannevaled released this 26 Oct 18:04
· 19 commits to main since this release
58fe20b

M1 complete: a Go port of JuliaSyntax (the version julia 1.12.6 ships) that returns the same Expr trees as Meta.parseall.

  • syntax.ParseAll / ParseAllLimits: Julia source to expr.Expr, including julia's own error result for code that does not parse (the statements before the first error, then Expr(:error) / Expr(:incomplete) with the formatted ParseError);
  • syntax.GreenDump: the lossless green tree and its diagnostics;
  • bounded parsing (64 MiB input, 4000 nesting levels by default), fuzzed (FuzzLex, FuzzGreen, FuzzParse).

Parity with julia 1.12.6: tokens, green trees and Expr identical on 1191 / 1191 files of the release's share/julia tree (base, Compiler, stdlib, test — 18.5 MB) and on 976 / 976 golden snippets, error messages included.

Known gap: on a few malformed inputs JuliaSyntax itself throws (found by fuzzing: import. .., import. ...x, 0:0:<) and julia falls back to its older flisp parser, which is not ported; there ParseAll returns Expr(:error) and ParseAllLimits an error wrapping syntax.ErrParserFailed.

Speed, one core each: the corpus parses in 0.98 s against 1.39 s for julia's Meta.parseall (0.70×).

100% coverage, race-clean, tested natively on amd64/arm64/386 and under qemu on riscv64, loong64, ppc64le, s390x and arm, compiled for every GOOS/GOARCH, tested as wasip1 under wazero.

Next: M2, lowering (JuliaLowering → CodeInfo).