Initialize variable

Change-Id: I37b14a406ebb9cf87fef20426a94725a2441b7cd
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Speedup JS instanceof operator

Cache the prototype of the functionobject, and inline hasInstance.
This removes a vtbl method and speeds things up quite a bit.

Change-Id: Ic68f301f7e09763d445a98bffa2cd201303f902e
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Fix url type test

it passed before, but wasn't testing two methods it
should be testing.

Change-Id: I5784ecfe1b5a00620832c7b995ed3cf5ed7e27dd
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Remove unused inline wrapper

The wrapper method for Function::code() was still there
from the times we used C++ exceptions. It's not needed
any more, so get rid of it.

Change-Id: I2ec25fbca71eeef9d7a94a38b5adfa42e4de3a84
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Use an internalClass to represent formals and locals in CallContexts

formals and locals in a CallContext where so far accessed through a
linear search in ExecutionContext::getProperty. Fix this by
introducing an internalClass for the Function used by the call
context.

Change-Id: I1141efa12b19d6de4a354bfd6e769c5ffcb8898b
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Optimize ExecutionContext::setProperty

No need to call hasProperty followed by put. Instead get the
property descriptor and call putValue for it.

Improves v8-bench by 5%.

Change-Id: Ied047126c651c033f7ad4c27deaeec08e5fee7f9
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Fixup the implementation mess for QJSValue(QString)

Until now we were using a QV4::String without engine to
represent this case. But this leads to lots of quirks, where
we ended up trying to access the engine (or the internalclass/vtable)
of this string anyway.

Now just represent it by using an QString in QJSValuePrivate, and use
an empty value to represent it. This adds a little bit of code to
QJSValue and QJSEngine, but is more stable and maintainable in the
longer term.

Change-Id: I3358165ee64e788274225743a95dfb13346225cc
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Add a static toArrayIndex() method to QV4::String

This avoids a hack in QV4::Codegen where we created a V4::String
on the stack to convert to an array index.

Change-Id: I9a88d45817bbcde52a4037a52fbae299b8c9cb1a
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Fix a bug in the code for eval

When eval was being used as an indirect call, the code
didn't reset the current context properly before
returning from the eval call.

Change-Id: Id5c7e9a897101d25593ef0f3b9945adaf19360b3
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Move the vtable pointer from the object to the internal class

This saves one pointer per object, and willmake other optimizations
easier in the future.

Change-Id: I1324cad31998896b5dc76af3c8a7ee9d86283bfe
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Remove setVTable calls in performance critical areas

Remove all the calls to setVTable that were in performance
critical parts of the code. This now brings performance
back to the level we had with the vtable inlined in the
Managed objects.

Change-Id: I76317cc5c53b5b700d1d3883b954407142a4c424
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Encapsulate the current context and fix it's usage

Encapsulate accesses to the current context, and rework
the way we push and pop this context from the context
stack.

Largely a cleanup, but simplifies the code in the long term

Change-Id: I409e378490d0ab027be6a4c01a4031b2ea35c51d
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Fix some header guards

Change-Id: Ib696c79754cc238e3f4fa356c461a07d9f06d6e7
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Remove unused member

Change-Id: I9926f1ab10ea04387f17794944dcc11f4a2a9054
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
QQmlMemoryProfiler: Fix dangling pointer use.

toUtf8 returns a temporary, accessing constData isn't safe

Change-Id: I3c4d077f24cee0eaf1df230c4d8079619967b51a
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
V4 IR: reverse propagate int32 truncation.

Change-Id: I5cb0c7798d0e530f3137710bf0e723bd7b64dc89
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Fix Flickable StopAtBounds drag over, back, over behavior.

A Flickable with StopAtBounds failed when:
1. position on a boundary.
Without lifting your finger:
2. attempt to drag beyond the boundary -> doesn't drag
3. drag back to initiate dragging
4. attempt to quickly drag beyond the boundary.

After 4, the view should be back on the boundary, but it could get
stuck a little short of the boundary.

Change-Id: I9bfbb4293f4d464bddb97c5c37e9bb91ed7d48e4
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
Fix dynamic properties in QQmlPropertyMap not always being visible in QML

QQmlPropertyMap is a fully dynamic class that can add properties at any point
in time. In order for these properties to be visible inside QML, we must
disable the property cache (instead of trying to unsuccessfully re-fresh it).

What happened in this particular case is that the QQmlPropertyMap derived type
was instantiated and the VME instruction for creating it would also assign the
property cache the compiler determined. There's no way for QQmlPropertyMap
itself to access this property cache instance (stored in
output->types[id].typePropertyCache) or invalidate it, so instead don't use the
compiler's property cache when instantiating the type.

This patch also disallows the adding properties to QQmlPropertyMap when it
is used as base type for a new QML type, as we cannot provide the derived
type to the QQmlPropertyMap constructor - this is only possible in C++.

Task-number: QTBUG-35233
Change-Id: I7fa9e4a2224ccfdd7ccb3fd9f73919ecd46058a8
Reviewed-by: Alberto Mardegan <mardy@users.sourceforge.net>
Reviewed-by: Alan Alpert (Personal) <416365416c@gmail.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Fix data layout of Managed class

The internal class should really be the first member. The
flags should go away over time.

Change-Id: Id2373a438e2af63a55704819c9dd5569c3895080
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Fix dependency calculation for context and scope properties

We were incorrectly calculating writing to a context or scope property as a
dependency for an expression. We don't know whether a property is being written
only or also being read from at lookup time, but we can make that decision in
the isel then when generating the move instructions.

So initially context and scope properties end up in a candidate set first
and get promoted to real dependencies when they're being used in reading
moves.

Task-number: QTBUG-35210
Change-Id: Ia67057abafc2d611e1e6605327b4965ebe91cbed
Reviewed-by: Lars Knoll <lars.knoll@digia.com>