Fixed: If receiver in the function objj_msgSend is a class we don't need to check if it is nil as a class can never be nil without the load has already failed.

This commit is contained in:
Martin Carlberg committed 2014-04-15 13:52:41 +02:00
1 parent 88d2ed9e93
commit e8e10d4224
5 files changed
+17 -7

No files matched your search

+11 -1
View File
@@ -2170,9 +2170,18 @@ MessageSendExpression: function(node, st, c) {
// If it is 'self' we assume it will never be nil and remove that test
var receiverIsIdentifier = nodeObject.type === "Identifier" && !(st.currentMethodType() === "-" && compiler.getIvarForClass(nodeObject.name, st) && !st.getLvar(nodeObject.name, true)),
selfLvar,
receiverIsNotSelf = !receiverIsIdentifier || nodeObject.name !== "self" || !(selfLvar = st.getLvar("self", true)) || !selfLvar.scope || selfLvar.scope.assignmentToSelf;
receiverIsNotSelf;
if (receiverIsIdentifier) {
var name = nodeObject.name,
selfLvar = st.getLvar(name);
if (name === "self") {
receiverIsNotSelf = !selfLvar || !selfLvar.scope || selfLvar.scope.assignmentToSelf;
} else {
receiverIsNotSelf = !!selfLvar || !compiler.getClassDef(name);
}
if (receiverIsNotSelf) {
buffer.concat("(");
c(nodeObject, st, "Expression");
@@ -2180,6 +2189,7 @@ MessageSendExpression: function(node, st, c) {
}
c(nodeObject, st, "Expression");
} else {
receiverIsNotSelf = true;
if (!st.receiverLevel) st.receiverLevel = 0;
buffer.concat("((___r");
buffer.concat(++st.receiverLevel + "");
@@ -1,2 +1,2 @@
[CPArray new];
[object message];
@@ -1,2 +1,2 @@
(object==null?null:object.isa.objj_msgSend0(object,"message"));
CPArray.isa.objj_msgSend0(CPArray,"new");
(object==null?null:object.isa.objj_msgSend0(object,"message"));
@@ -1,2 +1,2 @@
[CPArray arrayWithArray:[]];
[object label:argument];
@@ -1,2 +1,2 @@
(object==null?null:object.isa.objj_msgSend1(object,"label:",argument));
CPArray.isa.objj_msgSend1(CPArray,"arrayWithArray:",[]);
(object==null?null:object.isa.objj_msgSend1(object,"label:",argument));