diff --git a/src/shared/qml/parser/qmljsast_p.h b/src/shared/qml/parser/qmljsast_p.h
index 76c409e07b528bb52f4c4fa2c287459cca23b973..e2bf4176d96de21f1d517c4399cb2e67c0053e4c 100644
--- a/src/shared/qml/parser/qmljsast_p.h
+++ b/src/shared/qml/parser/qmljsast_p.h
@@ -242,7 +242,7 @@ public:
     int kind;
 };
 
-class ExpressionNode: public Node
+class QML_PARSER_EXPORT ExpressionNode: public Node
 {
 public:
     ExpressionNode() {}
@@ -254,7 +254,7 @@ public:
     virtual SourceLocation lastSourceLocation() const = 0;
 };
 
-class Statement: public Node
+class QML_PARSER_EXPORT Statement: public Node
 {
 public:
     Statement() {}
@@ -266,7 +266,7 @@ public:
     virtual SourceLocation lastSourceLocation() const = 0;
 };
 
-class UiFormal: public Node
+class QML_PARSER_EXPORT UiFormal: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(UiFormal)
@@ -291,7 +291,7 @@ public:
     SourceLocation aliasToken;
 };
 
-class UiFormalList: public Node
+class QML_PARSER_EXPORT UiFormalList: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(UiFormalList)
@@ -326,7 +326,7 @@ public:
     UiFormalList *next;
 };
 
-class UiSignature: public Node
+class QML_PARSER_EXPORT UiSignature: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(UiSignature)
@@ -349,7 +349,7 @@ public:
     SourceLocation rparenToken;
 };
 
-class NestedExpression: public ExpressionNode
+class QML_PARSER_EXPORT NestedExpression: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(NestedExpression)
@@ -372,7 +372,7 @@ public:
     SourceLocation rparenToken;
 };
 
-class ThisExpression: public ExpressionNode
+class QML_PARSER_EXPORT ThisExpression: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(ThisExpression)
@@ -392,7 +392,7 @@ public:
     SourceLocation thisToken;
 };
 
-class IdentifierExpression: public ExpressionNode
+class QML_PARSER_EXPORT IdentifierExpression: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(IdentifierExpression)
@@ -415,7 +415,7 @@ public:
     SourceLocation identifierToken;
 };
 
-class NullExpression: public ExpressionNode
+class QML_PARSER_EXPORT NullExpression: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(NullExpression)
@@ -435,7 +435,7 @@ public:
     SourceLocation nullToken;
 };
 
-class TrueLiteral: public ExpressionNode
+class QML_PARSER_EXPORT TrueLiteral: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(TrueLiteral)
@@ -455,7 +455,7 @@ public:
     SourceLocation trueToken;
 };
 
-class FalseLiteral: public ExpressionNode
+class QML_PARSER_EXPORT FalseLiteral: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(FalseLiteral)
@@ -475,7 +475,7 @@ public:
     SourceLocation falseToken;
 };
 
-class NumericLiteral: public ExpressionNode
+class QML_PARSER_EXPORT NumericLiteral: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(NumericLiteral)
@@ -497,7 +497,7 @@ public:
     SourceLocation literalToken;
 };
 
-class StringLiteral: public ExpressionNode
+class QML_PARSER_EXPORT StringLiteral: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(StringLiteral)
@@ -520,7 +520,7 @@ public:
     SourceLocation literalToken;
 };
 
-class RegExpLiteral: public ExpressionNode
+class QML_PARSER_EXPORT RegExpLiteral: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(RegExpLiteral)
@@ -544,7 +544,7 @@ public:
     SourceLocation literalToken;
 };
 
-class ArrayLiteral: public ExpressionNode
+class QML_PARSER_EXPORT ArrayLiteral: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(ArrayLiteral)
@@ -579,7 +579,7 @@ public:
     SourceLocation rbracketToken;
 };
 
-class ObjectLiteral: public ExpressionNode
+class QML_PARSER_EXPORT ObjectLiteral: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(ObjectLiteral)
@@ -606,7 +606,7 @@ public:
     SourceLocation rbraceToken;
 };
 
-class ElementList: public Node
+class QML_PARSER_EXPORT ElementList: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(ElementList)
@@ -641,7 +641,7 @@ public:
     SourceLocation commaToken;
 };
 
-class Elision: public Node
+class QML_PARSER_EXPORT Elision: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(Elision)
@@ -672,7 +672,7 @@ public:
     SourceLocation commaToken;
 };
 
-class PropertyNameAndValueList: public Node
+class QML_PARSER_EXPORT PropertyNameAndValueList: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(PropertyNameAndValueList)
@@ -708,7 +708,7 @@ public:
     SourceLocation commaToken;
 };
 
-class PropertyName: public Node
+class QML_PARSER_EXPORT PropertyName: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(PropertyName)
@@ -720,7 +720,7 @@ public:
     SourceLocation propertyNameToken;
 };
 
-class IdentifierPropertyName: public PropertyName
+class QML_PARSER_EXPORT IdentifierPropertyName: public PropertyName
 {
 public:
     QMLJS_DECLARE_AST_NODE(IdentifierPropertyName)
@@ -736,7 +736,7 @@ public:
     NameId *id;
 };
 
-class StringLiteralPropertyName: public PropertyName
+class QML_PARSER_EXPORT StringLiteralPropertyName: public PropertyName
 {
 public:
     QMLJS_DECLARE_AST_NODE(StringLiteralPropertyName)
@@ -751,7 +751,7 @@ public:
     NameId *id;
 };
 
-class NumericLiteralPropertyName: public PropertyName
+class QML_PARSER_EXPORT NumericLiteralPropertyName: public PropertyName
 {
 public:
     QMLJS_DECLARE_AST_NODE(NumericLiteralPropertyName)
@@ -766,7 +766,7 @@ public:
     double id;
 };
 
-class ArrayMemberExpression: public ExpressionNode
+class QML_PARSER_EXPORT ArrayMemberExpression: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(ArrayMemberExpression)
@@ -792,7 +792,7 @@ public:
     SourceLocation rbracketToken;
 };
 
-class FieldMemberExpression: public ExpressionNode
+class QML_PARSER_EXPORT FieldMemberExpression: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(FieldMemberExpression)
@@ -818,7 +818,7 @@ public:
     SourceLocation identifierToken;
 };
 
-class NewMemberExpression: public ExpressionNode
+class QML_PARSER_EXPORT NewMemberExpression: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(NewMemberExpression)
@@ -845,7 +845,7 @@ public:
     SourceLocation rparenToken;
 };
 
-class NewExpression: public ExpressionNode
+class QML_PARSER_EXPORT NewExpression: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(NewExpression)
@@ -868,7 +868,7 @@ public:
     SourceLocation newToken;
 };
 
-class CallExpression: public ExpressionNode
+class QML_PARSER_EXPORT CallExpression: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(CallExpression)
@@ -894,7 +894,7 @@ public:
     SourceLocation rparenToken;
 };
 
-class ArgumentList: public Node
+class QML_PARSER_EXPORT ArgumentList: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(ArgumentList)
@@ -928,7 +928,7 @@ public:
     SourceLocation commaToken;
 };
 
-class PostIncrementExpression: public ExpressionNode
+class QML_PARSER_EXPORT PostIncrementExpression: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(PostIncrementExpression)
@@ -951,7 +951,7 @@ public:
     SourceLocation incrementToken;
 };
 
-class PostDecrementExpression: public ExpressionNode
+class QML_PARSER_EXPORT PostDecrementExpression: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(PostDecrementExpression)
@@ -974,7 +974,7 @@ public:
     SourceLocation decrementToken;
 };
 
-class DeleteExpression: public ExpressionNode
+class QML_PARSER_EXPORT DeleteExpression: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(DeleteExpression)
@@ -996,7 +996,7 @@ public:
     SourceLocation deleteToken;
 };
 
-class VoidExpression: public ExpressionNode
+class QML_PARSER_EXPORT VoidExpression: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(VoidExpression)
@@ -1019,7 +1019,7 @@ public:
     SourceLocation voidToken;
 };
 
-class TypeOfExpression: public ExpressionNode
+class QML_PARSER_EXPORT TypeOfExpression: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(TypeOfExpression)
@@ -1042,7 +1042,7 @@ public:
     SourceLocation typeofToken;
 };
 
-class PreIncrementExpression: public ExpressionNode
+class QML_PARSER_EXPORT PreIncrementExpression: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(PreIncrementExpression)
@@ -1065,7 +1065,7 @@ public:
     SourceLocation incrementToken;
 };
 
-class PreDecrementExpression: public ExpressionNode
+class QML_PARSER_EXPORT PreDecrementExpression: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(PreDecrementExpression)
@@ -1088,7 +1088,7 @@ public:
     SourceLocation decrementToken;
 };
 
-class UnaryPlusExpression: public ExpressionNode
+class QML_PARSER_EXPORT UnaryPlusExpression: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(UnaryPlusExpression)
@@ -1111,7 +1111,7 @@ public:
     SourceLocation plusToken;
 };
 
-class UnaryMinusExpression: public ExpressionNode
+class QML_PARSER_EXPORT UnaryMinusExpression: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(UnaryMinusExpression)
@@ -1134,7 +1134,7 @@ public:
     SourceLocation minusToken;
 };
 
-class TildeExpression: public ExpressionNode
+class QML_PARSER_EXPORT TildeExpression: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(TildeExpression)
@@ -1157,7 +1157,7 @@ public:
     SourceLocation tildeToken;
 };
 
-class NotExpression: public ExpressionNode
+class QML_PARSER_EXPORT NotExpression: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(NotExpression)
@@ -1180,7 +1180,7 @@ public:
     SourceLocation notToken;
 };
 
-class BinaryExpression: public ExpressionNode
+class QML_PARSER_EXPORT BinaryExpression: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(BinaryExpression)
@@ -1208,7 +1208,7 @@ public:
     SourceLocation operatorToken;
 };
 
-class ConditionalExpression: public ExpressionNode
+class QML_PARSER_EXPORT ConditionalExpression: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(ConditionalExpression)
@@ -1235,7 +1235,7 @@ public:
     SourceLocation colonToken;
 };
 
-class Expression: public ExpressionNode // ### rename
+class QML_PARSER_EXPORT Expression: public ExpressionNode // ### rename
 {
 public:
     QMLJS_DECLARE_AST_NODE(Expression)
@@ -1259,7 +1259,7 @@ public:
     SourceLocation commaToken;
 };
 
-class Block: public Statement
+class QML_PARSER_EXPORT Block: public Statement
 {
 public:
     QMLJS_DECLARE_AST_NODE(Block)
@@ -1283,7 +1283,7 @@ public:
     SourceLocation rbraceToken;
 };
 
-class StatementList: public Node
+class QML_PARSER_EXPORT StatementList: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(StatementList)
@@ -1316,7 +1316,7 @@ public:
     StatementList *next;
 };
 
-class VariableStatement: public Statement
+class QML_PARSER_EXPORT VariableStatement: public Statement
 {
 public:
     QMLJS_DECLARE_AST_NODE(VariableStatement)
@@ -1341,7 +1341,7 @@ public:
     SourceLocation semicolonToken;
 };
 
-class VariableDeclaration: public Node
+class QML_PARSER_EXPORT VariableDeclaration: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(VariableDeclaration)
@@ -1361,7 +1361,7 @@ public:
     SourceLocation identifierToken;
 };
 
-class VariableDeclarationList: public Node
+class QML_PARSER_EXPORT VariableDeclarationList: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(VariableDeclarationList)
@@ -1400,7 +1400,7 @@ public:
     SourceLocation commaToken;
 };
 
-class EmptyStatement: public Statement
+class QML_PARSER_EXPORT EmptyStatement: public Statement
 {
 public:
     QMLJS_DECLARE_AST_NODE(EmptyStatement)
@@ -1420,7 +1420,7 @@ public:
     SourceLocation semicolonToken;
 };
 
-class ExpressionStatement: public Statement
+class QML_PARSER_EXPORT ExpressionStatement: public Statement
 {
 public:
     QMLJS_DECLARE_AST_NODE(ExpressionStatement)
@@ -1443,7 +1443,7 @@ public:
     SourceLocation semicolonToken;
 };
 
-class IfStatement: public Statement
+class QML_PARSER_EXPORT IfStatement: public Statement
 {
 public:
     QMLJS_DECLARE_AST_NODE(IfStatement)
@@ -1477,7 +1477,7 @@ public:
     SourceLocation elseToken;
 };
 
-class DoWhileStatement: public Statement
+class QML_PARSER_EXPORT DoWhileStatement: public Statement
 {
 public:
     QMLJS_DECLARE_AST_NODE(DoWhileStatement)
@@ -1506,7 +1506,7 @@ public:
     SourceLocation semicolonToken;
 };
 
-class WhileStatement: public Statement
+class QML_PARSER_EXPORT WhileStatement: public Statement
 {
 public:
     QMLJS_DECLARE_AST_NODE(WhileStatement)
@@ -1533,7 +1533,7 @@ public:
     SourceLocation rparenToken;
 };
 
-class ForStatement: public Statement
+class QML_PARSER_EXPORT ForStatement: public Statement
 {
 public:
     QMLJS_DECLARE_AST_NODE(ForStatement)
@@ -1564,7 +1564,7 @@ public:
     SourceLocation rparenToken;
 };
 
-class LocalForStatement: public Statement
+class QML_PARSER_EXPORT LocalForStatement: public Statement
 {
 public:
     QMLJS_DECLARE_AST_NODE(LocalForStatement)
@@ -1596,7 +1596,7 @@ public:
     SourceLocation rparenToken;
 };
 
-class ForEachStatement: public Statement
+class QML_PARSER_EXPORT ForEachStatement: public Statement
 {
 public:
     QMLJS_DECLARE_AST_NODE(ForEachStatement)
@@ -1625,7 +1625,7 @@ public:
     SourceLocation rparenToken;
 };
 
-class LocalForEachStatement: public Statement
+class QML_PARSER_EXPORT LocalForEachStatement: public Statement
 {
 public:
     QMLJS_DECLARE_AST_NODE(LocalForEachStatement)
@@ -1655,7 +1655,7 @@ public:
     SourceLocation rparenToken;
 };
 
-class ContinueStatement: public Statement
+class QML_PARSER_EXPORT ContinueStatement: public Statement
 {
 public:
     QMLJS_DECLARE_AST_NODE(ContinueStatement)
@@ -1680,7 +1680,7 @@ public:
     SourceLocation semicolonToken;
 };
 
-class BreakStatement: public Statement
+class QML_PARSER_EXPORT BreakStatement: public Statement
 {
 public:
     QMLJS_DECLARE_AST_NODE(BreakStatement)
@@ -1705,7 +1705,7 @@ public:
     SourceLocation semicolonToken;
 };
 
-class ReturnStatement: public Statement
+class QML_PARSER_EXPORT ReturnStatement: public Statement
 {
 public:
     QMLJS_DECLARE_AST_NODE(ReturnStatement)
@@ -1729,7 +1729,7 @@ public:
     SourceLocation semicolonToken;
 };
 
-class WithStatement: public Statement
+class QML_PARSER_EXPORT WithStatement: public Statement
 {
 public:
     QMLJS_DECLARE_AST_NODE(WithStatement)
@@ -1756,7 +1756,7 @@ public:
     SourceLocation rparenToken;
 };
 
-class CaseBlock: public Node
+class QML_PARSER_EXPORT CaseBlock: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(CaseBlock)
@@ -1777,7 +1777,7 @@ public:
     SourceLocation rbraceToken;
 };
 
-class SwitchStatement: public Statement
+class QML_PARSER_EXPORT SwitchStatement: public Statement
 {
 public:
     QMLJS_DECLARE_AST_NODE(SwitchStatement)
@@ -1804,7 +1804,7 @@ public:
     SourceLocation rparenToken;
 };
 
-class CaseClauses: public Node
+class QML_PARSER_EXPORT CaseClauses: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(CaseClauses)
@@ -1837,7 +1837,7 @@ public:
     CaseClauses *next;
 };
 
-class CaseClause: public Node
+class QML_PARSER_EXPORT CaseClause: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(CaseClause)
@@ -1857,7 +1857,7 @@ public:
     SourceLocation colonToken;
 };
 
-class DefaultClause: public Node
+class QML_PARSER_EXPORT DefaultClause: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(DefaultClause)
@@ -1876,7 +1876,7 @@ public:
     SourceLocation colonToken;
 };
 
-class LabelledStatement: public Statement
+class QML_PARSER_EXPORT LabelledStatement: public Statement
 {
 public:
     QMLJS_DECLARE_AST_NODE(LabelledStatement)
@@ -1902,7 +1902,7 @@ public:
     SourceLocation colonToken;
 };
 
-class ThrowStatement: public Statement
+class QML_PARSER_EXPORT ThrowStatement: public Statement
 {
 public:
     QMLJS_DECLARE_AST_NODE(ThrowStatement)
@@ -1926,7 +1926,7 @@ public:
     SourceLocation semicolonToken;
 };
 
-class Catch: public Node
+class QML_PARSER_EXPORT Catch: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(Catch)
@@ -1948,7 +1948,7 @@ public:
     SourceLocation rparenToken;
 };
 
-class Finally: public Node
+class QML_PARSER_EXPORT Finally: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(Finally)
@@ -1966,7 +1966,7 @@ public:
     SourceLocation finallyToken;
 };
 
-class TryStatement: public Statement
+class QML_PARSER_EXPORT TryStatement: public Statement
 {
 public:
     QMLJS_DECLARE_AST_NODE(TryStatement)
@@ -2007,7 +2007,7 @@ public:
     SourceLocation tryToken;
 };
 
-class FunctionExpression: public ExpressionNode
+class QML_PARSER_EXPORT FunctionExpression: public ExpressionNode
 {
 public:
     QMLJS_DECLARE_AST_NODE(FunctionExpression)
@@ -2038,7 +2038,7 @@ public:
     SourceLocation rbraceToken;
 };
 
-class FunctionDeclaration: public FunctionExpression
+class QML_PARSER_EXPORT FunctionDeclaration: public FunctionExpression
 {
 public:
     QMLJS_DECLARE_AST_NODE(FunctionDeclaration)
@@ -2052,7 +2052,7 @@ public:
     virtual void accept0(Visitor *visitor);
 };
 
-class FormalParameterList: public Node
+class QML_PARSER_EXPORT FormalParameterList: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(FormalParameterList)
@@ -2087,7 +2087,7 @@ public:
     SourceLocation identifierToken;
 };
 
-class FunctionBody: public Node
+class QML_PARSER_EXPORT FunctionBody: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(FunctionBody)
@@ -2104,7 +2104,7 @@ public:
     SourceElements *elements;
 };
 
-class Program: public Node
+class QML_PARSER_EXPORT Program: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(Program)
@@ -2121,7 +2121,7 @@ public:
     SourceElements *elements;
 };
 
-class SourceElements: public Node
+class QML_PARSER_EXPORT SourceElements: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(SourceElements)
@@ -2154,7 +2154,7 @@ public:
     SourceElements *next;
 };
 
-class SourceElement: public Node
+class QML_PARSER_EXPORT SourceElement: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(SourceElement)
@@ -2165,7 +2165,7 @@ public:
     virtual ~SourceElement() {}
 };
 
-class FunctionSourceElement: public SourceElement
+class QML_PARSER_EXPORT FunctionSourceElement: public SourceElement
 {
 public:
     QMLJS_DECLARE_AST_NODE(FunctionSourceElement)
@@ -2182,7 +2182,7 @@ public:
     FunctionDeclaration *declaration;
 };
 
-class StatementSourceElement: public SourceElement
+class QML_PARSER_EXPORT StatementSourceElement: public SourceElement
 {
 public:
     QMLJS_DECLARE_AST_NODE(StatementSourceElement)
@@ -2199,7 +2199,7 @@ public:
     Statement *statement;
 };
 
-class DebuggerStatement: public Statement
+class QML_PARSER_EXPORT DebuggerStatement: public Statement
 {
 public:
     QMLJS_DECLARE_AST_NODE(DebuggerStatement)
@@ -2222,7 +2222,7 @@ public:
     SourceLocation semicolonToken;
 };
 
-class UiProgram: public Node
+class QML_PARSER_EXPORT UiProgram: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(UiProgram)
@@ -2238,7 +2238,7 @@ public:
     UiObjectMemberList *members;
 };
 
-class UiQualifiedId: public Node
+class QML_PARSER_EXPORT UiQualifiedId: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(UiQualifiedId)
@@ -2272,7 +2272,7 @@ public:
     SourceLocation identifierToken;
 };
 
-class UiImport: public Node
+class QML_PARSER_EXPORT UiImport: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(UiImport)
@@ -2305,7 +2305,7 @@ public:
     SourceLocation semicolonToken;
 };
 
-class UiImportList: public Node
+class QML_PARSER_EXPORT UiImportList: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(UiImportList)
@@ -2352,7 +2352,7 @@ public:
     UiImportList *next;
 };
 
-class UiObjectMember: public Node
+class QML_PARSER_EXPORT UiObjectMember: public Node
 {
 public:
     virtual SourceLocation firstSourceLocation() const = 0;
@@ -2361,7 +2361,7 @@ public:
     virtual UiObjectMember *uiObjectMemberCast();
 };
 
-class UiObjectMemberList: public Node
+class QML_PARSER_EXPORT UiObjectMemberList: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(UiObjectMemberList)
@@ -2392,7 +2392,7 @@ public:
     UiObjectMember *member;
 };
 
-class UiArrayMemberList: public Node
+class QML_PARSER_EXPORT UiArrayMemberList: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(UiArrayMemberList)
@@ -2424,7 +2424,7 @@ public:
     SourceLocation commaToken;
 };
 
-class UiObjectInitializer: public Node
+class QML_PARSER_EXPORT UiObjectInitializer: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(UiObjectInitializer)
@@ -2441,7 +2441,7 @@ public:
     SourceLocation rbraceToken;
 };
 
-class UiParameterList: public Node
+class QML_PARSER_EXPORT UiParameterList: public Node
 {
 public:
     QMLJS_DECLARE_AST_NODE(UiParameterList)
@@ -2477,7 +2477,7 @@ public:
     SourceLocation identifierToken;
 };
 
-class UiPublicMember: public UiObjectMember
+class QML_PARSER_EXPORT UiPublicMember: public UiObjectMember
 {
 public:
     QMLJS_DECLARE_AST_NODE(UiPublicMember)
@@ -2529,7 +2529,7 @@ public:
     SourceLocation semicolonToken;
 };
 
-class UiObjectDefinition: public UiObjectMember
+class QML_PARSER_EXPORT UiObjectDefinition: public UiObjectMember
 {
 public:
     QMLJS_DECLARE_AST_NODE(UiObjectDefinition)
@@ -2552,7 +2552,7 @@ public:
     UiObjectInitializer *initializer;
 };
 
-class UiSourceElement: public UiObjectMember
+class QML_PARSER_EXPORT UiSourceElement: public UiObjectMember
 {
 public:
     QMLJS_DECLARE_AST_NODE(UiSourceElement)
@@ -2588,7 +2588,7 @@ public:
     Node *sourceElement;
 };
 
-class UiObjectBinding: public UiObjectMember
+class QML_PARSER_EXPORT UiObjectBinding: public UiObjectMember
 {
 public:
     QMLJS_DECLARE_AST_NODE(UiObjectBinding)
@@ -2616,7 +2616,7 @@ public:
     SourceLocation colonToken;
 };
 
-class UiScriptBinding: public UiObjectMember
+class QML_PARSER_EXPORT UiScriptBinding: public UiObjectMember
 {
 public:
     QMLJS_DECLARE_AST_NODE(UiScriptBinding)
@@ -2641,7 +2641,7 @@ public:
     SourceLocation colonToken;
 };
 
-class UiArrayBinding: public UiObjectMember
+class QML_PARSER_EXPORT UiArrayBinding: public UiObjectMember
 {
 public:
     QMLJS_DECLARE_AST_NODE(UiArrayBinding)