mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-08-25 04:57:03 +00:00
Merge pull request #2852 from mrcarlberg/msg_send_return_undefined_when_receiver_is_undefined
New: msgSend will return undefined instead of nil when the receiver is undefined.
This commit is contained in:
+2
-2
@@ -463,7 +463,7 @@ var CPBrowserDelegate_browser_acceptDrop_atRow_column_dropOperation_
|
||||
|
||||
- (id)itemAtRow:(CPInteger)row inColumn:(CPInteger)column
|
||||
{
|
||||
return [_tableDelegates[column] childAtIndex:row];
|
||||
return [_tableDelegates[column] childAtIndex:row] || nil;
|
||||
}
|
||||
|
||||
- (BOOL)isLeafItem:(id)item
|
||||
@@ -473,7 +473,7 @@ var CPBrowserDelegate_browser_acceptDrop_atRow_column_dropOperation_
|
||||
|
||||
- (id)parentForItemsInColumn:(CPInteger)column
|
||||
{
|
||||
return [_tableDelegates[column] _item];
|
||||
return [_tableDelegates[column] _item] || nil;
|
||||
}
|
||||
|
||||
- (CPSet)selectedItems
|
||||
|
||||
@@ -2447,7 +2447,9 @@ ArrayLiteral: function(node, st, c) {
|
||||
buffer.concat(++st.receiverLevel + "");
|
||||
buffer.concat(" = (CPArray.isa.method_msgSend[\"alloc\"] || _objj_forward)(CPArray, \"alloc\"), ___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
buffer.concat(" == null ? null : (___r");
|
||||
buffer.concat(" == null ? ___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
buffer.concat(" : (___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
buffer.concat(".isa.method_msgSend[\"init\"] || _objj_forward)(___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
@@ -2457,7 +2459,9 @@ ArrayLiteral: function(node, st, c) {
|
||||
buffer.concat(++st.receiverLevel + "");
|
||||
buffer.concat(" = CPArray.isa.objj_msgSend0(CPArray, \"alloc\"), ___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
buffer.concat(" == null ? null : ___r");
|
||||
buffer.concat(" == null ? ___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
buffer.concat(" : ___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
buffer.concat(".isa.objj_msgSend0(___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
@@ -2472,7 +2476,9 @@ ArrayLiteral: function(node, st, c) {
|
||||
buffer.concat(++st.receiverLevel + "");
|
||||
buffer.concat(" = (CPArray.isa.method_msgSend[\"alloc\"] || _objj_forward)(CPArray, \"alloc\"), ___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
buffer.concat(" == null ? null : (___r");
|
||||
buffer.concat(" == null ? ___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
buffer.concat(" : (___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
buffer.concat(".isa.method_msgSend[\"initWithObjects:count:\"] || _objj_forward)(___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
@@ -2482,7 +2488,9 @@ ArrayLiteral: function(node, st, c) {
|
||||
buffer.concat(++st.receiverLevel + "");
|
||||
buffer.concat(" = CPArray.isa.objj_msgSend0(CPArray, \"alloc\"), ___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
buffer.concat(" == null ? null : ___r");
|
||||
buffer.concat(" == null ? ___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
buffer.concat(" : ___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
buffer.concat(".isa.objj_msgSend2(___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
@@ -2541,7 +2549,9 @@ DictionaryLiteral: function(node, st, c) {
|
||||
buffer.concat(++st.receiverLevel + "");
|
||||
buffer.concat(" = (CPDictionary.isa.method_msgSend[\"alloc\"] || _objj_forward)(CPDictionary, \"alloc\"), ___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
buffer.concat(" == null ? null : (___r");
|
||||
buffer.concat(" == null ? ___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
buffer.concat(" : (___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
buffer.concat(".isa.method_msgSend[\"init\"] || _objj_forward)(___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
@@ -2551,7 +2561,9 @@ DictionaryLiteral: function(node, st, c) {
|
||||
buffer.concat(++st.receiverLevel + "");
|
||||
buffer.concat(" = CPDictionary.isa.objj_msgSend0(CPDictionary, \"alloc\"), ___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
buffer.concat(" == null ? null : ___r");
|
||||
buffer.concat(" == null ? ___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
buffer.concat(" : ___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
buffer.concat(".isa.objj_msgSend0(___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
@@ -2566,7 +2578,9 @@ DictionaryLiteral: function(node, st, c) {
|
||||
buffer.concat(++st.receiverLevel + "");
|
||||
buffer.concat(" = (CPDictionary.isa.method_msgSend[\"alloc\"] || _objj_forward)(CPDictionary, \"alloc\"), ___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
buffer.concat(" == null ? null : (___r");
|
||||
buffer.concat(" == null ? ___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
buffer.concat(" : (___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
buffer.concat(".isa.method_msgSend[\"initWithObjects:forKeys:\"] || _objj_forward)(___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
@@ -2576,7 +2590,9 @@ DictionaryLiteral: function(node, st, c) {
|
||||
buffer.concat(++st.receiverLevel + "");
|
||||
buffer.concat(" = CPDictionary.isa.objj_msgSend0(CPDictionary, \"alloc\"), ___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
buffer.concat(" == null ? null : ___r");
|
||||
buffer.concat(" == null ? ___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
buffer.concat(" : ___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
buffer.concat(".isa.objj_msgSend2(___r");
|
||||
buffer.concat(st.receiverLevel + "");
|
||||
@@ -3408,7 +3424,9 @@ MessageSendExpression: function(node, st, c) {
|
||||
if (receiverIsNotSelf) {
|
||||
buffer.concat("(", node);
|
||||
c(nodeObject, st, "Expression");
|
||||
buffer.concat(" == null ? null : ", node);
|
||||
buffer.concat(" == null ? ", node);
|
||||
c(nodeObject, st, "Expression");
|
||||
buffer.concat(" : ", node);
|
||||
}
|
||||
if (inlineMsgSend)
|
||||
buffer.concat("(", node);
|
||||
@@ -3421,7 +3439,9 @@ MessageSendExpression: function(node, st, c) {
|
||||
c(nodeObject, st, "Expression");
|
||||
buffer.concat(")", node);
|
||||
buffer.concat(", ___r" + st.receiverLevel, node);
|
||||
buffer.concat(" == null ? null : ", node);
|
||||
buffer.concat(" == null ? ", node);
|
||||
buffer.concat("___r" + st.receiverLevel, node);
|
||||
buffer.concat(" : ", node);
|
||||
if (inlineMsgSend)
|
||||
buffer.concat("(", node);
|
||||
buffer.concat("___r" + st.receiverLevel, node);
|
||||
|
||||
@@ -838,7 +838,7 @@ var __objj_msgSend__StackDepth = 0;
|
||||
GLOBAL(objj_msgSend) = function(/*id*/ aReceiver, /*SEL*/ aSelector)
|
||||
{
|
||||
if (aReceiver == nil)
|
||||
return nil;
|
||||
return aReceiver;
|
||||
|
||||
var isa = aReceiver.isa;
|
||||
|
||||
|
||||
@@ -41,6 +41,16 @@
|
||||
return anotherNumber - aNumber;
|
||||
}
|
||||
|
||||
-(id)nil
|
||||
{
|
||||
return nil;
|
||||
}
|
||||
|
||||
-(id)undefined
|
||||
{
|
||||
return undefined;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation MethodTest : OJTestCase
|
||||
@@ -135,4 +145,14 @@
|
||||
[self assert:method_getNumberOfArguments(method) equals:3];
|
||||
}
|
||||
|
||||
- (void)testReturnNil
|
||||
{
|
||||
[self assert:[[testClass nil] someSelector] equals:null];
|
||||
}
|
||||
|
||||
- (void)testReturnUndefined
|
||||
{
|
||||
[self assert:[[testClass undefined] someSelector] equals:undefined];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
|
||||
(object==null?null:(object.isa.method_msgSend[":"]||_objj_forward)(object,":",argument));
|
||||
(object==null?object:(object.isa.method_msgSend[":"]||_objj_forward)(object,":",argument));
|
||||
@@ -1,2 +1,2 @@
|
||||
|
||||
(object==null?null:object.isa.objj_msgSend1(object,":",argument));
|
||||
(object==null?object:object.isa.objj_msgSend1(object,":",argument));
|
||||
@@ -1,2 +1,2 @@
|
||||
var a=0;
|
||||
((___r1=a++<2?small_target:big_target),___r1==null?null:(___r1.isa.method_msgSend["doStuff"]||_objj_forward)(___r1,"doStuff"));
|
||||
((___r1=a++<2?small_target:big_target),___r1==null?___r1:(___r1.isa.method_msgSend["doStuff"]||_objj_forward)(___r1,"doStuff"));
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
var a=0;
|
||||
((___r1=a++<2?small_target:big_target),___r1==null?null:___r1.isa.objj_msgSend0(___r1,"doStuff"));
|
||||
((___r1=a++<2?small_target:big_target),___r1==null?___r1:___r1.isa.objj_msgSend0(___r1,"doStuff"));
|
||||
|
||||
@@ -1 +1 @@
|
||||
(object==null?null:(object.isa.method_msgSend["for:in:nil:"]||_objj_forward)(object,"for:in:nil:",a,b,nil));
|
||||
(object==null?object:(object.isa.method_msgSend["for:in:nil:"]||_objj_forward)(object,"for:in:nil:",a,b,nil));
|
||||
@@ -1 +1 @@
|
||||
(object==null?null:object.isa.objj_msgSend3(object,"for:in:nil:",a,b,nil));
|
||||
(object==null?object:object.isa.objj_msgSend3(object,"for:in:nil:",a,b,nil));
|
||||
@@ -1,2 +1,2 @@
|
||||
|
||||
(object==null?null:(object.isa.method_msgSend["label:label2:label3:label4:"]||_objj_forward)(object,"label:label2:label3:label4:",argument,argument2,argument3,argument4));
|
||||
(object==null?object:(object.isa.method_msgSend["label:label2:label3:label4:"]||_objj_forward)(object,"label:label2:label3:label4:",argument,argument2,argument3,argument4));
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
|
||||
(object==null?null:object.isa.objj_msgSend(object,"label:label2:label3:label4:",argument,argument2,argument3,argument4));
|
||||
(object==null?object:object.isa.objj_msgSend(object,"label:label2:label3:label4:",argument,argument2,argument3,argument4));
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
(CPArray.isa.method_msgSend["new"]||_objj_forward)(CPArray,"new");
|
||||
(object==null?null:(object.isa.method_msgSend["message"]||_objj_forward)(object,"message"));
|
||||
(object==null?object:(object.isa.method_msgSend["message"]||_objj_forward)(object,"message"));
|
||||
@@ -1,2 +1,2 @@
|
||||
CPArray.isa.objj_msgSend0(CPArray,"new");
|
||||
(object==null?null:object.isa.objj_msgSend0(object,"message"));
|
||||
(object==null?object:object.isa.objj_msgSend0(object,"message"));
|
||||
@@ -1,2 +1,2 @@
|
||||
(CPArray.isa.method_msgSend["arrayWithArray:"]||_objj_forward)(CPArray,"arrayWithArray:",[]);
|
||||
(object==null?null:(object.isa.method_msgSend["label:"]||_objj_forward)(object,"label:",argument));
|
||||
(object==null?object:(object.isa.method_msgSend["label:"]||_objj_forward)(object,"label:",argument));
|
||||
@@ -1,2 +1,2 @@
|
||||
CPArray.isa.objj_msgSend1(CPArray,"arrayWithArray:",[]);
|
||||
(object==null?null:object.isa.objj_msgSend1(object,"label:",argument));
|
||||
(object==null?object:object.isa.objj_msgSend1(object,"label:",argument));
|
||||
@@ -3,9 +3,9 @@ objj_registerClassPair(the_class);
|
||||
class_addMethods(the_class,[new objj_method(sel_getUid("mySelector"),function $MyClass__mySelector(_1,_2){
|
||||
(_1.isa.method_msgSend["init"]||_objj_forward)(_1,"init");
|
||||
_1=nil;
|
||||
(_1==null?null:(_1.isa.method_msgSend["init"]||_objj_forward)(_1,"init"));
|
||||
(_1==null?_1:(_1.isa.method_msgSend["init"]||_objj_forward)(_1,"init"));
|
||||
},["id"]),new objj_method(sel_getUid("mySelector2"),function $MyClass__mySelector2(_3,_4){
|
||||
(_3.isa.method_msgSend["init"]||_objj_forward)(_3,"init");
|
||||
eval("self = null;");
|
||||
(_3==null?null:(_3.isa.method_msgSend["init"]||_objj_forward)(_3,"init"));
|
||||
(_3==null?_3:(_3.isa.method_msgSend["init"]||_objj_forward)(_3,"init"));
|
||||
},["id"])]);
|
||||
@@ -3,9 +3,9 @@ objj_registerClassPair(the_class);
|
||||
class_addMethods(the_class,[new objj_method(sel_getUid("mySelector"),function $MyClass__mySelector(_1,_2){
|
||||
_1.isa.objj_msgSend0(_1,"init");
|
||||
_1=nil;
|
||||
(_1==null?null:_1.isa.objj_msgSend0(_1,"init"));
|
||||
(_1==null?_1:_1.isa.objj_msgSend0(_1,"init"));
|
||||
},["id"]),new objj_method(sel_getUid("mySelector2"),function $MyClass__mySelector2(_3,_4){
|
||||
_3.isa.objj_msgSend0(_3,"init");
|
||||
eval("self = null;");
|
||||
(_3==null?null:_3.isa.objj_msgSend0(_3,"init"));
|
||||
(_3==null?_3:_3.isa.objj_msgSend0(_3,"init"));
|
||||
},["id"])]);
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
|
||||
(object==null?null:(object.isa.method_msgSend["label:"]||_objj_forward)(object,"label:",condition?true:false));
|
||||
(object==null?null:(object.isa.method_msgSend["label:"]||_objj_forward)(object,"label:",condition?true:false));
|
||||
(object==null?null:(object.isa.method_msgSend["label:"]||_objj_forward)(object,"label:",condition?true:false));
|
||||
(object==null?object:(object.isa.method_msgSend["label:"]||_objj_forward)(object,"label:",condition?true:false));
|
||||
(object==null?object:(object.isa.method_msgSend["label:"]||_objj_forward)(object,"label:",condition?true:false));
|
||||
(object==null?object:(object.isa.method_msgSend["label:"]||_objj_forward)(object,"label:",condition?true:false));
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
|
||||
(object==null?null:object.isa.objj_msgSend1(object,"label:",condition?true:false));
|
||||
(object==null?null:object.isa.objj_msgSend1(object,"label:",condition?true:false));
|
||||
(object==null?null:object.isa.objj_msgSend1(object,"label:",condition?true:false));
|
||||
(object==null?object:object.isa.objj_msgSend1(object,"label:",condition?true:false));
|
||||
(object==null?object:object.isa.objj_msgSend1(object,"label:",condition?true:false));
|
||||
(object==null?object:object.isa.objj_msgSend1(object,"label:",condition?true:false));
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
x=function(){
|
||||
return (someIval==null?null:(someIval.isa.method_msgSend["someMethod"]||_objj_forward)(someIval,"someMethod"));
|
||||
return (someIval==null?someIval:(someIval.isa.method_msgSend["someMethod"]||_objj_forward)(someIval,"someMethod"));
|
||||
};
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
x=function(){
|
||||
return (someIval==null?null:someIval.isa.objj_msgSend0(someIval,"someMethod"));
|
||||
return (someIval==null?someIval:someIval.isa.objj_msgSend0(someIval,"someMethod"));
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user