Skip to content

Commit 3ba6f9d

Browse files
committed
Small cleanup for #20.
Signed-off-by: Gerd Zellweger <[email protected]>
1 parent 22c0708 commit 3ba6f9d

File tree

2 files changed

+18
-18
lines changed

2 files changed

+18
-18
lines changed

test_macros/src/lib.rs

+17-17
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#![feature(rustc_private, proc_macro)]
12
///! This implements the kvmargs macro to customize the execution of KVM based tests.
23
///!
34
///! One problem we have to solve here is that we need to store additional data
@@ -15,8 +16,6 @@
1516
///! Obviously, this is a bit of a mess right now, my hope is that such things become
1617
///! easier with better custom test harness support.
1718
///!
18-
#![feature(rustc_private, proc_macro)]
19-
2019
extern crate proc_macro;
2120
extern crate syn;
2221
#[macro_use]
@@ -44,7 +43,7 @@ fn generate_kvmtest_meta_data(test_ident: &syn::Ident) -> (syn::Ident, quote::To
4443
extern crate test;
4544
use self::test::KvmTestMetaData;
4645
#[link_section = ".kvm"]
47-
#[used]
46+
#[allow(non_upper_case_globals)]
4847
static #struct_ident: KvmTestMetaData = KvmTestMetaData { mbz: 0, meta: "test" };
4948

5049
/// The generated impl
@@ -63,37 +62,38 @@ fn generate_kvmtest_meta_data(test_ident: &syn::Ident) -> (syn::Ident, quote::To
6362
/// but I'm not sure how to do that in rust...
6463
fn insert_meta_data_reference(struct_ident: &syn::Ident, test_block: &mut syn::Block) {
6564
let stmt_string = format!("assert!({}.mbz == 0);", struct_ident);
66-
6765
let stmt = match syn::parse::stmt(stmt_string.as_str()) {
6866
IResult::Done(stmt_str, stmt) => stmt,
69-
IResult::Error => panic!("Unable to generate reference to meta data"),
67+
IResult::Error => panic!("Unable to generate reference to meta-data"),
7068
};
71-
7269
test_block.stmts.insert(0, stmt);
7370
}
7471

7572

7673
#[proc_macro_attribute]
7774
pub fn kvmattrs(args: TokenStream, input: TokenStream) -> TokenStream {
78-
let args = args.to_string();
75+
let args_str = args.to_string();
76+
println!("{}", args);
7977
let mut input = input.to_string();
8078
let mut ast = syn::parse_item(&input).unwrap();
8179
let ident = ast.ident.clone();
80+
81+
// Generate meta-data struct
8282
let (meta_data_ident, new_code) = generate_kvmtest_meta_data(&ident);
8383

84-
{
85-
match &mut ast.node {
86-
&mut syn::ItemKind::Fn(_, _, _, _, _, ref mut block) => {
87-
let mod_test_code = insert_meta_data_reference(&meta_data_ident, block);
88-
println!("{:#?}", block);
89-
}
90-
_ => panic!("Not a function!"),
91-
};
92-
}
84+
// Insert reference to meta-data in test
85+
match &mut ast.node {
86+
&mut syn::ItemKind::Fn(_, _, _, _, _, ref mut block) => {
87+
insert_meta_data_reference(&meta_data_ident, block);
88+
}
89+
_ => panic!("Not a function!"),
90+
};
91+
92+
// Merge everything together:
9393
let mut token = quote::Tokens::new();
9494
ast.to_tokens(&mut token);
9595
token.append(new_code);
9696

97-
//input += new_code.to_string().as_str();
97+
// Output this as replacement code for the test function
9898
token.to_string().parse().unwrap()
9999
}

tests/kvm/bin.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use x86::shared::control_regs::*;
2121
use x86::shared::paging::*;
2222
use x86::bits64::paging::*;
2323

24-
#[kvmattrs(identity_map)]
24+
#[kvmattrs(identity_map, ram(0x30000000, 0x31000000))]
2525
fn use_the_port() {
2626
log!("1");
2727
unsafe {

0 commit comments

Comments
 (0)