diff options
author | John Hodge <tpg@mutabah.net> | 2018-02-18 12:14:06 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2018-02-18 12:14:06 +0800 |
commit | 08ab5d99ed8b7622440a8a33fed4a2475e5e714d (patch) | |
tree | 3be7fe35b4c1a803764e0e0fb85fb16c576f8aaf /tools/standalone_miri/module_tree.cpp | |
parent | 954314365e4683317d2049a8cd76d5d75e9f4033 (diff) | |
download | mrust-08ab5d99ed8b7622440a8a33fed4a2475e5e714d.tar.gz |
Standalone MIRI (and mmir codegen) - Support external functions
Diffstat (limited to 'tools/standalone_miri/module_tree.cpp')
-rw-r--r-- | tools/standalone_miri/module_tree.cpp | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/tools/standalone_miri/module_tree.cpp b/tools/standalone_miri/module_tree.cpp index 321eaad9..a457db8e 100644 --- a/tools/standalone_miri/module_tree.cpp +++ b/tools/standalone_miri/module_tree.cpp @@ -91,10 +91,24 @@ bool Parser::parse_one() { rv_ty = parse_type(); } - auto body = parse_body(); + + if( lex.consume_if('=') ) + { + auto link_name = ::std::move(lex.check_consume(TokenClass::String).strval); + lex.check_consume(':'); + auto abi = ::std::move(lex.check_consume(TokenClass::String).strval); + lex.check_consume(';'); - auto p2 = p; - tree.functions.insert( ::std::make_pair(::std::move(p), Function { ::std::move(p2), ::std::move(arg_tys), rv_ty, ::std::move(body) }) ); + auto p2 = p; + tree.functions.insert( ::std::make_pair(::std::move(p), Function { ::std::move(p2), ::std::move(arg_tys), rv_ty, {link_name, abi}, {} }) ); + } + else + { + auto body = parse_body(); + + auto p2 = p; + tree.functions.insert( ::std::make_pair(::std::move(p), Function { ::std::move(p2), ::std::move(arg_tys), rv_ty, {}, ::std::move(body) }) ); + } } else if( lex.consume_if("static") ) { |