private String methodBodiesString() throws IOException { StringBuilder ret = new StringBuilder(); if (m_usesGarbageCollector) ret.append("#define USING_GARBAGE_COLLECTOR\n"); /* a set is used so duplicates get filtered out */ Set<String> bodies = new HashSet<String>(); Set<OpenCLArrayType> new_types = new ArrayCopyTypeReduction().run(m_arrayTypes, m_methodHierarchies); bodies.add(new ArrayCopyGenerate().get(new_types)); /* add all different kinds of bodies i.e. code */ List<OpenCLMethod> methods = m_methodHierarchies.getMethods(); for (OpenCLMethod method : methods) bodies.add(method.getMethodBody()); List<OpenCLPolymorphicMethod> poly_methods = m_methodHierarchies.getPolyMorphicMethods(); for (OpenCLPolymorphicMethod poly_method : poly_methods) bodies.addAll(poly_method.getMethodBodies()); /* FieldTypeSwitch does something with the offsets ??? */ FieldTypeSwitch type_switch = new FieldTypeSwitch(); String field_bodies = m_fieldCodeGeneration.bodies(m_classes, type_switch); bodies.add(field_bodies); for (OpenCLArrayType array_type : m_arrayTypes) bodies.add(array_type.getBodies()); for (OpenCLInstanceof type : m_instanceOfs) bodies.add(type.getBody()); /* join all bodies together to one string (why not do it above? */ ret.append(type_switch.getFunctions()); final Iterator<String> iter = bodies.iterator(); while (iter.hasNext()) ret.append(iter.next()); return ret.toString(); }
public void caseArrayRef(ArrayRef arg0) { OpenCLArrayType array = new OpenCLArrayType((ArrayType) arg0.getBase().getType()); if (isLhs()) { m_output.append(array.getArrayRefSetter(arg0)); setCheckException(); } else { m_output.append(array.getArrayRefGetter(arg0)); setCheckException(); } }
private String methodPrototypesString() { // using a set so duplicates get filtered out. Set<String> protos = new HashSet<String>(); StringBuilder ret = new StringBuilder(); ArrayCopyGenerate arr_generate = new ArrayCopyGenerate(); protos.add(arr_generate.getProto()); List<OpenCLMethod> methods = m_methodHierarchies.getMethods(); for (OpenCLMethod method : methods) protos.add(method.getMethodPrototype()); List<OpenCLPolymorphicMethod> poly_methods = m_methodHierarchies.getPolyMorphicMethods(); for (OpenCLPolymorphicMethod poly_method : poly_methods) protos.add(poly_method.getMethodPrototypes()); protos.add(m_fieldCodeGeneration.prototypes(m_classes)); for (OpenCLArrayType array_type : m_arrayTypes) protos.add(array_type.getPrototypes()); for (OpenCLInstanceof type : m_instanceOfs) protos.add(type.getPrototype()); Iterator<String> iter = protos.iterator(); while (iter.hasNext()) ret.append(iter.next()); return ret.toString(); }
private void cloneArray(StringBuilder ret, OpenCLArrayType atype) { String address_qual = Tweaks.v().getGlobalAddressSpaceQualifier(); ret.append(" else if(type == " + atype.getTypeInteger() + "){\n"); ret.append(" int size = edu_syr_pcpratts_array_length(gc_info, thisref);\n"); ret.append( " int new_ref = " + atype.getDerefTypeString() + "_new(gc_info, size, exception);\n"); ret.append( " int total_size = (size * " + atype.getElementSize() + ") + " + Constants.ArrayOffsetSize + ";\n"); ret.append( " " + address_qual + " char * dest_deref = edu_syr_pcpratts_gc_deref(gc_info, new_ref);\n"); ret.append(" edu_syr_pcpratts_gc_memcpy(dest_deref, src_deref, total_size);\n"); ret.append(" edu_syr_pcpratts_gc_set_ctor_used(dest_deref, 1);\n"); ret.append(" return new_ref;\n"); ret.append(" }\n"); }
public void caseNewMultiArrayExpr(NewMultiArrayExpr arg0) { OpenCLScene.v().setUsingGarbageCollector(); OpenCLArrayType array_type = new OpenCLArrayType((ArrayType) arg0.getType()); m_output.append(array_type.invokeNewMultiArrayExpr(arg0)); m_newCalled = true; }