diff options
| author | Colin Percival <cperciva@FreeBSD.org> | 2017-12-31 09:23:19 +0000 |
|---|---|---|
| committer | Colin Percival <cperciva@FreeBSD.org> | 2017-12-31 09:23:19 +0000 |
| commit | a21a2da5995538bf8d02f31aa77ac1ccc00f0b24 (patch) | |
| tree | 94663108f9b639ec5c92adfaa8ad9cfb8aab8217 /sys/tools | |
| parent | 95e678f96e8df33773582f7e43f8e3a9a86a8d11 (diff) | |
Notes
Diffstat (limited to 'sys/tools')
| -rw-r--r-- | sys/tools/makeobjops.awk | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/sys/tools/makeobjops.awk b/sys/tools/makeobjops.awk index 367354148a3e1..225e48d43497d 100644 --- a/sys/tools/makeobjops.awk +++ b/sys/tools/makeobjops.awk @@ -326,11 +326,19 @@ function handle_method (static, doc) } printh("{"); printh("\tkobjop_t _m;"); + if (ret != "void") + printh("\t" ret " rc;"); if (!static) firstvar = "((kobj_t)" firstvar ")"; + if (prolog != "") + printh(prolog); printh("\tKOBJOPLOOKUP(" firstvar "->ops," mname ");"); - retrn = (ret != "void") ? "return " : ""; - printh("\t" retrn "((" mname "_t *) _m)(" varname_list ");"); + rceq = (ret != "void") ? "rc = " : ""; + printh("\t" rceq "((" mname "_t *) _m)(" varname_list ");"); + if (epilog != "") + printh(epilog); + if (ret != "void") + printh("\treturn (rc);"); printh("}\n"); } @@ -440,6 +448,8 @@ for (file_i = 0; file_i < num_files; file_i++) { lineno = 0; error = 0; # to signal clean up and gerror setting lastdoc = ""; + prolog = ""; + epilog = ""; while (!error && (getline < src) > 0) { lineno++; @@ -473,10 +483,18 @@ for (file_i = 0; file_i < num_files; file_i++) { else if (/^METHOD/) { handle_method(0, lastdoc); lastdoc = ""; + prolog = ""; + epilog = ""; } else if (/^STATICMETHOD/) { handle_method(1, lastdoc); lastdoc = ""; - } else { + prolog = ""; + epilog = ""; + } else if (/^PROLOG[ ]*{$/) + prolog = handle_code(); + else if (/^EPILOG[ ]*{$/) + epilog = handle_code(); + else { debug($0); warnsrc("Invalid line encountered"); error = 1; |
