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
    • Supports defined() and __has_include()
  • ///#ifdef
  • ///#ifndef
  • ///#else
  • ///#elif
  • ///#endif

Misc Directives

  • ///#include
  • ///#include_next
  • ///#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

Both ///#pragma arg, _Pragma(arg), and __pragma(arg) are supported. 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), line(+123), and line(-123) all act different
  • ///#pragma mtsc eval(arg)
    • Experimental and not yet documented

Macros

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

  • __LINE__

  • __FILE__

  • __BASE_FILE__

  • __DATE__

  • __TIME__

  • __INCLUDE_LEVEL__

  • __MTSC_VERSION__

  • __NEWLINE__

Clone this wiki locally