summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/runtime/Operations.cpp
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@qt.io>2017-05-30 12:48:17 +0200
committerOswald Buddenhagen <oswald.buddenhagen@qt.io>2017-05-30 12:48:17 +0200
commit881da28418d380042aa95a97f0cbd42560a64f7c (patch)
treea794dff3274695e99c651902dde93d934ea7a5af /Source/JavaScriptCore/runtime/Operations.cpp
parent7e104c57a70fdf551bb3d22a5d637cdcbc69dbea (diff)
parent0fcedcd17cc00d3dd44c718b3cb36c1033319671 (diff)
downloadqtwebkit-881da28418d380042aa95a97f0cbd42560a64f7c.tar.gz
Merge 'wip/next' into dev
Change-Id: Iff9ee5e23bb326c4371ec8ed81d56f2f05d680e9
Diffstat (limited to 'Source/JavaScriptCore/runtime/Operations.cpp')
-rw-r--r--Source/JavaScriptCore/runtime/Operations.cpp28
1 files changed, 17 insertions, 11 deletions
diff --git a/Source/JavaScriptCore/runtime/Operations.cpp b/Source/JavaScriptCore/runtime/Operations.cpp
index d6cc0ff57..5732cfd0c 100644
--- a/Source/JavaScriptCore/runtime/Operations.cpp
+++ b/Source/JavaScriptCore/runtime/Operations.cpp
@@ -23,10 +23,9 @@
#include "Operations.h"
#include "Error.h"
+#include "JSCInlines.h"
#include "JSObject.h"
#include "JSString.h"
-#include <math.h>
-#include <stdio.h>
#include <wtf/MathExtras.h>
namespace JSC {
@@ -66,15 +65,22 @@ JSValue jsTypeStringForValue(VM& vm, JSGlobalObject* globalObject, JSValue v)
return vm.smallStrings.numberString();
if (v.isString())
return vm.smallStrings.stringString();
+ if (v.isSymbol())
+ return vm.smallStrings.symbolString();
if (v.isObject()) {
+ JSObject* object = asObject(v);
// Return "undefined" for objects that should be treated
// as null when doing comparisons.
- if (asObject(v)->structure()->masqueradesAsUndefined(globalObject))
+ if (object->structure(vm)->masqueradesAsUndefined(globalObject))
return vm.smallStrings.undefinedString();
- CallData callData;
- JSObject* object = asObject(v);
- if (object->methodTable()->getCallData(object, callData) != CallTypeNone)
+ if (object->type() == JSFunctionType)
return vm.smallStrings.functionString();
+ if (object->inlineTypeFlags() & TypeOfShouldCallGetCallData) {
+ CallData callData;
+ JSObject* object = asObject(v);
+ if (object->methodTable(vm)->getCallData(object, callData) != CallTypeNone)
+ return vm.smallStrings.functionString();
+ }
}
return vm.smallStrings.objectString();
}
@@ -84,20 +90,20 @@ JSValue jsTypeStringForValue(CallFrame* callFrame, JSValue v)
return jsTypeStringForValue(callFrame->vm(), callFrame->lexicalGlobalObject(), v);
}
-bool jsIsObjectType(CallFrame* callFrame, JSValue v)
+bool jsIsObjectTypeOrNull(CallFrame* callFrame, JSValue v)
{
if (!v.isCell())
return v.isNull();
- JSType type = v.asCell()->structure()->typeInfo().type();
- if (type == StringType)
+ JSType type = v.asCell()->type();
+ if (type == StringType || type == SymbolType)
return false;
if (type >= ObjectType) {
- if (asObject(v)->structure()->masqueradesAsUndefined(callFrame->lexicalGlobalObject()))
+ if (asObject(v)->structure(callFrame->vm())->masqueradesAsUndefined(callFrame->lexicalGlobalObject()))
return false;
CallData callData;
JSObject* object = asObject(v);
- if (object->methodTable()->getCallData(object, callData) != CallTypeNone)
+ if (object->methodTable(callFrame->vm())->getCallData(object, callData) != CallTypeNone)
return false;
}
return true;