Java 类com.alibaba.fastjson.parser.JSONLexerBase 实例源码

项目:GitHub    文件:JavaBeanDeserializer.java   
protected Enum scanEnum(JSONLexerBase lexer, char[] name_chars, ObjectDeserializer fieldValueDeserilizer) {
    EnumDeserializer enumDeserializer = null;
    if (fieldValueDeserilizer instanceof EnumDeserializer) {
        enumDeserializer = (EnumDeserializer) fieldValueDeserilizer;
    }

    if (enumDeserializer == null) {
        lexer.matchStat = JSONLexer.NOT_MATCH;
        return null;
    }

    long enumNameHashCode = lexer.scanFieldSymbol(name_chars);
    if (lexer.matchStat > 0) {
        return enumDeserializer.getEnumByHashCode(enumNameHashCode);
    } else {
        return null;
    }
}
项目:GitHub    文件:ASMDeserializerFactory.java   
private void _deserialize_endCheck(Context context, MethodVisitor mw, Label reset_) {
    mw.visitIntInsn(ILOAD, context.var("matchedCount"));
    mw.visitJumpInsn(IFLE, reset_);

    mw.visitVarInsn(ALOAD, context.var("lexer"));
    mw.visitMethodInsn(INVOKEVIRTUAL, JSONLexerBase, "token", "()I");
    mw.visitLdcInsn(JSONToken.RBRACE);
    mw.visitJumpInsn(IF_ICMPNE, reset_);

    // mw.visitLabel(nextToken_);
    _quickNextTokenComma(context, mw);
}
项目:GitHub    文件:ASMDeserializerFactory.java   
private void _quickNextToken(Context context, MethodVisitor mw, int token) {
    Label quickElse_ = new Label(), quickEnd_ = new Label();
    mw.visitVarInsn(ALOAD, context.var("lexer"));
    mw.visitMethodInsn(INVOKEVIRTUAL, JSONLexerBase, "getCurrent", "()C");
    if (token == JSONToken.LBRACE) {
        mw.visitVarInsn(BIPUSH, '{');
    } else if (token == JSONToken.LBRACKET) {
        mw.visitVarInsn(BIPUSH, '[');
    } else {
        throw new IllegalStateException();
    }

    mw.visitJumpInsn(IF_ICMPNE, quickElse_);

    mw.visitVarInsn(ALOAD, context.var("lexer"));
    mw.visitMethodInsn(INVOKEVIRTUAL, JSONLexerBase, "next", "()C");
    mw.visitInsn(POP);
    mw.visitVarInsn(ALOAD, context.var("lexer"));
    mw.visitLdcInsn(token);
    mw.visitMethodInsn(INVOKEVIRTUAL, JSONLexerBase, "setToken", "(I)V");
    mw.visitJumpInsn(GOTO, quickEnd_);

    mw.visitLabel(quickElse_);
    mw.visitVarInsn(ALOAD, context.var("lexer"));
    mw.visitLdcInsn(token);
    mw.visitMethodInsn(INVOKEVIRTUAL, JSONLexerBase, "nextToken", "(I)V");

    mw.visitLabel(quickEnd_);
}
项目:itmarry    文件:ASMDeserializerFactory.java   
private void _deserialize_endCheck(Context context, MethodVisitor mw, Label reset_) {
    Label _end_if = new Label();
    // Label nextToken_ = new Label();

    // mw.visitFieldInsn(GETSTATIC, getType(System.class), "out", "Ljava/io/PrintStream;");
    // mw.visitIntInsn(ILOAD, context.var("matchedCount"));
    // mw.visitMethodInsn(INVOKEVIRTUAL, getType(java.io.PrintStream.class), "println", "(I)V");

    mw.visitIntInsn(ILOAD, context.var("matchedCount"));
    mw.visitJumpInsn(IFLE, reset_);

    // mw.visitFieldInsn(GETSTATIC, getType(System.class), "out", "Ljava/io/PrintStream;");
    // mw.visitVarInsn(ALOAD, context.var("lexer"));
    // mw.visitMethodInsn(INVOKEVIRTUAL, getType(JSONLexerBase.class), "token", "()I");
    // mw.visitMethodInsn(INVOKEVIRTUAL, getType(java.io.PrintStream.class), "println", "(I)V");

    mw.visitVarInsn(ALOAD, context.var("lexer"));
    mw.visitMethodInsn(INVOKEVIRTUAL, getType(JSONLexerBase.class), "token", "()I");
    mw.visitFieldInsn(GETSTATIC, getType(JSONToken.class), "RBRACE", "I");
    mw.visitJumpInsn(IF_ICMPNE, reset_);

    // mw.visitLabel(nextToken_);
    mw.visitVarInsn(ALOAD, context.var("lexer"));
    mw.visitFieldInsn(GETSTATIC, getType(JSONToken.class), "COMMA", "I");
    mw.visitMethodInsn(INVOKEVIRTUAL, getType(JSONLexerBase.class), "nextToken", "(I)V");

    mw.visitLabel(_end_if);
}
项目:GitHub    文件:JavaBeanDeserializer.java   
@SuppressWarnings({ "unchecked", "rawtypes" })
    protected static void parseArray(Collection collection, //
                              ObjectDeserializer deser, //
                              DefaultJSONParser parser, //
                              Type type, //
                              Object fieldName) {

        final JSONLexerBase lexer = (JSONLexerBase) parser.lexer;
        int token = lexer.token();
        if (token == JSONToken.NULL) {
            lexer.nextToken(JSONToken.COMMA);
            token = lexer.token();
            return;
        }

        if (token != JSONToken.LBRACKET) {
            parser.throwException(token);
        }
        char ch = lexer.getCurrent();
        if (ch == '[') {
            lexer.next();
            lexer.setToken(JSONToken.LBRACKET);
        } else {
            lexer.nextToken(JSONToken.LBRACKET);
        }

        if (lexer.token() == JSONToken.RBRACKET) {
            lexer.nextToken();
            return;
        }

        int index = 0;
        for (;;) {
            Object item = deser.deserialze(parser, type, index);
            collection.add(item);
            index++;
            if (lexer.token() == JSONToken.COMMA) {
                ch = lexer.getCurrent();
                if (ch == '[') {
                    lexer.next();
                    lexer.setToken(JSONToken.LBRACKET);
                } else {
                    lexer.nextToken(JSONToken.LBRACKET);
                }
            } else {
                break;
            }
        }

        token = lexer.token();
        if (token != JSONToken.RBRACKET) {
            parser.throwException(token);
        }

        ch = lexer.getCurrent();
        if (ch == ',') {
            lexer.next();
            lexer.setToken(JSONToken.COMMA);
        } else {
            lexer.nextToken(JSONToken.COMMA);
        }
//        parser.accept(JSONToken.RBRACKET, JSONToken.COMMA);
    }
项目:GitHub    文件:ASMDeserializerFactory.java   
private void defineVarLexer(Context context, MethodVisitor mw) {
    mw.visitVarInsn(ALOAD, 1);
    mw.visitFieldInsn(GETFIELD, DefaultJSONParser, "lexer", desc(JSONLexer.class));
    mw.visitTypeInsn(CHECKCAST, JSONLexerBase); // cast
    mw.visitVarInsn(ASTORE, context.var("lexer"));
}
项目:GitHub    文件:ASMDeserializerFactory.java   
private void _quickNextTokenComma(Context context, MethodVisitor mw) {
    Label quickElse_ = new Label(), quickElseIf0_ = new Label(), quickElseIf1_ = new Label(), quickElseIf2_ = new Label(), quickEnd_ = new Label();
    mw.visitVarInsn(ALOAD, context.var("lexer"));
    mw.visitMethodInsn(INVOKEVIRTUAL, JSONLexerBase, "getCurrent", "()C");
    mw.visitInsn(DUP);
    mw.visitVarInsn(ISTORE, context.var("ch"));
    mw.visitVarInsn(BIPUSH, ',');
    mw.visitJumpInsn(IF_ICMPNE, quickElseIf0_);

    mw.visitVarInsn(ALOAD, context.var("lexer"));
    mw.visitMethodInsn(INVOKEVIRTUAL, JSONLexerBase, "next", "()C");
    mw.visitInsn(POP);
    mw.visitVarInsn(ALOAD, context.var("lexer"));
    mw.visitLdcInsn(JSONToken.COMMA);
    mw.visitMethodInsn(INVOKEVIRTUAL, JSONLexerBase, "setToken", "(I)V");
    mw.visitJumpInsn(GOTO, quickEnd_);

    mw.visitLabel(quickElseIf0_);
    mw.visitVarInsn(ILOAD, context.var("ch"));
    mw.visitVarInsn(BIPUSH, '}');
    mw.visitJumpInsn(IF_ICMPNE, quickElseIf1_);

    mw.visitVarInsn(ALOAD, context.var("lexer"));
    mw.visitMethodInsn(INVOKEVIRTUAL, JSONLexerBase, "next", "()C");
    mw.visitInsn(POP);
    mw.visitVarInsn(ALOAD, context.var("lexer"));
    mw.visitLdcInsn(JSONToken.RBRACE);
    mw.visitMethodInsn(INVOKEVIRTUAL, JSONLexerBase, "setToken", "(I)V");
    mw.visitJumpInsn(GOTO, quickEnd_);

    mw.visitLabel(quickElseIf1_);
    mw.visitVarInsn(ILOAD, context.var("ch"));
    mw.visitVarInsn(BIPUSH, ']');
    mw.visitJumpInsn(IF_ICMPNE, quickElseIf2_);

    mw.visitVarInsn(ALOAD, context.var("lexer"));
    mw.visitMethodInsn(INVOKEVIRTUAL, JSONLexerBase, "next", "()C");
    mw.visitInsn(POP);
    mw.visitVarInsn(ALOAD, context.var("lexer"));
    mw.visitLdcInsn(JSONToken.RBRACKET);
    mw.visitMethodInsn(INVOKEVIRTUAL, JSONLexerBase, "setToken", "(I)V");
    mw.visitJumpInsn(GOTO, quickEnd_);

    mw.visitLabel(quickElseIf2_);
    mw.visitVarInsn(ILOAD, context.var("ch"));
    mw.visitVarInsn(BIPUSH, JSONLexer.EOI);
    mw.visitJumpInsn(IF_ICMPNE, quickElse_);

    mw.visitVarInsn(ALOAD, context.var("lexer"));
    mw.visitLdcInsn(JSONToken.EOF);
    mw.visitMethodInsn(INVOKEVIRTUAL, JSONLexerBase, "setToken", "(I)V");
    mw.visitJumpInsn(GOTO, quickEnd_);

    mw.visitLabel(quickElse_);
    mw.visitVarInsn(ALOAD, context.var("lexer"));
    mw.visitMethodInsn(INVOKEVIRTUAL, JSONLexerBase, "nextToken", "()V");

    mw.visitLabel(quickEnd_);
}
项目:GitHub    文件:ASMDeserializerFactory.java   
private void _deserialze_obj(Context context, MethodVisitor mw, Label reset_, FieldInfo fieldInfo,
                             Class<?> fieldClass, int i) {
    Label matched_ = new Label();
    Label _end_if = new Label();

    mw.visitVarInsn(ALOAD, context.var("lexer"));
    mw.visitVarInsn(ALOAD, 0);
    mw.visitFieldInsn(GETFIELD, context.className, fieldInfo.name + "_asm_prefix__", "[C");
    mw.visitMethodInsn(INVOKEVIRTUAL, JSONLexerBase, "matchField", "([C)Z");
    mw.visitJumpInsn(IFNE, matched_);
    mw.visitInsn(ACONST_NULL);
    mw.visitVarInsn(ASTORE, context.var(fieldInfo.name + "_asm"));

    mw.visitJumpInsn(GOTO, _end_if);

    mw.visitLabel(matched_);

    _setFlag(mw, context, i);

    // increment matchedCount
    mw.visitVarInsn(ILOAD, context.var("matchedCount"));
    mw.visitInsn(ICONST_1);
    mw.visitInsn(IADD);
    mw.visitVarInsn(ISTORE, context.var("matchedCount"));

    _deserObject(context, mw, fieldInfo, fieldClass, i);

    mw.visitVarInsn(ALOAD, 1);
    mw.visitMethodInsn(INVOKEVIRTUAL, DefaultJSONParser, "getResolveStatus", "()I");
    mw.visitLdcInsn(com.alibaba.fastjson.parser.DefaultJSONParser.NeedToResolve);
    mw.visitJumpInsn(IF_ICMPNE, _end_if);

    mw.visitVarInsn(ALOAD, 1);
    mw.visitMethodInsn(INVOKEVIRTUAL, DefaultJSONParser, "getLastResolveTask", "()" + desc(ResolveTask.class));
    mw.visitVarInsn(ASTORE, context.var("resolveTask"));

    mw.visitVarInsn(ALOAD, context.var("resolveTask"));
    mw.visitVarInsn(ALOAD, 1);
    mw.visitMethodInsn(INVOKEVIRTUAL, DefaultJSONParser, "getContext", "()" + desc(ParseContext.class));
    mw.visitFieldInsn(PUTFIELD, type(ResolveTask.class), "ownerContext", desc(ParseContext.class));

    mw.visitVarInsn(ALOAD, context.var("resolveTask"));
    mw.visitVarInsn(ALOAD, 0);
    mw.visitLdcInsn(fieldInfo.name);
    mw.visitMethodInsn(INVOKEVIRTUAL, type(JavaBeanDeserializer.class), "getFieldDeserializer",
                       "(Ljava/lang/String;)" + desc(FieldDeserializer.class));
    mw.visitFieldInsn(PUTFIELD, type(ResolveTask.class), "fieldDeserializer", desc(FieldDeserializer.class));

    mw.visitVarInsn(ALOAD, 1);
    mw.visitLdcInsn(com.alibaba.fastjson.parser.DefaultJSONParser.NONE);
    mw.visitMethodInsn(INVOKEVIRTUAL, DefaultJSONParser, "setResolveStatus", "(I)V");

    mw.visitLabel(_end_if);

}
项目:JsonSurfer    文件:FastJsonParser.java   
public FastJsonResumableParser(JSONLexerBase lexer, SurfingContext context, StaticPrimitiveHolder staticPrimitiveHolder) {
    this.lexer = lexer;
    this.context = context;
    this.staticPrimitiveHolder = staticPrimitiveHolder;
}
项目:itmarry    文件:ASMDeserializerFactory.java   
private void _isEnable(Context context, MethodVisitor mw, Feature feature) {
    mw.visitVarInsn(ALOAD, context.var("lexer"));
    mw.visitFieldInsn(GETSTATIC, getType(Feature.class), feature.name(), "L" + getType(Feature.class) + ";");
    mw.visitMethodInsn(INVOKEVIRTUAL, getType(JSONLexerBase.class), "isEnabled", "(" + "L" + getType(Feature.class)
                                                                                 + ";" + ")Z");
}
项目:itmarry    文件:ASMDeserializerFactory.java   
private void defineVarLexer(Context context, MethodVisitor mw) {
    mw.visitVarInsn(ALOAD, 1);
    mw.visitMethodInsn(INVOKEVIRTUAL, getType(DefaultJSONParser.class), "getLexer", "()" + getDesc(JSONLexer.class));
    mw.visitTypeInsn(CHECKCAST, getType(JSONLexerBase.class)); // cast
    mw.visitVarInsn(ASTORE, context.var("lexer"));
}
项目:itmarry    文件:ASMDeserializerFactory.java   
private void _deserialze_obj(Context context, MethodVisitor mw, Label reset_, FieldInfo fieldInfo,
                             Class<?> fieldClass, int i) {
    Label matched_ = new Label();
    Label _end_if = new Label();

    mw.visitVarInsn(ALOAD, context.var("lexer"));
    mw.visitVarInsn(ALOAD, 0);
    mw.visitFieldInsn(GETFIELD, context.getClassName(), fieldInfo.getName() + "_asm_prefix__", "[C");
    mw.visitMethodInsn(INVOKEVIRTUAL, getType(JSONLexerBase.class), "matchField", "([C)Z");
    mw.visitJumpInsn(IFNE, matched_);
    mw.visitInsn(ACONST_NULL);
    mw.visitVarInsn(ASTORE, context.var(fieldInfo.getName() + "_asm"));

    mw.visitJumpInsn(GOTO, _end_if);

    mw.visitLabel(matched_);

    _setFlag(mw, context, i);

    // increment matchedCount
    mw.visitVarInsn(ILOAD, context.var("matchedCount"));
    mw.visitInsn(ICONST_1);
    mw.visitInsn(IADD);
    mw.visitVarInsn(ISTORE, context.var("matchedCount"));

    _deserObject(context, mw, fieldInfo, fieldClass);

    mw.visitVarInsn(ALOAD, 1);
    mw.visitMethodInsn(INVOKEVIRTUAL, getType(DefaultJSONParser.class), "getResolveStatus", "()I");
    mw.visitFieldInsn(GETSTATIC, getType(DefaultJSONParser.class), "NeedToResolve", "I");
    mw.visitJumpInsn(IF_ICMPNE, _end_if);

    // ResolveTask task = parser.getLastResolveTask();
    // task.setFieldDeserializer(this);
    // task.setOwnerContext(parser.getContext());

    mw.visitVarInsn(ALOAD, 1);
    mw.visitMethodInsn(INVOKEVIRTUAL, getType(DefaultJSONParser.class), "getLastResolveTask",
                       "()" + getDesc(ResolveTask.class));
    mw.visitVarInsn(ASTORE, context.var("resolveTask"));

    mw.visitVarInsn(ALOAD, context.var("resolveTask"));
    mw.visitVarInsn(ALOAD, 1);
    mw.visitMethodInsn(INVOKEVIRTUAL, getType(DefaultJSONParser.class), "getContext", "()"
                                                                                      + getDesc(ParseContext.class));
    mw.visitMethodInsn(INVOKEVIRTUAL, getType(ResolveTask.class), "setOwnerContext", "("
                                                                                     + getDesc(ParseContext.class)
                                                                                     + ")V");

    mw.visitVarInsn(ALOAD, context.var("resolveTask"));
    mw.visitVarInsn(ALOAD, 0);
    mw.visitLdcInsn(fieldInfo.getName());
    mw.visitMethodInsn(INVOKEVIRTUAL, getType(ASMJavaBeanDeserializer.class), "getFieldDeserializer",
                       "(Ljava/lang/String;)" + getDesc(FieldDeserializer.class));
    mw.visitMethodInsn(INVOKEVIRTUAL, getType(ResolveTask.class), "setFieldDeserializer",
                       "(" + getDesc(FieldDeserializer.class) + ")V");

    mw.visitVarInsn(ALOAD, 1);
    mw.visitFieldInsn(GETSTATIC, getType(DefaultJSONParser.class), "NONE", "I");
    mw.visitMethodInsn(INVOKEVIRTUAL, getType(DefaultJSONParser.class), "setResolveStatus", "(I)V");

    mw.visitLabel(_end_if);

}