Packages
orb
0.0.39
0.2.2
0.2.1
0.2.0
0.1.1
0.1.0
0.0.51
0.0.49
0.0.48
0.0.47
0.0.46
0.0.45
0.0.44
0.0.43
0.0.42
0.0.41
0.0.40
0.0.39
0.0.38
0.0.37
0.0.36
0.0.35
0.0.34
0.0.33
0.0.32
0.0.31
0.0.30
0.0.28
0.0.27
0.0.26
0.0.25
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
retired
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
DSL for WebAssembly
Current section
Files
Jump to
Current section
Files
lib/orb/compiler.ex
defmodule Orb.Compiler do
@moduledoc false
def run(mod, globals) do
global_types =
globals
|> List.flatten()
|> Map.new(fn global -> {global.name, global.type} end)
|> Map.merge(%{__MODULE__: mod})
Process.put({Orb, :global_types}, global_types)
Orb.Constants.__begin()
# Each global is expanded, possibly looking up with the current compiler context begun above.
global_definitions =
globals |> Enum.reverse() |> List.flatten() |> Enum.map(&Orb.Global.expand!/1)
body = Orb.ModuleDefinition.get_body_of(mod)
Process.delete({Orb, :global_types})
# We’re done. Get all the constant strings that were actually used.
constants = Orb.Constants.__read()
%{body: body, constants: constants, global_definitions: global_definitions}
after
Orb.Constants.__cleanup()
end
end