From 5b862aa38c4fcb1c91797c947ff86b5f70b3ba54 Mon Sep 17 00:00:00 2001 From: Gaming4JC Date: Sat, 18 Jan 2020 10:31:06 -0500 Subject: Bug 1352082 - Avoid shifting a signed integer left in C++. Tag UXP Issue #1344 --- .../validator/htmlparser/cpptranslate/AnnotationHelperVisitor.java | 4 ++++ .../nu/validator/htmlparser/cpptranslate/CppTypes.java | 4 ++++ .../nu/validator/htmlparser/cpptranslate/CppVisitor.java | 6 +++++- 3 files changed, 13 insertions(+), 1 deletion(-) (limited to 'parser/html/java/htmlparser/translator-src') diff --git a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/AnnotationHelperVisitor.java b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/AnnotationHelperVisitor.java index 337394a89..dc524820f 100644 --- a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/AnnotationHelperVisitor.java +++ b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/AnnotationHelperVisitor.java @@ -72,6 +72,10 @@ public class AnnotationHelperVisitor extends VoidVisitorAdapter { return hasAnnotation("NoLength"); } + protected boolean unsigned() { + return hasAnnotation("Unsigned"); + } + protected boolean auto() { return hasAnnotation("Auto"); } diff --git a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppTypes.java b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppTypes.java index 80216da0e..6cbba4162 100644 --- a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppTypes.java +++ b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppTypes.java @@ -192,6 +192,10 @@ public class CppTypes { return "int32_t"; } + public String unsignedIntType() { + return "uint32_t"; + } + public String stringType() { return "nsHtml5String"; } diff --git a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java index f4f00070a..bf5775eb6 100644 --- a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java +++ b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java @@ -548,7 +548,11 @@ public class CppVisitor extends AnnotationHelperVisitor { case Float: throw new IllegalStateException("Unsupported primitive."); case Int: - printer.print(cppTypes.intType()); + if (unsigned()) { + printer.print(cppTypes.unsignedIntType()); + } else { + printer.print(cppTypes.intType()); + } break; case Long: throw new IllegalStateException("Unsupported primitive."); -- cgit v1.2.3 From e387308d9b996542565175c7895724c86e24e0dc Mon Sep 17 00:00:00 2001 From: Gaming4JC Date: Sat, 18 Jan 2020 13:19:02 -0500 Subject: Bug 1355769 - Avoid malloc for nsHtml5ElementName when processing a non-interned element name. Tag UXP Issue #1344 --- .../nu/validator/htmlparser/cpptranslate/CppVisitor.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'parser/html/java/htmlparser/translator-src') diff --git a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java index bf5775eb6..af042ce96 100644 --- a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java +++ b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java @@ -448,8 +448,7 @@ public class CppVisitor extends AnnotationHelperVisitor { printer.print("#include \""); printer.print(className); printer.printLn(".h\""); - if ("AttributeName".equals(javaClassName) - || "ElementName".equals(javaClassName)) { + if ("AttributeName".equals(javaClassName)) { printer.print("#include \""); printer.print(cppTypes.classPrefix()); printer.print("Releasable"); @@ -1387,8 +1386,7 @@ public class CppVisitor extends AnnotationHelperVisitor { suppressPointer = true; printTypeArgs(n.getTypeArgs(), arg); - if ("createAttributeName".equals(currentMethod) - || "elementNameByBuffer".equals(currentMethod)) { + if ("createAttributeName".equals(currentMethod)) { printer.print(cppTypes.classPrefix()); printer.print("Releasable"); printer.print(n.getType().getName()); -- cgit v1.2.3 From 90d19b0a319a2e153069896453e02a53b1e2cd06 Mon Sep 17 00:00:00 2001 From: Gaming4JC Date: Sat, 18 Jan 2020 14:01:12 -0500 Subject: Bug 1355479 - Remove isindex on the Java side and allow the C++ side to reduce malloc in attribute handling. Tag UXP Issue #1344 --- .../validator/htmlparser/cpptranslate/CppVisitor.java | 17 ++--------------- .../nu/validator/htmlparser/cpptranslate/Main.java | 11 ++++------- 2 files changed, 6 insertions(+), 22 deletions(-) (limited to 'parser/html/java/htmlparser/translator-src') diff --git a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java index af042ce96..9a2a85795 100644 --- a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java +++ b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java @@ -448,13 +448,6 @@ public class CppVisitor extends AnnotationHelperVisitor { printer.print("#include \""); printer.print(className); printer.printLn(".h\""); - if ("AttributeName".equals(javaClassName)) { - printer.print("#include \""); - printer.print(cppTypes.classPrefix()); - printer.print("Releasable"); - printer.print(javaClassName); - printer.printLn(".h\""); - } printer.printLn(); } @@ -1386,18 +1379,12 @@ public class CppVisitor extends AnnotationHelperVisitor { suppressPointer = true; printTypeArgs(n.getTypeArgs(), arg); - if ("createAttributeName".equals(currentMethod)) { - printer.print(cppTypes.classPrefix()); - printer.print("Releasable"); - printer.print(n.getType().getName()); - } else { - n.getType().accept(this, arg); - } + n.getType().accept(this, arg); suppressPointer = false; if ("AttributeName".equals(n.getType().getName())) { List args = n.getArgs(); - while (args.size() > 3) { + while (args != null && args.size() > 3) { args.remove(3); } } diff --git a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/Main.java b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/Main.java index 53347bd42..09602ccba 100644 --- a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/Main.java +++ b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/Main.java @@ -37,19 +37,18 @@ package nu.validator.htmlparser.cpptranslate; -import japa.parser.JavaParser; -import japa.parser.ParseException; -import japa.parser.ast.CompilationUnit; - import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; -import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; +import japa.parser.JavaParser; +import japa.parser.ParseException; +import japa.parser.ast.CompilationUnit; + public class Main { static final String[] H_LIST = { @@ -58,7 +57,6 @@ public class Main { "MetaScanner", "AttributeName", "ElementName", - "HtmlAttributes", "StackNode", "UTF16Buffer", "StateSnapshot", @@ -71,7 +69,6 @@ public class Main { "MetaScanner", "AttributeName", "ElementName", - "HtmlAttributes", "StackNode", "UTF16Buffer", "StateSnapshot", -- cgit v1.2.3 From 41e477e2ce2d00a793adc6f8ba85540e02275e5f Mon Sep 17 00:00:00 2001 From: Gaming4JC Date: Sat, 18 Jan 2020 16:30:42 -0500 Subject: Bug 1358037 - Inline the methods of nsHtml5ElementName and nsHtml5AttributeName. Tag UXP Issue #1344 --- .../htmlparser/cpptranslate/CppTypes.java | 2 +- .../htmlparser/cpptranslate/CppVisitor.java | 43 +++++++++------------- .../htmlparser/cpptranslate/HVisitor.java | 41 +++++++-------------- .../nu/validator/htmlparser/cpptranslate/Main.java | 8 ++-- .../htmlparser/cpptranslate/SymbolTable.java | 33 ++++++++++++----- 5 files changed, 58 insertions(+), 69 deletions(-) (limited to 'parser/html/java/htmlparser/translator-src') diff --git a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppTypes.java b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppTypes.java index 6cbba4162..7943368f7 100644 --- a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppTypes.java +++ b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppTypes.java @@ -117,7 +117,7 @@ public class CppTypes { "nsHtml5String", "nsNameSpaceManager", "nsIContent", "nsTraceRefcnt", "jArray", "nsHtml5ArrayCopy", "nsAHtml5TreeBuilderState", "nsHtml5Atoms", "nsHtml5ByteReadable", "nsIUnicodeDecoder", - "nsHtml5Macros", "nsIContentHandle" }; + "nsHtml5Macros", "nsIContentHandle", "nsHtml5Portability" }; private static final String[] OTHER_DECLATIONS = {}; diff --git a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java index 9a2a85795..2a37e5ce1 100644 --- a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java +++ b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java @@ -331,13 +331,7 @@ public class CppVisitor extends AnnotationHelperVisitor { } else if ("errorHandler".equals(n.getName())) { printer.print(cppTypes.errorHandler()); } else { - String prefixedName = javaClassName + "." + n.getName(); - String constant = symbolTable.cppDefinesByJavaNames.get(prefixedName); - if (constant != null) { - printer.print(constant); - } else { - printer.print(n.getName()); - } + printer.print(n.getName()); } } @@ -736,10 +730,14 @@ public class CppVisitor extends AnnotationHelperVisitor { printer.print(" "); printer.print(className); printer.print("::"); - if ("AttributeName".equals(n.getType().toString())) { - printer.print("ATTR_"); - } else if ("ElementName".equals(n.getType().toString())) { - printer.print("ELT_"); + String clazzName = n.getType().toString(); + String field = declarator.getId().toString(); + if (symbolTable.isAttributeOrElementName(clazzName, field)) { + if ("AttributeName".equals(clazzName)) { + printer.print("ATTR_"); + } else if ("ElementName".equals(clazzName)) { + printer.print("ELT_"); + } } declarator.getId().accept(this, arg); printer.print(" = "); @@ -1080,21 +1078,14 @@ public class CppVisitor extends AnnotationHelperVisitor { printer.print("->"); } } else { - String prefixedName = clazzName + "." + field; - String constant = symbolTable.cppDefinesByJavaNames.get(prefixedName); - if (constant != null) { - printer.print(constant); - return; - } else { - printer.print(cppTypes.classPrefix()); - printer.print(clazzName); - printer.print("::"); - if (symbolTable.isNotAnAttributeOrElementName(field)) { - if ("AttributeName".equals(clazzName)) { - printer.print("ATTR_"); - } else if ("ElementName".equals(clazzName)) { - printer.print("ELT_"); - } + printer.print(cppTypes.classPrefix()); + printer.print(clazzName); + printer.print("::"); + if (symbolTable.isAttributeOrElementName(clazzName, field)) { + if ("AttributeName".equals(clazzName)) { + printer.print("ATTR_"); + } else if ("ElementName".equals(clazzName)) { + printer.print("ELT_"); } } } diff --git a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/HVisitor.java b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/HVisitor.java index 25cf7aef1..902eb348a 100644 --- a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/HVisitor.java +++ b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/HVisitor.java @@ -37,7 +37,6 @@ package nu.validator.htmlparser.cpptranslate; -import java.util.LinkedList; import java.util.List; import japa.parser.ast.body.FieldDeclaration; @@ -45,12 +44,9 @@ import japa.parser.ast.body.MethodDeclaration; import japa.parser.ast.body.ModifierSet; import japa.parser.ast.body.Parameter; import japa.parser.ast.body.VariableDeclarator; -import japa.parser.ast.expr.IntegerLiteralExpr; -import japa.parser.ast.expr.MethodCallExpr; import japa.parser.ast.stmt.BlockStmt; import japa.parser.ast.type.PrimitiveType; import japa.parser.ast.type.ReferenceType; -import japa.parser.ast.type.Type; public class HVisitor extends CppVisitor { @@ -60,8 +56,6 @@ public class HVisitor extends CppVisitor { private Visibility previousVisibility = Visibility.NONE; - private List defines = new LinkedList(); - /** * @see nu.validator.htmlparser.cpptranslate.CppVisitor#printMethodNamespace() */ @@ -145,10 +139,10 @@ public class HVisitor extends CppVisitor { */ @Override protected void endClassDeclaration() { printModifiers(ModifierSet.PUBLIC | ModifierSet.STATIC); - printer.printLn("void initializeStatics();"); + printer.printLn("void initializeStatics();"); printModifiers(ModifierSet.PUBLIC | ModifierSet.STATIC); - printer.printLn("void releaseStatics();"); - + printer.printLn("void releaseStatics();"); + printer.unindent(); printer.unindent(); @@ -161,13 +155,6 @@ public class HVisitor extends CppVisitor { printer.printLn("};"); printer.printLn(); - - for (String define : defines) { - printer.printLn(define); - } - - printer.printLn(); - printer.printLn(); printer.printLn("#endif"); } @@ -226,18 +213,16 @@ public class HVisitor extends CppVisitor { throw new IllegalStateException( "More than one variable declared by one declarator."); } - String name = javaClassName + "." + declarator.getId().getName(); - String value = declarator.getInit().toString(); - if ("Integer.MAX_VALUE".equals(value)) { - value = cppTypes.maxInteger(); - } - String longName = definePrefix + declarator.getId().getName(); - if (symbolTable.cppDefinesByJavaNames.containsKey(name)) { - throw new IllegalStateException( - "Duplicate #define constant local name: " + name); - } - symbolTable.cppDefinesByJavaNames.put(name, longName); - defines.add("#define " + longName + " " + value); + printModifiers(modifiers); + printer.print("const "); + n.getType().accept(this, arg); + printer.print(" "); + declarator.getId().accept(this, arg); + printer.print(" = "); + declarator.getInit().accept(this, arg); + printer.printLn(";"); + printer.printLn(); + symbolTable.addPrimitiveConstant(javaClassName, declarator.getId().toString()); } else { if (n.getType() instanceof ReferenceType) { ReferenceType rt = (ReferenceType) n.getType(); diff --git a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/Main.java b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/Main.java index 09602ccba..307d7d8a6 100644 --- a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/Main.java +++ b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/Main.java @@ -52,11 +52,11 @@ import japa.parser.ast.CompilationUnit; public class Main { static final String[] H_LIST = { + "AttributeName", + "ElementName", "Tokenizer", "TreeBuilder", "MetaScanner", - "AttributeName", - "ElementName", "StackNode", "UTF16Buffer", "StateSnapshot", @@ -64,11 +64,11 @@ public class Main { }; private static final String[] CPP_LIST = { + "AttributeName", + "ElementName", "Tokenizer", "TreeBuilder", "MetaScanner", - "AttributeName", - "ElementName", "StackNode", "UTF16Buffer", "StateSnapshot", diff --git a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/SymbolTable.java b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/SymbolTable.java index 970a2b64b..3619c923a 100644 --- a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/SymbolTable.java +++ b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/SymbolTable.java @@ -38,11 +38,13 @@ package nu.validator.htmlparser.cpptranslate; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; public class SymbolTable { - public final Map cppDefinesByJavaNames = new HashMap(); + private final Set primitiveConstants = new HashSet(); private final Map fields = new HashMap(); @@ -51,17 +53,24 @@ public class SymbolTable { /** * This is a sad hack to work around the fact the there's no real symbol * table yet. - * - * @param name + * + * @param field * @return */ - public boolean isNotAnAttributeOrElementName(String name) { - return !("ATTRIBUTE_HASHES".equals(name) - || "ATTRIBUTE_NAMES".equals(name) - || "ELEMENT_HASHES".equals(name) - || "ELEMENT_NAMES".equals(name) || "ALL_NO_NS".equals(name)); + public boolean isAttributeOrElementName(String klazz, String field) { + if (isPrimitiveConstant(klazz, field)) { + return false; + } + return !("ATTRIBUTE_HASHES".equals(field) + || "ATTRIBUTE_NAMES".equals(field) + || "ELEMENT_HASHES".equals(field) + || "ELEMENT_NAMES".equals(field) || "ALL_NO_NS".equals(field)); } - + + public void addPrimitiveConstant(String klazz, String field) { + primitiveConstants.add(new StringPair(klazz, field)); + } + public void putFieldType(String klazz, String field, Type type) { fields.put(new StringPair(klazz, field), type); } @@ -69,7 +78,11 @@ public class SymbolTable { public void putMethodReturnType(String klazz, String method, Type type) { methodReturns.put(new StringPair(klazz, method), type); } - + + public boolean isPrimitiveConstant(String klazz, String field) { + return primitiveConstants.contains(new StringPair(klazz, field)); + } + public Type getFieldType(String klazz, String field) { return fields.get(new StringPair(klazz, field)); } -- cgit v1.2.3 From 9bf83c6a785ba7463822a159cdaf9eb06ece3690 Mon Sep 17 00:00:00 2001 From: Gaming4JC Date: Sat, 18 Jan 2020 23:50:33 -0500 Subject: Bug 483155 - Put Gecko content creator function pointers on ElementName. Tag UXP Issue #1344 --- .../htmlparser/cpptranslate/AnnotationHelperVisitor.java | 12 ++++++++++++ .../nu/validator/htmlparser/cpptranslate/CppTypes.java | 15 ++++++++++++++- .../nu/validator/htmlparser/cpptranslate/CppVisitor.java | 16 ++++++++++++++-- 3 files changed, 40 insertions(+), 3 deletions(-) (limited to 'parser/html/java/htmlparser/translator-src') diff --git a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/AnnotationHelperVisitor.java b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/AnnotationHelperVisitor.java index dc524820f..432f08b90 100644 --- a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/AnnotationHelperVisitor.java +++ b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/AnnotationHelperVisitor.java @@ -92,6 +92,18 @@ public class AnnotationHelperVisitor extends VoidVisitorAdapter { return hasAnnotation("CharacterName"); } + protected boolean creator() { + return hasAnnotation("Creator"); + } + + protected boolean htmlCreator() { + return hasAnnotation("HtmlCreator"); + } + + protected boolean svgCreator() { + return hasAnnotation("SvgCreator"); + } + private boolean hasAnnotation(String anno) { if (currentAnnotations == null) { return false; diff --git a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppTypes.java b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppTypes.java index 7943368f7..963d1ac68 100644 --- a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppTypes.java +++ b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppTypes.java @@ -117,7 +117,8 @@ public class CppTypes { "nsHtml5String", "nsNameSpaceManager", "nsIContent", "nsTraceRefcnt", "jArray", "nsHtml5ArrayCopy", "nsAHtml5TreeBuilderState", "nsHtml5Atoms", "nsHtml5ByteReadable", "nsIUnicodeDecoder", - "nsHtml5Macros", "nsIContentHandle", "nsHtml5Portability" }; + "nsHtml5Macros", "nsIContentHandle", "nsHtml5Portability", + "nsHtml5ContentCreatorFunction"}; private static final String[] OTHER_DECLATIONS = {}; @@ -232,6 +233,18 @@ public class CppTypes { return "nsIContentHandle*"; } + public String htmlCreatorType() { + return "mozilla::dom::HTMLContentCreatorFunction"; + } + + public String svgCreatorType() { + return "mozilla::dom::SVGContentCreatorFunction"; + } + + public String creatorType() { + return "nsHtml5ContentCreatorFunction"; + } + public String xhtmlNamespaceLiteral() { return "kNameSpaceID_XHTML"; } diff --git a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java index 2a37e5ce1..a97a9eba1 100644 --- a/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java +++ b/parser/html/java/htmlparser/translator-src/nu/validator/htmlparser/cpptranslate/CppVisitor.java @@ -480,7 +480,15 @@ public class CppVisitor extends AnnotationHelperVisitor { name = cppTypes.stringType(); } } else if ("T".equals(name) || "Object".equals(name)) { - name = cppTypes.nodeType(); + if (htmlCreator()) { + name = cppTypes.htmlCreatorType(); + } else if (svgCreator()) { + name = cppTypes.svgCreatorType(); + } else if (creator()) { + name = cppTypes.creatorType(); + } else { + name = cppTypes.nodeType(); + } } else if ("TokenHandler".equals(name)) { name = cppTypes.classPrefix() + "TreeBuilder*"; } else if ("EncodingDeclarationHandler".equals(name)) { @@ -1073,6 +1081,9 @@ public class CppVisitor extends AnnotationHelperVisitor { if ("DocumentMode".equals(scope.toString())) { // printer.print(cppTypes.documentModeType()); // printer.print("."); + } else if ("creator".equals(scope.toString()) || "this.creator".equals(scope.toString())) { + scope.accept(this, arg); + printer.print("."); } else { scope.accept(this, arg); printer.print("->"); @@ -1324,7 +1335,8 @@ public class CppVisitor extends AnnotationHelperVisitor { if (clazzName == null) { scope.accept(this, arg); if ("length".equals(n.getName()) - || "charAt".equals(n.getName())) { + || "charAt".equals(n.getName()) + || "creator".equals(scope.toString())) { printer.print("."); } else { printer.print("->"); -- cgit v1.2.3