Directives

There is no preprocessor for Jai; directives are just part of the language. 1

See the following entries in the reference for more details:

  • #assert - generate compiler error with <message> when <expression> evaluates to false

  • #bake - generate a compiled function with predefined values for type variables

  • #bake_values - provide specific values to a function at compile time

  • #body_text - provide a procedure to generate source for the body of a polymorphic procedure

  • #check_call - run a provided checking function whenever the named function is called

  • #file - evaluate to the name of the current source file

  • #filepath - evaluate to the path of the currently compiling source file

  • #foreign - instruct compiler to link against a foreign library.

  • #foreign_library - provide a library for the compiler to link against for procedures marked with #foreign directive.

  • #generate - #FIXME find source definition

  • #import - bring a library file into scope

  • #line - evaluate to the line number of the current statement

  • #load - bring a source code file into scope

  • #modify - provide a function to manipulate a type variable prior to it being used in a polymorphic procedure

  • #must - ensure caller receives return values marked with #must

  • #no_inline - prevent inlining of <function_name>

  • #run - execute <code> at compile time (not run time)

  • #running_at_compile_time - evaluate to true if execution is occuring during compile time


  1. directives are part of the language; there is no preprocessor system.
    “Demo: Base language, compile-time execution.” YouTube, uploaded by Jonathan Blow, Oct 31, 2014, https://youtu.be/UTqZNujQOlA?t=4058 

jailang 2019 pixeldroid
https://github.com/pixeldroid/jailang
programming pages theme v0.5.21 (https://github.com/pixeldroid/programming-pages)