| # This file should expose all possible meson syntaxes |
| # and ensure the AstInterpreter and RawPrinter are able |
| |
| # to parse and write a file identical to the original. |
| |
| project ( # project comment 1 |
| # project comment 2 |
| 'rewrite' , # argument comment |
| # project comment 3 |
| 'cpp', |
| 'c', |
| default_options: [ |
| 'unity=on', |
| 'unity_size=50', # number of cpp / unity. default is 4... |
| 'warning_level=2', # eqv to /W3 |
| 'werror=true', # treat warnings as errors |
| 'b_ndebug=if-release', # disable assert in Release |
| 'cpp_eh=a', # /EHa exception handling |
| 'cpp_std=c++17', |
| 'cpp_winlibs=' + ','.join([ # array comment |
| # in array |
| # comment |
| 'kernel32.lib', |
| 'user32.lib', |
| 'gdi32.lib', |
| 'winspool.lib', |
| 'comdlg32.lib', |
| 'advapi32.lib', |
| 'shell32.lib' |
| # before comma comment |
| , |
| # after comma comment |
| 'ole32.lib', |
| 'oleaut32.lib', |
| 'uuid.lib', |
| 'odbc32.lib', |
| 'odbccp32.lib', |
| 'Delayimp.lib', # For delay loaded dll |
| 'OLDNAMES.lib', |
| 'dbghelp.lib', |
| 'psapi.lib', |
| ]), |
| ], |
| meson_version: '>=1.2', |
| version: '1.0.0', |
| ) # project comment 4 |
| |
| cppcoro_dep = dependency('andreasbuhr-cppcoro-cppcoro') |
| cppcoro = declare_dependency( |
| dependencies: [cppcoro_dep.partial_dependency( |
| includes: true, |
| link_args: true, |
| links: true, |
| sources: true, |
| )], |
| # '/await:strict' allows to use <coroutine> rather than <experimental/coroutine> with C++17. |
| # We can remove '/await:strict' once we update to C++20. |
| compile_args: ['/await:strict'], |
| # includes:true doesn't work for now in partial_dependency() |
| # This line could be removed once https://github.com/mesonbuild/meson/pull/10122 is released. |
| include_directories: cppcoro_dep.get_variable('includedir1'), |
| ) |
| |
| |
| if get_option('unicode') #if comment |
| #if comment 2 |
| mfc=cpp_compiler.find_library(get_option('debug')?'mfc140ud':'mfc140u') |
| # if comment 3 |
| else#elsecommentnowhitespaces |
| # else comment 1 |
| mfc = cpp_compiler.find_library( get_option( 'debug' ) ? 'mfc140d' : 'mfc140') |
| # else comment 2 |
| endif #endif comment |
| |
| |
| assert(1 in [1, 2], '''1 should be in [1, 2]''') |
| assert(3 not in [1, 2], '''3 shouldn't be in [1, 2]''') |
| assert(not (3 in [1, 2]), '''3 shouldn't be in [1, 2]''') |
| |
| assert('b' in ['a', 'b'], ''''b' should be in ['a', 'b']''') |
| assert('c' not in ['a', 'b'], ''''c' shouldn't be in ['a', 'b']''') |
| |
| assert(exe1 in [exe1, exe2], ''''exe1 should be in [exe1, exe2]''') |
| assert(exe3 not in [exe1, exe2], ''''exe3 shouldn't be in [exe1, exe2]''') |
| |
| assert('a' in {'a': 'b'}, '''1 should be in {'a': 'b'}''') |
| assert('b'not in{'a':'b'}, '''1 should be in {'a': 'b'}''') |
| |
| assert('a'in'abc') |
| assert('b' not in 'def') |
| |
| |
| w = 'world' |
| d = {'a': 1, 'b': 0b10101010, 'c': 'pi', 'd': '''a |
| b |
| c''', 'e': f'hello @w@', 'f': f'''triple |
| formatted |
| string # this is not a comment |
| hello @w@ |
| ''', 'g': [1, 2, 3], |
| |
| 'h' # comment a |
| : # comment b |
| 0xDEADBEEF # comment c |
| , # comment d |
| 'hh': 0xfeedc0de, # lowercase hexa |
| 'hhh': 0XaBcD0123, # mixed case hexa |
| 'oo': 0O123456, # upper O octa |
| 'bb': 0B1111, # upper B binary |
| 'i': {'aa': 11, # this is a comment |
| 'bb': 22}, # a comment inside a dict |
| 'o': 0o754, |
| 'm': -12, # minus number |
| 'eq': 1 + 3 - 3 % 4 + -( 7 * 8 ), |
| } # end of dict comment |
| |
| hw = d['e'] |
| one = d['g'][0] |
| w += '!' |
| |
| |
| components = { |
| 'foo': ['foo.c'], |
| 'bar': ['bar.c'], |
| 'baz': ['baz.c'], # this line is indented with a tab! |
| } |
| |
| # compute a configuration based on system dependencies, custom logic |
| conf = configuration_data() |
| conf.set('USE_FOO', 1) |
| |
| # Determine the sources to compile |
| sources_to_compile = [] |
| foreach name, sources : components |
| if conf.get('USE_@0@'.format(name.to_upper()), 0) == 1 |
| sources_to_compile += sources |
| endif |
| endforeach |
| |
| |
| items = ['a', 'continue', 'b', 'break', 'c'] |
| result = [] |
| foreach i : items |
| if i == 'continue' |
| continue |
| elif i == 'break' |
| break |
| endif |
| result += i |
| endforeach |
| # result is ['a', 'b'] |
| |
| |
| |
| if a and b |
| # do something |
| endif |
| if c or d |
| # do something |
| endif |
| if not e |
| # do something |
| endif |
| if not (f or g) |
| # do something |
| endif |
| |
| single_quote = 'contains a \' character' |
| string_escapes = '\\\'\a\b\f\n\r\t\v\046\x26\u2D4d\U00002d4d\N{GREEK CAPITAL LETTER DELTA}' |
| no_string_escapes = '''\\\'\a\b\f\n\r\t\v\046\x26\u2D4d\U00002d4d\N{GREEK CAPITAL LETTER DELTA}''' |
| |
| # FIXME: is it supposed to work? (cont_eol inside string) |
| # cont_string = 'blablabla\ |
| # blablabla' |
| |
| # cont_eol with whitespace and comments after |
| if a \ # comment in cont 1 |
| and b \ # comment in cont 2 |
| or c # comment in cont 3 |
| message('ok') |
| endif |
| |
| if a \ |
| or b |
| debug('help!') |
| endif |
| |
| |
| # End of file comment with no linebreak |