Home » Docs » aeso_compiler

aeso_compiler

Module

aeso_compiler

The Sophia compiler

Description

This module provides the interface to the standard Sophia compiler. It
returns the compiled module in a map which can then be loaded.

Types

contract_string() = string() | binary()
contract_map() = #{bytecode => binary(),
                   compiler_version => binary(),
                   contract_souce => string(),
                   type_info => type_info()}
type_info()
errorstring() = binary()

Exports

file(File)

file(File, Options) -> CompRet

from_string(ContractString, Options) -> CompRet

Types

ContractString = contract_string()
Options = [Option]
CompRet = {ok,ContractMap} | {error,ErrorString}
ContractMap = contract_map()
ErrorString = errorstring()

Compile a contract defined in a file or in a string.

The pp_ options all print to standard output the following:

pp_sophia_code – print the input Sophia code.

pp_ast – print the AST of the code

pp_types – print information about the types

pp_typed_ast – print the AST with type information at each node

pp_assembler – print the generated assembler code

The option include_child_contract_symbols includes the symbols of child contracts functions in the generated fate code. It is turned off by default to avoid making contracts bigger on chain.

Options to control which compiler optimizations should run:

By default all optimizations are turned on, to disable an optimization, it should be
explicitly set to false and passed as a compiler option.

List of optimizations:

  • optimize_inliner
  • optimize_inline_local_functions
  • optimize_bind_subexpressions
  • optimize_let_floating
  • optimize_simplifier
  • optimize_drop_unused_lets
  • optimize_push_consume
  • optimize_one_shot_var
  • optimize_write_to_dead_var
  • optimize_inline_switch_target
  • optimize_swap_push
  • optimize_swap_pop
  • optimize_swap_write
  • optimize_constant_propagation
  • optimize_prune_impossible_branches
  • optimize_single_successful_branch
  • optimize_inline_store
  • optimize_float_switch_bod

check_call(ContractString, Options) -> CheckRet

Types

ContractString = string() | binary()
CheckRet = {ok,string(),{Types,Type | any()},Terms} | {error,Term}
Types = [Type]
Type = term()

Check a call in contract through the __call function.

version() -> {ok, Version} | {error, term()}

Types

Version = binary()

Get the current version of the Sophia compiler.