: type(-1), idIndex(-1), metatype(0), synthCache(0), defaultProperty(0), parserStatusCast(-1),
componentCompileState(0), nextAliasingObject(0), nextIdObject(0)
{
+ // initialize the members in the meta object
+ extObject.d.superdata = 0;
+ extObject.d.stringdata = 0;
+ extObject.d.data = 0;
+ extObject.d.extradata = 0;
+ extObject.d.static_metacall = 0;
+ extObject.d.relatedMetaObjects = 0;
}
QQmlScript::Object::~Object()
//
// Actual parser classes
//
-void QQmlScript::Import::extractVersion(int *maj, int *min) const
-{
- *maj = -1; *min = -1;
-
- if (!version.isEmpty()) {
- int dot = version.indexOf(QLatin1Char('.'));
- if (dot < 0) {
- *maj = version.toInt();
- *min = 0;
- } else {
- *maj = version.left(dot).toInt();
- *min = version.mid(dot+1).toInt();
- }
- }
-}
-
namespace {
class ProcessAST: protected AST::Visitor
void operator()(const QString &code, AST::Node *node);
+ static void extractVersion(QStringRef string, int *maj, int *min);
+
protected:
QQmlScript::Object *defineObjectBinding(AST::UiQualifiedId *propertyName, bool onAssignment,
return _scope.join(QLatin1String("/"));
}
+void ProcessAST::extractVersion(QStringRef string, int *maj, int *min)
+{
+ *maj = -1; *min = -1;
+
+ if (!string.isEmpty()) {
+
+ int dot = string.indexOf(QLatin1Char('.'));
+
+ if (dot < 0) {
+ *maj = string.toString().toInt();
+ *min = 0;
+ } else {
+ const QString *s = string.string();
+ int p = string.position();
+ *maj = QStringRef(s, p, dot).toString().toInt();
+ *min = QStringRef(s, p + dot + 1, string.size() - dot - 1).toString().toInt();
+ }
+ }
+}
+
QString ProcessAST::asString(AST::UiQualifiedId *node) const
{
QString s;
}
if (node->versionToken.isValid()) {
- import.version = textAt(node->versionToken);
+ extractVersion(textRefAt(node->versionToken), &import.majorVersion, &import.minorVersion);
} else if (import.type == QQmlScript::Import::Library) {
QQmlError error;
error.setDescription(QCoreApplication::translate("QQmlParser","Library import requires a version"));
};
}
-bool QQmlScript::Parser::parse(const QByteArray &qmldata, const QUrl &url,
- const QString &urlString)
+QByteArray QQmlScript::Parser::preparseData() const
+{
+ return QByteArray();
+}
+
+bool QQmlScript::Parser::parse(const QString &qmlcode, const QByteArray &preparseData,
+ const QUrl &url, const QString &urlString)
{
clear();
_scriptFile = urlString;
}
- QTextStream stream(qmldata, QIODevice::ReadOnly);
-#ifndef QT_NO_TEXTCODEC
- stream.setCodec("UTF-8");
-#endif
- QString *code = _pool.NewString(stream.readAll());
+ QString *code = _pool.NewString(qmlcode);
data = new QQmlScript::ParserJsASTData(_scriptFile);
} else {
// URI
QString uri;
- QString version;
while (true) {
if (!isUriToken(token))
}
CHECK_TOKEN(T_NUMERIC_LITERAL);
- version = script.mid(l.tokenOffset(), l.tokenLength());
+ int vmaj, vmin;
+ ProcessAST::extractVersion(QStringRef(&script, l.tokenOffset(), l.tokenLength()),
+ &vmaj, &vmin);
token = l.lex();
Import import;
import.type = Import::Library;
import.uri = uri;
- import.version = version;
+ import.majorVersion = vmaj;
+ import.minorVersion = vmin;
import.qualifier = importId;
import.location = location;