Skip to content

Preprocessor

Trin Wasinger edited this page Apr 6, 2024 · 9 revisions

Preprocessing Files

MTSC includes a heavily modified C/C++ preprocessor based on Boost Wave. For compatibility, it is gated behind the -p/--preprocessor CLI flag. Since #abc is already valid JavaScript for ES6 private class fields, MTSC instead looks for preprocessor directives within single-line triple-slash comments (e.g. ///#define ...).

Directives

Unless otherwise stated, the following directives behave like their C/C++ counterparts.

Macro Directives

  • ///#define
    • Variadics and placemarkers are supported
  • ///#undef

Control Directives

  • ///#if
  • ///#ifdef
  • ///#ifndef
  • ///#else
  • ///#elif
  • ///#endif

Misc Directives

  • ///#error
  • ///#warning
  • ///#line
  • ///#pragma
  • ///#embed
    • Only supports the ///#embed "path/to/file..." form
    • The byte contents of the relative file are inserted as comma separated hex literals

Pragmas

Unless otherwise stated, the following pragmas behave like their C/C++ counterparts.

Common Pragmas

  • ///#pragma once
  • ///#pragma region
    • Accepted, but does nothing
  • ///#pragma endregion
    • Accepted, but does nothing

MTSC Specific Pragmas

  • ///#pragma mtsc line(arg)
    • Acts as an extended form of ///#line
    • If arg starts with a + or -, the current line number is shifted down or up respectively by the number of lines following the sign
    • If arg has no sign, this sets the current line number to the value of arg
    • Because of this, line(123) and line(+123) are not equivilant
  • ///#pragma mtsc eval(arg)

Macros

Clone this wiki locally