Commit Graph
1916 Commits
Author SHA1 Message Date
José Valim 8e7befb108 Add parens to static remote nullary calls
test/erlang/module_test.erl have also been removed
as they have been ported elsewhere.
2019-11-08 17:59:08 +01:00
José Valim 49d865b1a0 Ensure reassigned variables are properly carried forward 2019-11-06 19:00:36 +01:00
José Valim d844c8e6ba Improve error messages on keywords, closes #9467 2019-11-04 14:51:39 +01:00
José Valim 0c8414d739 Add Kernel.is_map_key/2 2019-11-04 12:47:26 +01:00
José Valim 1d7ea39d74 Simplify emission of rescue clauses to avoid duplicate generation 2019-11-03 16:44:49 +01:00
José Valim a6aeeb90e6 Refactor Erlang try code 2019-11-03 16:22:20 +01:00
José Valim ed272a96cb No need to track stacktrace usage 2019-11-03 13:56:39 +01:00
José Valim d5a1cf5107 elif to else 2019-11-03 13:06:30 +01:00
Łukasz Jan Niemier 2c8e75c3d3 Cleanup TODOs for OTP 21+ (#9477) 2019-11-03 13:05:18 +01:00
José Valim 642ae17bc7 Remove redundant rewrite as it has been optimized in the VM 2019-11-02 17:12:27 +01:00
José Valim afa860ab4a Remove unecessary Erlang macro 2019-11-01 19:19:54 +01:00
Łukasz Jan Niemier 67dec4683d Use Erlang's logger as main logging implementation (#9333) 2019-11-01 15:53:05 +01:00
Glauber Campinho 3940206b03 Avoid second calculation of arity in expand_local/4 (#9463) 2019-10-31 20:49:23 +01:00
Glauber Campinho 6f6e45f38a Raise error on functions/guards without implementation (#9461)
Fixes #9392.

When a local bodiless function is called the generated Erlang code is invalid, this commit checks for bodiless locals during the compilation and raises an error on that avoiding the invalid code.
2019-10-31 07:00:43 -05:00
José Valim 1e583993a9 Bootstrap typespec before code 2019-10-29 20:42:24 +01:00
José Valim 477e588acc Use maps:merge on Erlang pass 2019-10-29 19:37:21 +01:00
José Valim 77ee8afe9a Apply mergev optmization on erlang pass 2019-10-29 19:37:12 +01:00
José Valim 6d8ce83715 Remove unecessary mergev on elixir_erl 2019-10-29 18:20:34 +01:00
José Valim 123eb4e6d2 Only transform environment in match if necessary 2019-10-29 17:17:53 +01:00
José Valim 60a472e1ae Further optimize variable merging 2019-10-29 17:17:53 +01:00
José Valim 9529e528cc Move unused_vars to its own variable 2019-10-29 17:17:53 +01:00
José Valim a3b1ba5a44 Remove a need to merge unused vars 2019-10-29 17:17:53 +01:00
José Valim cf9a833ff9 Simplify scoped merge of unused vars 2019-10-29 17:17:53 +01:00
José Valim 8df4898bd1 Remove need for mergev on match/head 2019-10-29 17:17:53 +01:00
Glauber Campinho 7dd86ec1f7 Execute callbacks on :elixir_compiler after all warnings are emitted (#9447)
Currently the callbacks on :elixir_compiler are called before the warnings of unused aliases and imports are emitted, causing the messages to not consumed during the compilation. This commit changes `:elixir_lexical.run/2` to `:elixir_lexical.run/3` splitting the callback in two, one during the execution to evaluate the forms and another to be called after all the warnings are emitted.

Fixes #9440
2019-10-26 10:58:28 +02:00
José Valim 560e721b9b Remove unused funtionality and erase pdict properly 2019-10-25 15:29:46 +02:00
José Valim 649914c394 Validate bind_quoted, closes #9406 2019-10-21 21:08:02 +02:00
José Valim 69d085abd4 Improve errors for calls on aliases 2019-10-21 21:02:00 +02:00
Fernando Tapia Rico a01d7751ec Remove redundant guard
Kudos to @michalmuskala
2019-10-14 11:57:51 +02:00
Fernando Tapia Rico 66a289056e Raise when passing an empty list instead of clauses (#9402)
This fixes an edge case in which the compiler will process an
empty list value (`[]`) as a block with no clauses, which is not
possible.

Here is an example:

    with {:ok, value} <- Map.fetch(%{a: 1}, :a) do
      value
    else
      []
    end

With this change, the code above will not compile.
2019-10-13 16:50:05 +02:00
Eric Meadows-Jönsson c6da1cfaa8 Run checker on Code.require_file/1 (#9393)
Closes #9362.
2019-10-10 23:11:10 +02:00
José Valim f52f2c7952 Ensure compilation works for a variable named super, closes #9390 2019-10-09 19:11:04 +02:00
Eric Meadows-Jönsson 9f334a73ca Move map.ex to bootstrap (#9389) 2019-10-08 14:39:05 +02:00
José Valim fd49a67f34 Add defmodule tracing event 2019-10-07 16:12:52 -03:00
Björn Gustavsson 9f8593fd6b Optimize elixir_tokenizer (#9347)
When comparing characters in `elixir_tokenizer`, replace `==` and `/=`
with the more efficient `=:=` and `=/=` operators.

The `=:=` and `=/=` operators are more efficient because they can
only return `true` if the operands have the same type:

    1> $* =:= 42.
    true
    2> $* =:= 42.0.
    false

In contrast, the `==` operator can return `true` when comparing
an integer and a float:

    3> $* == 42.0.
    true

Using `=:=` and `=/=` also gives the Erlang compiler more opportunites
for optimization. For example, when compiling the `is_sigil` macro,
the compiler can combine all eight comparisons into a single `select_val`
instruction instead of emitting eight separate instructions.
2019-09-14 12:42:07 +02:00
José Valim 94b507841b Add struct keys to tracing on struct expansion 2019-09-01 09:52:18 -06:00
José Valim 3efda3155c Raise multiple args errors in case with guards, closes #9311 2019-08-23 10:06:21 +02:00
Eric Meadows-Jönsson 0f47a58bf8 Support struct patterns (#9306) 2019-08-22 13:28:05 -07:00
Eric Meadows-Jönsson 807e205b75 Split Module.Types and add unit tests (#9303) 2019-08-20 11:46:13 -07:00
José Valim 22f70afe4c Warn when function head comes immediately after the implementation 2019-08-15 19:23:38 +02:00
José Valim 4477115675 Use an empty keyword list instead of nil for empty definitions 2019-08-14 14:51:49 +02:00
José Valim 99f504e9dc Use read-only naming for Module operations 2019-08-09 16:11:16 +02:00
Aleksei Matiushkin 9a959eac25 Make Module.open?/1 and family to match their docs (#9278)
* Make Module.open?/1 and family to match their docs.

* Cosmetics.

* Introduced internal not_closing state for modules.

It’s stored in a separate ETS and the last field of #elixir_code_server state to minimize impact.

* Use the same ETS for the state.
2019-08-09 15:43:43 +02:00
Eric Meadows-Jönsson c5d5e7f462 Add inference of function head to find function clauses that will never match (#9270) 2019-08-08 14:02:27 +02:00
José Valim b08593b9d1 Add compiler tracing (#9247)
This feature allows IDEs and other tools wanting to
perform source code analysis to do so reliably without
a need to reimplement Elixir's compiler expansion and
without relying on Elixir's private APIs.

This commit also adds :parser_options to compiler
options, which allows developers to combine both options
to retrieve more accurate information, such as columns.
2019-08-02 13:35:12 +02:00
José Valim 9540e9fd6a Raise correct error message for incomplete interpolation in heredoc, closes #9252 2019-07-30 18:36:41 +02:00
José Valim ce5602bee1 Include file+line range in eval errors 2019-07-29 15:20:13 +02:00
José Valim b3201224b3 Reduce private API surface 2019-07-29 15:20:13 +02:00
José Valim 783ceb4507 Ensure local captures work correctly on macro expansion
Closes #9245
2019-07-27 11:28:05 +02:00
José Valim 6c5ad7b661 Clean up Macro.Env and hide private fields 2019-07-25 22:07:51 +02:00