+ if optargs <> [] then (
+ pr "\n";
+ pr " /* Unpack optional args. */\n";
+ pr " Object _optobj;\n";
+ pr " long _optargs_bitmask = 0;\n";
+ iteri (
+ fun i argt ->
+ let t, boxed_t, convert, n, default =
+ match argt with
+ | Bool n -> "boolean", "Boolean", ".booleanValue()", n, "false"
+ | Int n -> "int", "Integer", ".intValue()", n, "0"
+ | Int64 n -> "long", "Long", ".longValue()", n, "0"
+ | String n -> "String", "String", "", n, "\"\""
+ | _ -> assert false in
+ pr " %s %s = %s;\n" t n default;
+ pr " _optobj = null;\n";
+ pr " if (optargs != null)\n";
+ pr " _optobj = optargs.get (\"%s\");\n" n;
+ pr " if (_optobj != null) {\n";
+ pr " %s = ((%s) _optobj)%s;\n" n boxed_t convert;
+ pr " _optargs_bitmask |= %Ld;\n"
+ (Int64.shift_left Int64.one i);
+ pr " }\n";
+ ) optargs
+ );
+ pr "\n";