From 08ab5d99ed8b7622440a8a33fed4a2475e5e714d Mon Sep 17 00:00:00 2001 From: John Hodge Date: Sun, 18 Feb 2018 12:14:06 +0800 Subject: Standalone MIRI (and mmir codegen) - Support external functions --- tools/standalone_miri/module_tree.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'tools/standalone_miri/module_tree.cpp') 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") ) { -- cgit v1.2.3