Skip to content

Commit

Permalink
Add global symbol for to_ary
Browse files Browse the repository at this point in the history
  • Loading branch information
dbussink committed Feb 5, 2013
1 parent 761cafc commit 0bd52d7
Show file tree
Hide file tree
Showing 9 changed files with 30 additions and 28 deletions.
4 changes: 2 additions & 2 deletions vm/builtin/array.cpp
Expand Up @@ -101,8 +101,8 @@ namespace rubinius {
Array* Array::to_ary(STATE, Object* value, CallFrame* call_frame) {
if(Tuple* tup = try_as<Tuple>(value)) {
return Array::from_tuple(state, tup);
} else if(CBOOL(value->respond_to(state, state->symbol("to_ary"), cTrue))) {
Arguments args(state->symbol("to_ary"), value, 0, 0);
} else if(CBOOL(value->respond_to(state, G(sym_to_ary), cTrue))) {
Arguments args(G(sym_to_ary), value, 0, 0);
Dispatch dis(args.name());

Object* res = dis.send(state, call_frame, args);
Expand Down
4 changes: 2 additions & 2 deletions vm/builtin/block_environment.cpp
Expand Up @@ -126,8 +126,8 @@ namespace rubinius {
Array* ary = 0;

if(!(ary = try_as<Array>(obj))) {
if(CBOOL(obj->respond_to(state, state->symbol("to_ary"), cFalse))) {
obj = obj->send(state, call_frame, state->symbol("to_ary"));
if(CBOOL(obj->respond_to(state, G(sym_to_ary), cFalse))) {
obj = obj->send(state, call_frame, G(sym_to_ary));
if(!(ary = try_as<Array>(obj))) {
Exception::type_error(state, "to_ary must return an Array", call_frame);
return false;
Expand Down
4 changes: 2 additions & 2 deletions vm/builtin/proc.cpp
Expand Up @@ -76,8 +76,8 @@ namespace rubinius {
Object* obj = args.get_argument(0);

if(!(ary = try_as<Array>(obj))) {
if(CBOOL(obj->respond_to(state, state->symbol("to_ary"), cFalse))) {
obj = obj->send(state, call_frame, state->symbol("to_ary"));
if(CBOOL(obj->respond_to(state, G(sym_to_ary), cFalse))) {
obj = obj->send(state, call_frame, G(sym_to_ary));
if(!(ary = try_as<Array>(obj))) {
Exception::type_error(state, "to_ary must return an Array", call_frame);
return 0;
Expand Down
4 changes: 2 additions & 2 deletions vm/builtin/system.cpp
Expand Up @@ -1200,9 +1200,9 @@ namespace rubinius {
Object* System::vm_method_missing_reason(STATE) {
switch(state->vm()->method_missing_reason()) {
case ePrivate:
return state->symbol("private");
return G(sym_private);
case eProtected:
return state->symbol("protected");
return G(sym_protected);
case eSuper:
return state->symbol("super");
case eVCall:
Expand Down
6 changes: 3 additions & 3 deletions vm/capi/capi.cpp
Expand Up @@ -688,15 +688,15 @@ extern "C" {

switch(kind) {
case cCApiPrivateMethod:
visibility = state->symbol("private");
visibility = G(sym_private);
break;

case cCApiProtectedMethod:
visibility = state->symbol("protected");
visibility = G(sym_protected);
break;

default: /* Also catches singletons for now. @todo Verify OK. --rue */
visibility = state->symbol("public");
visibility = G(sym_public);
break;
}

Expand Down
3 changes: 2 additions & 1 deletion vm/globals.hpp
Expand Up @@ -62,7 +62,7 @@ namespace rubinius {
TypedRoot<Symbol*> sym_from_literal, sym_method_added, sym_s_method_added, sym_init_copy;
TypedRoot<Symbol*> sym_plus, sym_minus, sym_equal, sym_nequal, sym_tequal, sym_lt, sym_gt;
TypedRoot<Symbol*> sym_initialize;
TypedRoot<Symbol*> sym_coerce_to_array;
TypedRoot<Symbol*> sym_coerce_to_array, sym_to_ary;
TypedRoot<Symbol*> sym_allocation_site;

TypedRoot<Class*> exception;
Expand Down Expand Up @@ -172,6 +172,7 @@ namespace rubinius {
sym_gt(&roots),
sym_initialize(&roots),
sym_coerce_to_array(&roots),
sym_to_ary(&roots),
sym_allocation_site(&roots),
exception(&roots),
exc_arg(&roots),
Expand Down
8 changes: 4 additions & 4 deletions vm/instructions.def
Expand Up @@ -1246,8 +1246,8 @@ instruction cast_for_multi_block_arg() [ -- array ]
Object* obj = call_frame->arguments->get_argument(0);
if(kind_of<Array>(obj)) {
stack_push(obj);
} else if(CBOOL(obj->respond_to(state, state->symbol("to_ary"), cFalse))) {
obj = obj->send(state, call_frame, state->symbol("to_ary"));
} else if(CBOOL(obj->respond_to(state, G(sym_to_ary), cFalse))) {
obj = obj->send(state, call_frame, G(sym_to_ary));
if(kind_of<Array>(obj)) {
stack_push(obj);
} else {
Expand Down Expand Up @@ -1288,9 +1288,9 @@ instruction cast_for_splat_block_arg() [ -- arguments ]
* to be called and its return value ignored. Ultimately, the original
* object itself is wrapped in an Array and passed to the block.
*/
if(CBOOL(obj->respond_to(state, state->symbol("to_ary"), cFalse))) {
if(CBOOL(obj->respond_to(state, G(sym_to_ary), cFalse))) {
OnStack<1> os(state, obj);
Object* ignored = obj->send(state, call_frame, state->symbol("to_ary"));
Object* ignored = obj->send(state, call_frame, G(sym_to_ary));
if(!ignored->nil_p() && !kind_of<Array>(ignored)) {
Exception::type_error(state, "to_ary must return an Array", call_frame);
RUN_EXCEPTION();
Expand Down
24 changes: 12 additions & 12 deletions vm/llvm/jit_util.cpp
Expand Up @@ -348,8 +348,8 @@ extern "C" {
Object* obj = args.get_argument(0);
if(Array* ary = try_as<Array>(obj)) {
args.use_array(ary);
} else if(CBOOL(obj->respond_to(state, state->symbol("to_ary"), cFalse))) {
obj = obj->send(state, call_frame, state->symbol("to_ary"));
} else if(CBOOL(obj->respond_to(state, G(sym_to_ary), cFalse))) {
obj = obj->send(state, call_frame, G(sym_to_ary));
if(Array* ary2 = try_as<Array>(obj)) {
args.use_array(ary2);
} else {
Expand All @@ -367,8 +367,8 @@ extern "C" {
{
Array* ary = try_as<Array>(obj);

if(!ary && CBOOL(obj->respond_to(state, state->symbol("to_ary"), cFalse))) {
obj = obj->send(state, call_frame, state->symbol("to_ary"));
if(!ary && CBOOL(obj->respond_to(state, G(sym_to_ary), cFalse))) {
obj = obj->send(state, call_frame, G(sym_to_ary));
if(Array* ary2 = try_as<Array>(obj)) {
ary = ary2;
} else {
Expand Down Expand Up @@ -421,9 +421,9 @@ extern "C" {
* to be called and its return value ignored. Ultimately, the original
* object itself is wrapped in an Array and passed to the block.
*/
if(CBOOL(obj->respond_to(state, state->symbol("to_ary"), cFalse))) {
if(CBOOL(obj->respond_to(state, G(sym_to_ary), cFalse))) {
OnStack<1> os(state, obj);
Object* ignored = obj->send(state, call_frame, state->symbol("to_ary"));
Object* ignored = obj->send(state, call_frame, G(sym_to_ary));
if(!ignored->nil_p() && !kind_of<Array>(ignored)) {
Exception::type_error(state, "to_ary must return an Array", call_frame);
return 0;
Expand All @@ -450,8 +450,8 @@ extern "C" {
Object* obj = args.get_argument(0);
if(kind_of<Array>(obj)) {
return obj;
} else if(CBOOL(obj->respond_to(state, state->symbol("to_ary"), cFalse))) {
obj = obj->send(state, call_frame, state->symbol("to_ary"));
} else if(CBOOL(obj->respond_to(state, G(sym_to_ary), cFalse))) {
obj = obj->send(state, call_frame, G(sym_to_ary));
if(kind_of<Array>(obj)) {
return obj;
} else {
Expand Down Expand Up @@ -493,9 +493,9 @@ extern "C" {
* to be called and its return value ignored. Ultimately, the original
* object itself is wrapped in an Array and passed to the block.
*/
if(CBOOL(obj->respond_to(state, state->symbol("to_ary"), cFalse))) {
if(CBOOL(obj->respond_to(state, G(sym_to_ary), cFalse))) {
OnStack<1> os(state, obj);
Object* ignored = obj->send(state, call_frame, state->symbol("to_ary"));
Object* ignored = obj->send(state, call_frame, G(sym_to_ary));
if(!kind_of<Array>(ignored)) {
Exception::type_error(state, "to_ary must return an Array", call_frame);
obj = 0;
Expand Down Expand Up @@ -535,8 +535,8 @@ extern "C" {

if(kind_of<Array>(obj)) {
// Nothing! it's good.
} else if(CBOOL(obj->respond_to(state, state->symbol("to_ary"), cFalse))) {
obj = obj->send(state, call_frame, state->symbol("to_ary"));
} else if(CBOOL(obj->respond_to(state, G(sym_to_ary), cFalse))) {
obj = obj->send(state, call_frame, G(sym_to_ary));
if(!kind_of<Array>(obj)) {
Exception::type_error(state, "to_ary must return an Array", call_frame);
obj = 0;
Expand Down
1 change: 1 addition & 0 deletions vm/ontology.cpp
Expand Up @@ -512,6 +512,7 @@ namespace rubinius {
add_sym(object_id);
add_sym(call);
add_sym(coerce_to_array);
add_sym(to_ary);
#undef add_sym
GO(sym_s_method_added).set(symbol("singleton_method_added"));
GO(sym_init_copy).set(symbol("initialize_copy"));
Expand Down

0 comments on commit 0bd52d7

Please sign in to comment.