Commit Graph
1935 Commits
Author SHA1 Message Date
José Valim 3b3c15b979 Do not add no_warn_undefined to CInf chunk 2019-12-09 10:33:35 +01:00
Eric Meadows-Jönsson 9394612a3d Remove signatures from checker chunk (#9634) 2019-12-07 18:09:50 +01:00
José Valim ba619b1c3e Add Application.compile_env/3 (#9628)
Mix stores the compile_env in each applications' .app file.

Releases and Mix tasks were also changed to validate against
the runtime configuration against any stored `compile_env`.
In case of mismatches, an error is raised during boot.
2019-12-06 17:23:01 +01:00
José Valim 46fa678f42 Refactor elixir_config and mix compilers for upcoming changes 2019-12-04 11:59:51 +01:00
José Valim 60733b8d7c Print all undefined functions as warnings and then raise (#9623)
Sometimes one undefined function warning can hide others.
For example, in a function call like this:

    foo(bar 1, 2)

The user may be expecting it to be called as:

    foo(bar(1), 2)

But Elixir compiles it to:

    foo(bar(1, 2))

In this case, the warning would be one of "undefined
function foo/1" or "undefined function bar/2", but they
are only "half truths". By showing all undefined function
warnings, we improve errors like above and it allows
users to see all undefined calls at once, when it would
otherwise require them to compile the code multiple times.
2019-12-03 10:33:59 +01:00
José Valim 6c0e49f0b7 Add examples to ambiguous op error message 2019-12-02 10:27:28 +01:00
Eksperimental 9d87fe434e Replace usage of "etc." (#9569) 2019-11-29 08:22:18 +01:00
José Valim 7bc73a3d18 Use infinity timeout in internal services 2019-11-27 11:17:09 +01:00
José Valim f6ef422f4c No need to cache home 2019-11-22 19:08:35 +01:00
Eksperimental 2121cbd086 Replace usage of "e.g." (#9571) 2019-11-22 11:26:23 +01:00
Eksperimental 98daa2def1 Use argument instead of arg in error messages (#9561) 2019-11-19 09:09:10 +01:00
José Valim 2b05b8dcf3 Use version metadata in Erlang pass 2019-11-16 02:45:55 +01:00
Eric Meadows-Jönsson b3e48bc1cb Track variable version globally (#9536)
Instead of incrementing the version for each variable individually we increment it globally for all variables. This means we can uniquely identify each variable assignment with only the version.
2019-11-15 17:18:39 +01:00
José Valim d18f707dc9 Add patterns information to guards page 2019-11-14 12:33:53 +01:00
Eric Meadows-Jönsson 1e4e05ef78 Change Bitwise macros to rewrites 2019-11-14 00:16:01 +01:00
Eric Meadows-Jönsson 5cfaf11478 Add reverse rewrite and inline rules 2019-11-14 00:16:01 +01:00
Eric Meadows-Jönsson 095a3cc3bd Move unification to Infer module 2019-11-13 16:42:25 +01:00
Eric Meadows-Jönsson 45f29d226f Split Infer into Expr and Pattern modules 2019-11-13 16:42:25 +01:00
Eric Meadows-Jönsson a58b74d1ac Add variable version to expanded meta (#9520) 2019-11-13 12:57:21 +01:00
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