Sebastian Ullrich
f29d886c29
fix(library/init/lean/parser/string_literal): letter escapes
2018-10-16 22:43:30 +02:00
Leonardo de Moura
88de81077c
feat(library/compiler/specialize): do not specialize instances unless they are marked with [specialize]
...
@kha: I changed the specialization candidate selection procedure.
Now, instances are not considered for specializations unless we mark
them with `[specialize]`. The idea is that an instance application is
morally just creating the "dictionary" for invoking a polymorphic
function.
2018-10-15 18:29:29 -07:00
Leonardo de Moura
4cfe44bed0
feat(library/compiler/specialize): add nospecialize attribute
...
@kha I had to add this attribute because the specializer was generated
many specialization candidates for functions that take `[has_tokens ...]`
as an argument. Moreover, these candidates had a lot of
dependencies. I am trying to workaround this issue by marking the
instances with the new attribute `[nospecialize]`.
I did not mark instances created by `[derive]`. It is quite tedious to
do it.
BTW, when I was investigating the problem I stumbled at `node.view`.
Its type is:
```
node.view :
Π {α : Type} {m : Type → Type} [_inst_1 : monad m] [_inst_2 : monad_except (parsec.message syntax) m]
[_inst_3 : monad_parsec syntax m] [_inst_4 : alternative m] (k : syntax_node_kind) (rs : list (m syntax))
[i : @has_view syntax_node_kind k α], @has_view (m syntax) (@node m _inst_1 _inst_2 _inst_3 _inst_4 k rs) α
```
This looks wrong: the view depends on `[monad_parsec syntax m]`
We should also make sure definitions do not have unnecessary type
class instances. Otherwise, we will put additional stress on the code
specializer. One option is to change the frontend and filter unused
instances.
2018-10-15 17:44:26 -07:00
Sebastian Ullrich
a820b9955f
perf(library/init/lean/parser/term): index term parsers by leading token
...
66% speedup on core.lean
2018-10-15 10:21:08 +02:00
Sebastian Ullrich
2df885d9a3
fix(library/init/lean/parser/token): broken end of comment
2018-10-13 12:01:48 -07:00
Sebastian Ullrich
8a88d4d5e2
feat(library/init/lean/parser/token): string literals
...
hard-coded for now because we do not have general support for variable-length
tokens yet
2018-10-13 08:11:36 -07:00
Sebastian Ullrich
758d258210
fix(library/init/lean/parser/term): rename term.ident to ident_univs to remove confusion with ident
...
`protected` didn't do anything here
2018-10-13 08:11:36 -07:00
Leonardo de Moura
c0b76704a0
chore(library/init/lean/parser/level): typo
2018-10-12 11:56:34 -07:00
Leonardo de Moura
15a25d5aa9
chore(library/init/lean/parser): add a few comments
2018-10-11 15:54:57 -07:00
Sebastian Ullrich
8e0778e54a
fix(library/init/lean/parser/token): parse whitespace after raw_ident
2018-10-08 09:30:48 -07:00
Sebastian Ullrich
4e3f9b46c2
refactor(library/init/lean/parser/token): remove weird with_source higher-order function
2018-10-05 08:52:04 -07:00
Sebastian Ullrich
ebeec844af
perf(library/init/lean/parser): minor performance tweaks
2018-10-05 08:52:04 -07:00
Sebastian Ullrich
22714b9b10
perf(library/init/lean/parser/combinators): node: no need to fill up with syntax.missing anymore
...
Views now do iterated pattern matches instead of a single one
2018-10-04 14:27:24 -07:00
Sebastian Ullrich
959948b901
feat(library/init/lean): even more core.lean progress
2018-10-03 16:00:08 -07:00
Sebastian Ullrich
ca8e75be9e
fix(library/init/lean/elaborator): check for and consume end of input
2018-10-03 16:00:08 -07:00
Sebastian Ullrich
5274be8c3e
feat(library/init/lean/elaborator): local notation
...
Implemented by treating the parser cfg as a cache that can be recreated from the
elaborator state after e.g. a scope has ended
2018-10-03 16:00:08 -07:00
Sebastian Ullrich
0563c60b1a
feat(library/init/lean/elaborator): add coroutine, use it to implement section/namespace elaborators (they don't do anything yet except for checking the end name)
2018-10-02 14:55:28 -07:00
Sebastian Ullrich
097b7be14f
refactor(library/init/lean/parser/token): change raw view type to option syntax_atom and create raw_str to give some raw parsers view defaults
2018-10-02 14:55:28 -07:00
Sebastian Ullrich
533ac2d5b2
fix(library/init/lean/parser/declaration): attributes before visibility modifiers
2018-10-02 14:55:28 -07:00
Sebastian Ullrich
71fd8a59b4
feat(library/init/lean/parser/notation): simple term language for precedences
2018-10-02 14:55:28 -07:00
Sebastian Ullrich
b8b39585ec
fix(library/init/lean/parser/command): variable may take unbracketed binder
2018-10-02 14:55:28 -07:00
Sebastian Ullrich
fc5120290f
feat(library/init/lean/parser/term): inductive levels, let, structure instances
2018-10-02 14:55:28 -07:00
Leonardo de Moura
429f844fbe
@chore(library/init/lean/parser/parsec): remove @[inline] annotations to reduce compilation time
...
We will mark them as `@[specialize]` as soon as we implement code specialization
2018-10-01 17:30:13 -07:00
Sebastian Ullrich
ab5460d010
perf(library/init/lean/parser/parsec): more [inline] attributes
2018-10-01 16:32:11 -07:00
Sebastian Ullrich
7d8c3c5db8
feat(library/init/lean/parser/term): use longest_match for Pratt parsing
2018-10-01 09:02:39 -07:00
Sebastian Ullrich
6a23ecfe9c
fix(library/init/lean/parser/parsec): fix lookahead, longest_match
2018-10-01 09:02:39 -07:00
Sebastian Ullrich
b443006e8f
fix(library/init/lean/parser/syntax): reprint: do not concatenate choice contents
2018-10-01 09:02:39 -07:00
Sebastian Ullrich
945bf39e05
feat(library/init/lean): progress
2018-09-28 20:50:18 -07:00
Sebastian Ullrich
df278096c4
fix(library/init/lean): fixes fixes fixes
2018-09-28 13:08:25 -07:00
Sebastian Ullrich
203545ce99
chore(library/init/lean/parser/trie): add debug print
...
Also make sure it's in the prelude, whoops
2018-09-28 13:08:24 -07:00
Sebastian Ullrich
5123148aa6
feat(library/init/data/string/basic): trim whitespace around symbols
2018-09-28 13:08:24 -07:00
Sebastian Ullrich
b6ca2e945d
feat(library/init/lean): support unquoted symbols in mixfix notation
2018-09-28 13:08:24 -07:00
Sebastian Ullrich
63201c2a78
feat(library/init/lean/elaborator): add elaborator, elaborate notation and reserve notation
2018-09-28 13:08:24 -07:00
Sebastian Ullrich
1f85d34153
chore(library/init/lean/parser/notation): remove old notation <numeric-literal> := ... syntax
2018-09-28 13:08:24 -07:00
Sebastian Ullrich
2e5ea16e2f
perf(library/init/lean/parser): cache consecutive calls to token at the same position
...
Parser performance improved by about 33%
2018-09-27 16:08:19 -07:00
Sebastian Ullrich
e535cd92f7
perf(library/init/lean/parser/token): inline hot polymorphic functions
...
Decreases parser runtime by ~15%
2018-09-27 16:02:19 -07:00
Leonardo de Moura
b3451fb682
perf(library/init/lean/parser/parsec): merge ok and ok_eps
2018-09-27 15:14:37 -07:00
Leonardo de Moura
64b5e05a3e
feat(library/init/lean/parser/parsec): try to minimize the amount of inlined code
2018-09-27 14:53:30 -07:00
Leonardo de Moura
dd50cc1785
feat(library/init/lean/parser/parsec): add orelse_cont to improve compilation time
2018-09-27 13:22:18 -07:00
Sebastian Ullrich
26c0f36848
doc(library/init/lean/parser/basic): expand comment
2018-09-27 10:16:40 -07:00
Sebastian Ullrich
e661aaeacf
refactor(library/init/lean/parser): store registered parsers in configs, use config hierarchy to avoid mutually recursive types
...
And other refactorings along the way
2018-09-27 10:05:10 -07:00
Sebastian Ullrich
2c07922327
refactor(library/init/lean/parser): minimize parser_state, have the module coroutine take and return parser_config
2018-09-26 13:20:07 -07:00
Sebastian Ullrich
07901fcfcb
refactor(library/init/lean/parser/module): put prelude and imports into non-optional header parser to make the life of the elaborator and other consumers a bit easier
2018-09-26 13:20:07 -07:00
Sebastian Ullrich
1d01e81de8
refactor(library/init/lean/parser): do not construct final syntax tree independent from intermediate outputs
...
This makes sure we have a single consistent view of the file
2018-09-25 18:28:53 -07:00
Sebastian Ullrich
f8dd94c4bf
feat(library/init/lean/expander): full mixfix and reserve_mixfix expanders
2018-09-25 15:05:47 -07:00
Sebastian Ullrich
bba8beca63
feat(library/init/lean/parser/token): give number a view
2018-09-25 14:18:52 -07:00
Sebastian Ullrich
4afcc0aab0
fix(library/init/lean/parser/term): do not allow mixing bracketed and unbracketed binders
2018-09-25 09:16:02 -07:00
Sebastian Ullrich
15927f21c9
refactor(library/init/lean/parser/token): unicode_symbol parser
2018-09-25 09:16:02 -07:00
Leonardo de Moura
b4b42ef8b2
feat(library/init/lean/parser/parsec): missing [inline]
2018-09-24 18:57:49 -07:00
Sebastian Ullrich
32f4d52e1c
refactor(library/init/lean): revert introduction of tysyntax; push syntax.missing through views
2018-09-24 18:24:27 -07:00