public void rehabilitateWeakTypeDefs() { for (Map.Entry<String, TypeRef> e : weakTypeDefs.entrySet()) { if (typeDefs.get(e.getKey()) == null) { DirectDeclarator dd = new DirectDeclarator(e.getKey()); TypeDef td = new TypeDef(e.getValue(), dd); typeDefs.put(e.getKey(), new Pair<TypeDef, Declarator>(td, dd)); } } } Map<String, TypeRef> manualTypeDefs = new LinkedHashMap<String, TypeRef>();
public void rehabilitateWeakTypeDefs() { for (Map.Entry<String, TypeRef> e : weakTypeDefs.entrySet()) { if (typeDefs.get(e.getKey()) == null) { DirectDeclarator dd = new DirectDeclarator(e.getKey()); TypeDef td = new TypeDef(e.getValue(), dd); typeDefs.put(e.getKey(), new Pair<TypeDef, Declarator>(td, dd)); } } } Map<String, TypeRef> manualTypeDefs = new LinkedHashMap<String, TypeRef>();
private void parseEnums(Node signatures, SourceFile sf) { for (Node en : XMLUtils.getChildrenByName(signatures, "enum")) { String name = XMLUtils.getAttribute(en, "name"); String value = XMLUtils.getAttribute(en, "value"); if (value != null) { try { try { int i = value.matches(".*?\\.0+$") ? value.lastIndexOf('.') : -1; String v = i > 0 ? value.substring(0, i) : value; sf.addDeclaration(new VariablesDeclaration(typeRef("int").addModifiers(ModifierType.Const), new DirectDeclarator(name, expr(Integer.parseInt(v))))); } catch (NumberFormatException fex) { sf.addDeclaration(new VariablesDeclaration(typeRef("double").addModifiers(ModifierType.Const), new DirectDeclarator(name, expr(Double.parseDouble(value))))); } } catch (Exception ex) { System.err.println("Parsing of enum " + name + " with value '" + value + "' failed : " + ex); } } } }
VariablesDeclaration vd = new VariablesDeclaration(tr, new DirectDeclarator(name, val.getFirst())); if (!result.config.noComments) { vd.setCommentBefore(v.getCommentBefore());
@Test public void addSibling() { VariablesDeclaration d = new VariablesDeclaration(); Declarator s1 = new Declarator.DirectDeclarator(), s2 = new Declarator.DirectDeclarator(); d.setDeclarators(Arrays.asList(s1)); s1.insertSibling(s2, false); List<Declarator> list = d.getDeclarators(); assertEquals("Failed to add after", 2, list.size()); assertSame("Added, but not after", s1, list.get(0)); assertSame(s2, list.get(1)); s2.replaceBy(null); list = d.getDeclarators(); assertEquals("Failed to remove added element", 1, list.size()); assertSame("Removed bad element", s1, list.get(0)); d.setDeclarators(Arrays.asList(s1)); s1.insertSibling(s2, true); list = d.getDeclarators(); assertEquals("Failed to add before", 2, list.size()); assertSame("Added, but not before", s2, list.get(0)); assertSame(s1, list.get(1)); s2.replaceBy(null); list = d.getDeclarators(); assertEquals("Failed to remove added element", 1, list.size()); assertSame("Removed bad element", s1, list.get(0)); } }
VariablesDeclaration vd = new VariablesDeclaration(tr, new DirectDeclarator(name, val.getFirst())); if (!result.config.noComments) { vd.setCommentBefore(v.getCommentBefore());
private void fixUnNamedChildren(Struct struct) { List<TaggedTypeRefDeclaration> trs = getUnnamedTaggedTypeRefs(struct.getDeclarations()); if (trs.isEmpty()) { return; } Set<Identifier> ids = listChildIdentifiers(struct); for (TaggedTypeRefDeclaration td : trs) { TaggedTypeRef tr = td.getTaggedTypeRef(); if (!(tr instanceof Struct)) { continue; } Struct s = (Struct) tr; switch (s.getType()) { case CStruct: case CUnion: String n = chooseNameSuffix(tr); int i = 1; Identifier fieldName; while (!ids.add(fieldName = ident("field" + i))) { i++; } //tr.setTag(idTag); td.replaceBy(new VariablesDeclaration(tr, new Declarator.DirectDeclarator(fieldName.toString()))); break; } } }
@Override public void visitConstant(Constant c) { if (c.getValue() instanceof String) { //Struct s = c.findParentOfType(Struct.class); Class charClass; String ptrMethodName; if (c.getType() == Constant.Type.LongString) { charClass = Short.class; ptrMethodName = "pointerToWideCString"; } else { charClass = Byte.class; ptrMethodName = "pointerToCString"; } String fieldName = "strConstant" + (++nConstants); VariablesDeclaration staticConstField = new VariablesDeclaration(typeRef(ident(ptrClass(), expr(typeRef(charClass)))), new DirectDeclarator(fieldName, staticPtrMethod(ptrMethodName, c.clone()))); staticConstField.addModifiers(ModifierType.Static, ModifierType.Private, ModifierType.Final); //s.addDeclaration(staticConstField); extraDeclarationsOut.add(staticConstField); c.replaceBy(varRef(fieldName)); return; } super.visitConstant(c); } //
@Override public void visitConstant(Constant c) { if (c.getValue() instanceof String) { //Struct s = c.findParentOfType(Struct.class); Class charClass; String ptrMethodName; if (c.getType() == Constant.Type.LongString) { charClass = Short.class; ptrMethodName = "pointerToWideCString"; } else { charClass = Byte.class; ptrMethodName = "pointerToCString"; } String fieldName = "strConstant" + (++nConstants); VariablesDeclaration staticConstField = new VariablesDeclaration(typeRef(ident(ptrClass(), expr(typeRef(charClass)))), new DirectDeclarator(fieldName, staticPtrMethod(ptrMethodName, c.clone()))); staticConstField.addModifiers(ModifierType.Static, ModifierType.Private, ModifierType.Final); //s.addDeclaration(staticConstField); extraDeclarationsOut.add(staticConstField); c.replaceBy(varRef(fieldName)); return; } super.visitConstant(c); } //
@Override protected void visitStoredDeclarations(StoredDeclarations d) { super.visitStoredDeclarations(d); if (d.getDeclarators().size() == 1) { Declarator declarator = d.getDeclarators().get(0); if (declarator instanceof FunctionDeclarator) { FunctionDeclarator fd = (FunctionDeclarator) declarator; Function f = new Function(Function.Type.CFunction, null, d.getValueType(), fd.getArgs()); f.addModifiers(fd.getTarget().getModifiers()); FunctionSignature fs = new FunctionSignature(f); d.setValueType(fs); Declarator target = fd.getTarget(); Declarator newTarget = target == null ? new DirectDeclarator(fd.resolveName(), fd.getDefaultValue()) : target.clone(); d.setDeclarators(Arrays.asList(newTarget)); d.accept(this); } } }
@Override protected void visitStoredDeclarations(StoredDeclarations d) { super.visitStoredDeclarations(d); if (d.getDeclarators().size() == 1) { Declarator declarator = d.getDeclarators().get(0); if (declarator instanceof FunctionDeclarator) { FunctionDeclarator fd = (FunctionDeclarator) declarator; Function f = new Function(Function.Type.CFunction, null, d.getValueType(), fd.getArgs()); f.addModifiers(fd.getTarget().getModifiers()); FunctionSignature fs = new FunctionSignature(f); d.setValueType(fs); Declarator target = fd.getTarget(); Declarator newTarget = target == null ? new DirectDeclarator(fd.resolveName(), fd.getDefaultValue()) : target.clone(); d.setDeclarators(Arrays.asList(newTarget)); d.accept(this); } } }
private void parseEnums(Node signatures, SourceFile sf) { for (Node en : XMLUtils.getChildrenByName(signatures, "enum")) { String name = XMLUtils.getAttribute(en, "name"); String value = XMLUtils.getAttribute(en, "value"); if (value != null) { try { try { int i = value.matches(".*?\\.0+$") ? value.lastIndexOf('.') : -1; String v = i > 0 ? value.substring(0, i) : value; sf.addDeclaration(new VariablesDeclaration(typeRef("int").addModifiers(ModifierType.Const), new DirectDeclarator(name, expr(Integer.parseInt(v))))); } catch (NumberFormatException fex) { sf.addDeclaration(new VariablesDeclaration(typeRef("double").addModifiers(ModifierType.Const), new DirectDeclarator(name, expr(Double.parseDouble(value))))); } } catch (Exception ex) { System.err.println("Parsing of enum " + name + " with value '" + value + "' failed : " + ex); } } } }
protected void outputNSString(String name, String value, DeclarationsHolder out, Signatures signatures, Element... elementsToTakeCommentsFrom) { if (!signatures.addVariable(name)) { return; } TypeRef tr = typeRef(String.class); VariablesDeclaration vd = new VariablesDeclaration(tr, new DirectDeclarator(name, expr(value))); if (!result.config.noComments) { for (Element e : elementsToTakeCommentsFrom) { vd.addToCommentBefore(e.getCommentBefore()); vd.addToCommentBefore(e.getCommentAfter()); } } vd.addModifiers(ModifierType.Public); out.addDeclaration(vd); } static Map<Class<?>, Pair<List<Pair<Function, String>>, Set<String>>> cachedForcedMethodsAndTheirSignatures;
protected void outputNSString(String name, String value, DeclarationsHolder out, Signatures signatures, Element... elementsToTakeCommentsFrom) { if (!signatures.addVariable(name)) { return; } TypeRef tr = typeRef(String.class); VariablesDeclaration vd = new VariablesDeclaration(tr, new DirectDeclarator(name, expr(value))); if (!result.config.noComments) { for (Element e : elementsToTakeCommentsFrom) { vd.addToCommentBefore(e.getCommentBefore()); vd.addToCommentBefore(e.getCommentAfter()); } } vd.addModifiers(ModifierType.Public); out.addDeclaration(vd); } static Map<Class<?>, Pair<List<Pair<Function, String>>, Set<String>>> cachedForcedMethodsAndTheirSignatures;
private void parseConstants(Node signatures, SourceFile sf) { for (Node cn : XMLUtils.getChildrenByName(signatures, "constant")) { String name = XMLUtils.getAttribute(cn, "name"); try { TypeRef tr = parseType(cn); if (tr == null) { continue; } sf.addDeclaration(new VariablesDeclaration(tr.addModifiers(ModifierType.Extern, ModifierType.Const), new DirectDeclarator(name))); } catch (Exception ex) { System.err.println("Parsing of constant " + name + " failed : " + ex); } } }
private void parseConstants(Node signatures, SourceFile sf) { for (Node cn : XMLUtils.getChildrenByName(signatures, "constant")) { String name = XMLUtils.getAttribute(cn, "name"); try { TypeRef tr = parseType(cn); if (tr == null) { continue; } sf.addDeclaration(new VariablesDeclaration(tr.addModifiers(ModifierType.Extern, ModifierType.Const), new DirectDeclarator(name))); } catch (Exception ex) { System.err.println("Parsing of constant " + name + " failed : " + ex); } } }
public static Statement stat(TypeRef tr, String varName, Expression ass) { VariablesDeclaration vd = new VariablesDeclaration(tr, new Declarator.DirectDeclarator(varName, ass)); return vd;//new Statement.DeclarationStatement(vd); }
public static Statement tryRethrow(Statement st) { String exName = "$ex$"; return new Try(st, null, new Catch(new VariablesDeclaration(typeRef(Throwable.class), new Declarator.DirectDeclarator(exName)), new Throw(new New(typeRef(RuntimeException.class), varRef(exName))))); }
@Override public void propagateName(String name) { if (getTarget() != null) getTarget().propagateName(name); else setTarget(new DirectDeclarator(name)); } }
public void setName(String name) { if (declarator == null) setDeclarator(new Declarator.DirectDeclarator(name)); else declarator.propagateName(name); } @Override