class ObjectReaderImplJSONP
        implements ObjectReader {
    private final Class objectClass;

    public ObjectReaderImplJSONP(Class objectClass) {
        this.objectClass = objectClass;
    }

    @Override
    public Object readObject(JSONReader jsonReader, Type fieldType, Object fieldName, long features) {<FILL_FUNCTION_BODY>}
}

        String funcName = jsonReader.readFieldNameUnquote();

        if (jsonReader.nextIfMatch('.')) {
            String name2 = jsonReader.readFieldNameUnquote();
            funcName += '.' + name2;
        }

        char ch = jsonReader.current();
        if (ch == '/') {
            if (jsonReader.nextIfMatchIdent('/', '*', '*', '/')) {
                ch = jsonReader.current();
            }
        }

        if (ch != '(') {
            throw new JSONException(jsonReader.info("illegal jsonp input"));
        }
        jsonReader.next();

        JSONPObject jsonp;
        if (objectClass == JSONObject.class) {
            jsonp = new JSONPObject(funcName);
        } else {
            try {
                jsonp = (JSONPObject) objectClass.newInstance();
            } catch (InstantiationException | IllegalAccessException e) {
                throw new JSONException("create jsonp instance error", e);
            }
            jsonp.setFunction(funcName);
        }

        for (;;) {
            if (jsonReader.isEnd()) {
                throw new JSONException(jsonReader.info("illegal jsonp input"));
            }
            if (jsonReader.nextIfMatch(')')) {
                break;
            }
            Object param = jsonReader.readAny();
            jsonp.addParameter(param);
        }

        jsonReader.nextIfMatch(';');
        jsonReader.nextIfMatchIdent('/', '*', '*', '/');

        return jsonp;
    
<no_super_class>