Java源码示例:com.sun.tools.javac.jvm.Pool
示例1
Object getValue(Symtab syms, Names names, Types types) {
switch (this) {
case STRING:
case INTEGER:
case LONG:
case FLOAT:
case DOUBLE:
return value;
case CLASS:
return syms.stringType.tsym;
case METHOD_HANDLE:
return new Pool.MethodHandle(REF_invokeVirtual,
syms.arrayCloneMethod, types);
case METHOD_TYPE:
return syms.arrayCloneMethod.type;
default:
throw new AssertionError();
}
}
示例2
Object getValue(Symtab syms, Names names, Types types) {
switch (this) {
case STRING:
case INTEGER:
case LONG:
case FLOAT:
case DOUBLE:
return value;
case CLASS:
return syms.stringType.tsym;
case METHOD_HANDLE:
return new Pool.MethodHandle(REF_invokeVirtual,
syms.arrayCloneMethod, types);
case METHOD_TYPE:
return syms.arrayCloneMethod.type;
default:
throw new AssertionError();
}
}
示例3
Object getValue(Symtab syms, Names names, Types types) {
switch (this) {
case STRING:
case INTEGER:
case LONG:
case FLOAT:
case DOUBLE:
return value;
case CLASS:
return syms.stringType.tsym;
case METHOD_HANDLE:
return new Pool.MethodHandle(REF_invokeVirtual,
syms.arrayCloneMethod, types);
case METHOD_TYPE:
return syms.arrayCloneMethod.type;
default:
throw new AssertionError();
}
}
示例4
private Type bsmStaticArgToType(Object arg) {
Assert.checkNonNull(arg);
if (arg instanceof ClassSymbol) {
return syms.classType;
} else if (arg instanceof Integer) {
return syms.intType;
} else if (arg instanceof Long) {
return syms.longType;
} else if (arg instanceof Float) {
return syms.floatType;
} else if (arg instanceof Double) {
return syms.doubleType;
} else if (arg instanceof String) {
return syms.stringType;
} else if (arg instanceof Pool.MethodHandle) {
return syms.methodHandleType;
} else if (arg instanceof MethodType) {
return syms.methodTypeType;
} else {
Assert.error("bad static arg " + arg.getClass());
return null;
}
}
示例5
Object getValue(Symtab syms, Names names, Types types) {
switch (this) {
case STRING:
case INTEGER:
case LONG:
case FLOAT:
case DOUBLE:
return value;
case CLASS:
return syms.stringType.tsym;
case METHOD_HANDLE:
return new Pool.MethodHandle(REF_invokeVirtual,
syms.arrayCloneMethod, types);
case METHOD_TYPE:
return syms.arrayCloneMethod.type;
default:
throw new AssertionError();
}
}
示例6
Object getValue(Symtab syms, Names names, Types types) {
switch (this) {
case STRING:
case INTEGER:
case LONG:
case FLOAT:
case DOUBLE:
return value;
case CLASS:
return syms.stringType.tsym;
case METHOD_HANDLE:
return new Pool.MethodHandle(REF_invokeVirtual,
syms.arrayCloneMethod, types);
case METHOD_TYPE:
return syms.arrayCloneMethod.type;
default:
throw new AssertionError();
}
}
示例7
Object getValue(Symtab syms, Names names, Types types) {
switch (this) {
case STRING:
case INTEGER:
case LONG:
case FLOAT:
case DOUBLE:
return value;
case CLASS:
return syms.stringType.tsym;
case METHOD_HANDLE:
return new Pool.MethodHandle(REF_invokeVirtual,
syms.arrayCloneMethod, types);
case METHOD_TYPE:
return syms.arrayCloneMethod.type;
default:
throw new AssertionError();
}
}
示例8
Object getValue(Symtab syms, Names names, Types types) {
switch (this) {
case STRING:
case INTEGER:
case LONG:
case FLOAT:
case DOUBLE:
return value;
case CLASS:
return syms.stringType.tsym;
case METHOD_HANDLE:
return new Pool.MethodHandle(REF_invokeVirtual,
syms.arrayCloneMethod, types);
case METHOD_TYPE:
return syms.arrayCloneMethod.type;
default:
throw new AssertionError();
}
}
示例9
Object getValue(Symtab syms, Names names, Types types) {
switch (this) {
case STRING:
case INTEGER:
case LONG:
case FLOAT:
case DOUBLE:
return value;
case CLASS:
return syms.stringType.tsym;
case METHOD_HANDLE:
return new Pool.MethodHandle(REF_invokeVirtual,
syms.arrayCloneMethod, types);
case METHOD_TYPE:
return syms.arrayCloneMethod.type;
default:
throw new AssertionError();
}
}
示例10
/**
* Generate an indy method call to the meta factory
*/
private JCExpression makeMetafactoryIndyCall(TranslationContext<?> context,
int refKind, Symbol refSym, List<JCExpression> indy_args) {
JCFunctionalExpression tree = context.tree;
//determine the static bsm args
MethodSymbol samSym = (MethodSymbol) types.findDescriptorSymbol(tree.type.tsym);
List<Object> staticArgs = List.of(
typeToMethodType(samSym.type),
new Pool.MethodHandle(refKind, refSym, types),
typeToMethodType(tree.getDescriptorType(types)));
//computed indy arg types
ListBuffer<Type> indy_args_types = new ListBuffer<>();
for (JCExpression arg : indy_args) {
indy_args_types.append(arg.type);
}
//finally, compute the type of the indy call
MethodType indyType = new MethodType(indy_args_types.toList(),
tree.type,
List.nil(),
syms.methodClass);
Name metafactoryName = context.needsAltMetafactory() ?
names.altMetafactory : names.metafactory;
if (context.needsAltMetafactory()) {
ListBuffer<Object> markers = new ListBuffer<>();
for (Type t : tree.targets.tail) {
if (t.tsym != syms.serializableType.tsym) {
markers.append(t.tsym);
}
}
int flags = context.isSerializable() ? FLAG_SERIALIZABLE : 0;
boolean hasMarkers = markers.nonEmpty();
boolean hasBridges = context.bridges.nonEmpty();
if (hasMarkers) {
flags |= FLAG_MARKERS;
}
if (hasBridges) {
flags |= FLAG_BRIDGES;
}
staticArgs = staticArgs.append(flags);
if (hasMarkers) {
staticArgs = staticArgs.append(markers.length());
staticArgs = staticArgs.appendList(markers.toList());
}
if (hasBridges) {
staticArgs = staticArgs.append(context.bridges.length() - 1);
for (Symbol s : context.bridges) {
Type s_erasure = s.erasure(types);
if (!types.isSameType(s_erasure, samSym.erasure(types))) {
staticArgs = staticArgs.append(s.erasure(types));
}
}
}
if (context.isSerializable()) {
int prevPos = make.pos;
try {
make.at(kInfo.clazz);
addDeserializationCase(refKind, refSym, tree.type, samSym,
tree, staticArgs, indyType);
} finally {
make.at(prevPos);
}
}
}
return makeIndyCall(tree, syms.lambdaMetafactory, metafactoryName, staticArgs, indyType, indy_args, samSym.name);
}
示例11
private void checkStringConstant(DiagnosticPosition pos, Object constValue) {
if (constValue instanceof String && ((String)constValue).length() >= Pool.MAX_STRING_LENGTH)
log.error(pos, new Error("compiler", "limit.string")); //NOI18N
}