Changeset 21182

Show
Ignore:
Timestamp:
07/03/08 16:03:58 (3 months ago)
Author:
ruoso
Message:

[smop] some more work in p6opaque, delegation almost working... I need to finish the "setting how" method, so I can effectively test the delegation

Location:
v6/smop
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • v6/smop/include/smop_identifiers.h

    r20083 r21182  
    2727extern SMOP__Object* SMOP__ID__DESTROY;           /* "DESTROY" */ 
    2828extern SMOP__Object* SMOP__ID__DESTROYALL;        /* "DESTROYALL" */ 
     29extern SMOP__Object* SMOP__ID__dispatch;          /* "dispatch" */ 
    2930extern SMOP__Object* SMOP__ID__eval;              /* "eval" */ 
    3031extern SMOP__Object* SMOP__ID__FETCH;             /* "FETCH" */ 
     
    3435extern SMOP__Object* SMOP__ID__has_next;          /* "has_next" */ 
    3536extern SMOP__Object* SMOP__ID__identifier;        /* "identifier" */ 
     37extern SMOP__Object* SMOP__ID__invocant;          /* "invocant" */ 
    3638extern SMOP__Object* SMOP__ID__isa;               /* "isa" */ 
    3739extern SMOP__Object* SMOP__ID__jail;              /* "jail" */ 
  • v6/smop/src/idconst_decl_all.h

    r20083 r21182  
    1818SMOP__Object* SMOP__ID__DESTROY; 
    1919SMOP__Object* SMOP__ID__DESTROYALL; 
     20SMOP__Object* SMOP__ID__dispatch; 
    2021SMOP__Object* SMOP__ID__eval; 
    2122SMOP__Object* SMOP__ID__FETCH; 
     
    2526SMOP__Object* SMOP__ID__has_next; 
    2627SMOP__Object* SMOP__ID__identifier; 
     28SMOP__Object* SMOP__ID__invocant; 
    2729SMOP__Object* SMOP__ID__isa; 
    2830SMOP__Object* SMOP__ID__jail; 
  • v6/smop/src/idconst_init_all.c

    r20478 r21182  
    1 SMOP__ID__back = SMOP__NATIVE__idconst_create_nolist( "back" ); 
    2 SMOP__ID__bless = SMOP__NATIVE__idconst_create_nolist( "bless" ); 
    3 SMOP__ID__BUILD = SMOP__NATIVE__idconst_create_nolist( "BUILD" ); 
    4 SMOP__ID__BUILDALL = SMOP__NATIVE__idconst_create_nolist( "BUILDALL" ); 
    5 SMOP__ID__call = SMOP__NATIVE__idconst_create_nolist( "call" ); 
    6 SMOP__ID__can = SMOP__NATIVE__idconst_create_nolist( "can" ); 
    7 SMOP__ID__capture = SMOP__NATIVE__idconst_create_nolist( "capture" ); 
    8 SMOP__ID__clone = SMOP__NATIVE__idconst_create_nolist( "clone" ); 
    9 SMOP__ID__continuation = SMOP__NATIVE__idconst_create_nolist( "continuation" ); 
    10 SMOP__ID__continues = SMOP__NATIVE__idconst_create_nolist( "continues" ); 
    11 SMOP__ID__copy = SMOP__NATIVE__idconst_create_nolist( "copy" ); 
    12 SMOP__ID__CREATE = SMOP__NATIVE__idconst_create_nolist( "CREATE" ); 
    13 SMOP__ID__current = SMOP__NATIVE__idconst_create_nolist( "current" ); 
    14 SMOP__ID__debug = SMOP__NATIVE__idconst_create_nolist( "debug" ); 
    15 SMOP__ID__defined = SMOP__NATIVE__idconst_create_nolist( "defined" ); 
    16 SMOP__ID__drop = SMOP__NATIVE__idconst_create_nolist( "drop" ); 
    17 SMOP__ID__does = SMOP__NATIVE__idconst_create_nolist( "does" ); 
    18 SMOP__ID__DESTROY = SMOP__NATIVE__idconst_create_nolist( "DESTROY" ); 
    19 SMOP__ID__DESTROYALL = SMOP__NATIVE__idconst_create_nolist( "DESTROYALL" ); 
    20 SMOP__ID__eval = SMOP__NATIVE__idconst_create_nolist( "eval" ); 
    21 SMOP__ID__FETCH = SMOP__NATIVE__idconst_create_nolist( "FETCH" ); 
    22 SMOP__ID__forget = SMOP__NATIVE__idconst_create_nolist( "forget" ); 
    23 SMOP__ID__free = SMOP__NATIVE__idconst_create_nolist( "free" ); 
    24 SMOP__ID__goto = SMOP__NATIVE__idconst_create_nolist( "goto" ); 
    25 SMOP__ID__has_next = SMOP__NATIVE__idconst_create_nolist( "has_next" ); 
    26 SMOP__ID__identifier = SMOP__NATIVE__idconst_create_nolist( "identifier" ); 
    27 SMOP__ID__isa = SMOP__NATIVE__idconst_create_nolist( "isa" ); 
    28 SMOP__ID__jail = SMOP__NATIVE__idconst_create_nolist( "jail" ); 
    29 SMOP__ID__lexical = SMOP__NATIVE__idconst_create_nolist( "lexical" ); 
    30 SMOP__ID__loop = SMOP__NATIVE__idconst_create_nolist( "loop" ); 
    31 SMOP__ID__move_capturize = SMOP__NATIVE__idconst_create_nolist( "move_capturize" ); 
    32 SMOP__ID__move_identifier = SMOP__NATIVE__idconst_create_nolist( "move_identifier" ); 
    33 SMOP__ID__move_responder = SMOP__NATIVE__idconst_create_nolist( "move_responder" ); 
    34 SMOP__ID__new = SMOP__NATIVE__idconst_create_nolist( "new" ); 
    35 SMOP__ID__next = SMOP__NATIVE__idconst_create_nolist( "next" ); 
    36 SMOP__ID__past = SMOP__NATIVE__idconst_create_nolist( "past" ); 
    37 SMOP__ID__push = SMOP__NATIVE__idconst_create_nolist( "push" ); 
    38 SMOP__ID__responder = SMOP__NATIVE__idconst_create_nolist( "responder" ); 
    39 SMOP__ID__result = SMOP__NATIVE__idconst_create_nolist( "result" ); 
    40 SMOP__ID__setr = SMOP__NATIVE__idconst_create_nolist( "setr" ); 
    41 SMOP__ID__STORE = SMOP__NATIVE__idconst_create_nolist( "STORE" ); 
    42 SMOP__ID__outer = SMOP__NATIVE__idconst_create_nolist( "outer" ); 
    43 SMOP__ID__HOW_CREATE = SMOP__NATIVE__idconst_create_nolist( "^CREATE" ); 
    44 SMOP__ID__HOW_methods = SMOP__NATIVE__idconst_create_nolist( "^methods" ); 
    45 SMOP__ID__HOW_attributes = SMOP__NATIVE__idconst_create_nolist( "^attributes" ); 
    46 SMOP__ID__HOW_isa = SMOP__NATIVE__idconst_create_nolist( "^isa" ); 
    47 SMOP__ID__HOW_can = SMOP__NATIVE__idconst_create_nolist( "^can" ); 
    48 SMOP__ID__HOW_has = SMOP__NATIVE__idconst_create_nolist( "^has" ); 
    49 SMOP__ID__REPR_CREATE = SMOP__NATIVE__idconst_create_nolist( "^!CREATE" ); 
    50 SMOP__ID__REPR_DESTROY = SMOP__NATIVE__idconst_create_nolist( "^!DESTROY" ); 
    51 SMOP__ID__REPR_clone = SMOP__NATIVE__idconst_create_nolist( "^!clone" ); 
    52 SMOP__ID__REPR_bless = SMOP__NATIVE__idconst_create_nolist( "^!bless" ); 
    53 SMOP__ID__REPR_how = SMOP__NATIVE__idconst_create_nolist( "^!how" ); 
    54 SMOP__ID__REPR_initialize_instance_storage = SMOP__NATIVE__idconst_create_nolist( "^!initialize_instance_storage" ); 
    55 SMOP__ID__REPR_initialize_instance_storage_slot = SMOP__NATIVE__idconst_create_nolist( "^!initialize_instance_storage_slot" ); 
    56 SMOP__ID__REPR_destroy_instance_storage = SMOP__NATIVE__idconst_create_nolist( "^!destroy_instance_storage" ); 
    57 SMOP__ID__REPR_destroy_instance_storage_slot = SMOP__NATIVE__idconst_create_nolist( "^!destroy_instance_storage_slot" ); 
    58 SMOP__ID__REPR_defined = SMOP__NATIVE__idconst_create_nolist( "^!defined" ); 
    59 SMOP__ID__REPR_instance = SMOP__NATIVE__idconst_create_nolist( "^!instance" ); 
    60 SMOP__ID__REPR_whence = SMOP__NATIVE__idconst_create_nolist( "^!whence" ); 
    61 SMOP__ID__REPR_isa = SMOP__NATIVE__idconst_create_nolist( "^!isa" ); 
    62 SMOP__ID__REPR_role = SMOP__NATIVE__idconst_create_nolist( "^!role" ); 
    63 SMOP__ID__REPR_private_storage = SMOP__NATIVE__idconst_create_nolist( "^!private_storage" ); 
    64 SMOP__ID__REPR_class_storage = SMOP__NATIVE__idconst_create_nolist( "^!class_storage" ); 
    65 SMOP__ID__REPR_methods = SMOP__NATIVE__idconst_create_nolist( "^!methods" ); 
    66 SMOP__ID__REPR_attributes = SMOP__NATIVE__idconst_create_nolist( "^!attributes" ); 
    67 SMOP__ID__REPR_package = SMOP__NATIVE__idconst_create_nolist( "^!package" ); 
    68 SMOP__ID__REPR_properties = SMOP__NATIVE__idconst_create_nolist( "^!properties" ); 
    69 SMOP__ID__REPR_can = SMOP__NATIVE__idconst_create_nolist( "^!can" ); 
    70 SMOP__ID__REPR_has = SMOP__NATIVE__idconst_create_nolist( "^!has" ); 
    71 constlist_size = 70; 
     1SMOP__ID__back = SMOP__NATIVE__idconst_create_nolist( "back\0" ); 
     2SMOP__ID__bless = SMOP__NATIVE__idconst_create_nolist( "bless\0" ); 
     3SMOP__ID__BUILD = SMOP__NATIVE__idconst_create_nolist( "BUILD\0" ); 
     4SMOP__ID__BUILDALL = SMOP__NATIVE__idconst_create_nolist( "BUILDALL\0" ); 
     5SMOP__ID__call = SMOP__NATIVE__idconst_create_nolist( "call\0" ); 
     6SMOP__ID__can = SMOP__NATIVE__idconst_create_nolist( "can\0" ); 
     7SMOP__ID__capture = SMOP__NATIVE__idconst_create_nolist( "capture\0" ); 
     8SMOP__ID__clone = SMOP__NATIVE__idconst_create_nolist( "clone\0" ); 
     9SMOP__ID__continuation = SMOP__NATIVE__idconst_create_nolist( "continuation\0" ); 
     10SMOP__ID__continues = SMOP__NATIVE__idconst_create_nolist( "continues\0" ); 
     11SMOP__ID__copy = SMOP__NATIVE__idconst_create_nolist( "copy\0" ); 
     12SMOP__ID__CREATE = SMOP__NATIVE__idconst_create_nolist( "CREATE\0" ); 
     13SMOP__ID__current = SMOP__NATIVE__idconst_create_nolist( "current\0" ); 
     14SMOP__ID__debug = SMOP__NATIVE__idconst_create_nolist( "debug\0" ); 
     15SMOP__ID__defined = SMOP__NATIVE__idconst_create_nolist( "defined\0" ); 
     16SMOP__ID__drop = SMOP__NATIVE__idconst_create_nolist( "drop\0" ); 
     17SMOP__ID__does = SMOP__NATIVE__idconst_create_nolist( "does\0" ); 
     18SMOP__ID__DESTROY = SMOP__NATIVE__idconst_create_nolist( "DESTROY\0" ); 
     19SMOP__ID__DESTROYALL = SMOP__NATIVE__idconst_create_nolist( "DESTROYALL\0" ); 
     20SMOP__ID__dispatch = SMOP__NATIVE__idconst_create_nolist( "dispatch\0" ); 
     21SMOP__ID__eval = SMOP__NATIVE__idconst_create_nolist( "eval\0" ); 
     22SMOP__ID__FETCH = SMOP__NATIVE__idconst_create_nolist( "FETCH\0" ); 
     23SMOP__ID__forget = SMOP__NATIVE__idconst_create_nolist( "forget\0" ); 
     24SMOP__ID__free = SMOP__NATIVE__idconst_create_nolist( "free\0" ); 
     25SMOP__ID__goto = SMOP__NATIVE__idconst_create_nolist( "goto\0" ); 
     26SMOP__ID__has_next = SMOP__NATIVE__idconst_create_nolist( "has_next\0" ); 
     27SMOP__ID__identifier = SMOP__NATIVE__idconst_create_nolist( "identifier\0" ); 
     28SMOP__ID__invocant = SMOP__NATIVE__idconst_create_nolist( "invocant\0" ); 
     29SMOP__ID__isa = SMOP__NATIVE__idconst_create_nolist( "isa\0" ); 
     30SMOP__ID__jail = SMOP__NATIVE__idconst_create_nolist( "jail\0" ); 
     31SMOP__ID__lexical = SMOP__NATIVE__idconst_create_nolist( "lexical\0" ); 
     32SMOP__ID__loop = SMOP__NATIVE__idconst_create_nolist( "loop\0" ); 
     33SMOP__ID__move_capturize = SMOP__NATIVE__idconst_create_nolist( "move_capturize\0" ); 
     34SMOP__ID__move_identifier = SMOP__NATIVE__idconst_create_nolist( "move_identifier\0" ); 
     35SMOP__ID__move_responder = SMOP__NATIVE__idconst_create_nolist( "move_responder\0" ); 
     36SMOP__ID__new = SMOP__NATIVE__idconst_create_nolist( "new\0" ); 
     37SMOP__ID__next = SMOP__NATIVE__idconst_create_nolist( "next\0" ); 
     38SMOP__ID__past = SMOP__NATIVE__idconst_create_nolist( "past\0" ); 
     39SMOP__ID__push = SMOP__NATIVE__idconst_create_nolist( "push\0" ); 
     40SMOP__ID__responder = SMOP__NATIVE__idconst_create_nolist( "responder\0" ); 
     41SMOP__ID__result = SMOP__NATIVE__idconst_create_nolist( "result\0" ); 
     42SMOP__ID__setr = SMOP__NATIVE__idconst_create_nolist( "setr\0" ); 
     43SMOP__ID__STORE = SMOP__NATIVE__idconst_create_nolist( "STORE\0" ); 
     44SMOP__ID__outer = SMOP__NATIVE__idconst_create_nolist( "outer\0" ); 
     45SMOP__ID__HOW_CREATE = SMOP__NATIVE__idconst_create_nolist( "^CREATE\0" ); 
     46SMOP__ID__HOW_methods = SMOP__NATIVE__idconst_create_nolist( "^methods\0" ); 
     47SMOP__ID__HOW_attributes = SMOP__NATIVE__idconst_create_nolist( "^attributes\0" ); 
     48SMOP__ID__HOW_isa = SMOP__NATIVE__idconst_create_nolist( "^isa\0" ); 
     49SMOP__ID__HOW_can = SMOP__NATIVE__idconst_create_nolist( "^can\0" ); 
     50SMOP__ID__HOW_has = SMOP__NATIVE__idconst_create_nolist( "^has\0" ); 
     51SMOP__ID__REPR_CREATE = SMOP__NATIVE__idconst_create_nolist( "^!CREATE\0" ); 
     52SMOP__ID__REPR_DESTROY = SMOP__NATIVE__idconst_create_nolist( "^!DESTROY\0" ); 
     53SMOP__ID__REPR_clone = SMOP__NATIVE__idconst_create_nolist( "^!clone\0" ); 
     54SMOP__ID__REPR_bless = SMOP__NATIVE__idconst_create_nolist( "^!bless\0" ); 
     55SMOP__ID__REPR_how = SMOP__NATIVE__idconst_create_nolist( "^!how\0" ); 
     56SMOP__ID__REPR_initialize_instance_storage = SMOP__NATIVE__idconst_create_nolist( "^!initialize_instance_storage\0" ); 
     57SMOP__ID__REPR_initialize_instance_storage_slot = SMOP__NATIVE__idconst_create_nolist( "^!initialize_instance_storage_slot\0" ); 
     58SMOP__ID__REPR_destroy_instance_storage = SMOP__NATIVE__idconst_create_nolist( "^!destroy_instance_storage\0" ); 
     59SMOP__ID__REPR_destroy_instance_storage_slot = SMOP__NATIVE__idconst_create_nolist( "^!destroy_instance_storage_slot\0" ); 
     60SMOP__ID__REPR_defined = SMOP__NATIVE__idconst_create_nolist( "^!defined\0" ); 
     61SMOP__ID__REPR_instance = SMOP__NATIVE__idconst_create_nolist( "^!instance\0" ); 
     62SMOP__ID__REPR_whence = SMOP__NATIVE__idconst_create_nolist( "^!whence\0" ); 
     63SMOP__ID__REPR_isa = SMOP__NATIVE__idconst_create_nolist( "^!isa\0" ); 
     64SMOP__ID__REPR_role = SMOP__NATIVE__idconst_create_nolist( "^!role\0" ); 
     65SMOP__ID__REPR_private_storage = SMOP__NATIVE__idconst_create_nolist( "^!private_storage\0" ); 
     66SMOP__ID__REPR_class_storage = SMOP__NATIVE__idconst_create_nolist( "^!class_storage\0" ); 
     67SMOP__ID__REPR_methods = SMOP__NATIVE__idconst_create_nolist( "^!methods\0" ); 
     68SMOP__ID__REPR_attributes = SMOP__NATIVE__idconst_create_nolist( "^!attributes\0" ); 
     69SMOP__ID__REPR_package = SMOP__NATIVE__idconst_create_nolist( "^!package\0" ); 
     70SMOP__ID__REPR_properties = SMOP__NATIVE__idconst_create_nolist( "^!properties\0" ); 
     71SMOP__ID__REPR_can = SMOP__NATIVE__idconst_create_nolist( "^!can\0" ); 
     72SMOP__ID__REPR_has = SMOP__NATIVE__idconst_create_nolist( "^!has\0" ); 
     73constlist_size = 72; 
    7274constlist = calloc(constlist_size,sizeof(SMOP__Object*)); 
    7375assert(constlist); 
     
    9193constlist[17] = SMOP__ID__DESTROY; 
    9294constlist[18] = SMOP__ID__DESTROYALL; 
    93 constlist[19] = SMOP__ID__eval; 
    94 constlist[20] = SMOP__ID__FETCH; 
    95 constlist[21] = SMOP__ID__forget; 
    96 constlist[22] = SMOP__ID__free; 
    97 constlist[23] = SMOP__ID__goto; 
    98 constlist[24] = SMOP__ID__has_next; 
    99 constlist[25] = SMOP__ID__identifier; 
    100 constlist[26] = SMOP__ID__isa; 
    101 constlist[27] = SMOP__ID__jail; 
    102 constlist[28] = SMOP__ID__lexical; 
    103 constlist[29] = SMOP__ID__loop; 
    104 constlist[30] = SMOP__ID__move_capturize; 
    105 constlist[31] = SMOP__ID__move_identifier; 
    106 constlist[32] = SMOP__ID__move_responder; 
    107 constlist[33] = SMOP__ID__new; 
    108 constlist[34] = SMOP__ID__next; 
    109 constlist[35] = SMOP__ID__past; 
    110 constlist[36] = SMOP__ID__push; 
    111 constlist[37] = SMOP__ID__responder; 
    112 constlist[38] = SMOP__ID__result; 
    113 constlist[39] = SMOP__ID__setr; 
    114 constlist[40] = SMOP__ID__STORE; 
    115 constlist[41] = SMOP__ID__outer; 
    116 constlist[42] = SMOP__ID__HOW_CREATE; 
    117 constlist[43] = SMOP__ID__HOW_methods; 
    118 constlist[44] = SMOP__ID__HOW_attributes; 
    119 constlist[45] = SMOP__ID__HOW_isa; 
    120 constlist[46] = SMOP__ID__HOW_can; 
    121 constlist[47] = SMOP__ID__HOW_has; 
    122 constlist[48] = SMOP__ID__REPR_CREATE; 
    123 constlist[49] = SMOP__ID__REPR_DESTROY; 
    124 constlist[50] = SMOP__ID__REPR_clone; 
    125 constlist[51] = SMOP__ID__REPR_bless; 
    126 constlist[52] = SMOP__ID__REPR_how; 
    127 constlist[53] = SMOP__ID__REPR_initialize_instance_storage; 
    128 constlist[54] = SMOP__ID__REPR_initialize_instance_storage_slot; 
    129 constlist[55] = SMOP__ID__REPR_destroy_instance_storage; 
    130 constlist[56] = SMOP__ID__REPR_destroy_instance_storage_slot; 
    131 constlist[57] = SMOP__ID__REPR_defined; 
    132 constlist[58] = SMOP__ID__REPR_instance; 
    133 constlist[59] = SMOP__ID__REPR_whence; 
    134 constlist[60] = SMOP__ID__REPR_isa; 
    135 constlist[61] = SMOP__ID__REPR_role; 
    136 constlist[62] = SMOP__ID__REPR_private_storage; 
    137 constlist[63] = SMOP__ID__REPR_class_storage; 
    138 constlist[64] = SMOP__ID__REPR_methods; 
    139 constlist[65] = SMOP__ID__REPR_attributes; 
    140 constlist[66] = SMOP__ID__REPR_package; 
    141 constlist[67] = SMOP__ID__REPR_properties; 
    142 constlist[68] = SMOP__ID__REPR_can; 
    143 constlist[69] = SMOP__ID__REPR_has; 
     95constlist[19] = SMOP__ID__dispatch; 
     96constlist[20] = SMOP__ID__eval; 
     97constlist[21] = SMOP__ID__FETCH; 
     98constlist[22] = SMOP__ID__forget; 
     99constlist[23] = SMOP__ID__free; 
     100constlist[24] = SMOP__ID__goto; 
     101constlist[25] = SMOP__ID__has_next; 
     102constlist[26] = SMOP__ID__identifier; 
     103constlist[27] = SMOP__ID__invocant; 
     104constlist[28] = SMOP__ID__isa; 
     105constlist[29] = SMOP__ID__jail; 
     106constlist[30] = SMOP__ID__lexical; 
     107constlist[31] = SMOP__ID__loop; 
     108constlist[32] = SMOP__ID__move_capturize; 
     109constlist[33] = SMOP__ID__move_identifier; 
     110constlist[34] = SMOP__ID__move_responder; 
     111constlist[35] = SMOP__ID__new; 
     112constlist[36] = SMOP__ID__next; 
     113constlist[37] = SMOP__ID__past; 
     114constlist[38] = SMOP__ID__push; 
     115constlist[39] = SMOP__ID__responder; 
     116constlist[40] = SMOP__ID__result; 
     117constlist[41] = SMOP__ID__setr; 
     118constlist[42] = SMOP__ID__STORE; 
     119constlist[43] = SMOP__ID__outer; 
     120constlist[44] = SMOP__ID__HOW_CREATE; 
     121constlist[45] = SMOP__ID__HOW_methods; 
     122constlist[46] = SMOP__ID__HOW_attributes; 
     123constlist[47] = SMOP__ID__HOW_isa; 
     124constlist[48] = SMOP__ID__HOW_can; 
     125constlist[49] = SMOP__ID__HOW_has; 
     126constlist[50] = SMOP__ID__REPR_CREATE; 
     127constlist[51] = SMOP__ID__REPR_DESTROY; 
     128constlist[52] = SMOP__ID__REPR_clone; 
     129constlist[53] = SMOP__ID__REPR_bless; 
     130constlist[54] = SMOP__ID__REPR_how; 
     131constlist[55] = SMOP__ID__REPR_initialize_instance_storage; 
     132constlist[56] = SMOP__ID__REPR_initialize_instance_storage_slot; 
     133constlist[57] = SMOP__ID__REPR_destroy_instance_storage; 
     134constlist[58] = SMOP__ID__REPR_destroy_instance_storage_slot; 
     135constlist[59] = SMOP__ID__REPR_defined; 
     136constlist[60] = SMOP__ID__REPR_instance; 
     137constlist[61] = SMOP__ID__REPR_whence; 
     138constlist[62] = SMOP__ID__REPR_isa; 
     139constlist[63] = SMOP__ID__REPR_role; 
     140constlist[64] = SMOP__ID__REPR_private_storage; 
     141constlist[65] = SMOP__ID__REPR_class_storage; 
     142constlist[66] = SMOP__ID__REPR_methods; 
     143constlist[67] = SMOP__ID__REPR_attributes; 
     144constlist[68] = SMOP__ID__REPR_package; 
     145constlist[69] = SMOP__ID__REPR_properties; 
     146constlist[70] = SMOP__ID__REPR_can; 
     147constlist[71] = SMOP__ID__REPR_has; 
  • v6/smop/src/native_capture.c

    r20478 r21182  
    5050  if (identifier == SMOP__ID__new) { 
    5151    ret = smop_native_empty_capture; 
     52    SMOP_RELEASE(interpreter,capture); 
     53  } else if (identifier == SMOP__ID__invocant) { 
     54    SMOP__Object* invocant_capture = SMOP__NATIVE__capture_invocant(interpreter, capture); 
     55    ret = SMOP__NATIVE__capture_invocant(interpreter, invocant_capture); 
     56    SMOP_RELEASE(interpreter, invocant_capture); 
    5257    SMOP_RELEASE(interpreter,capture); 
    5358  } else if (identifier == SMOP__ID__DESTROYALL) { 
  • v6/smop/src/p6opaque.sm0p

    r21179 r21182  
    102102                                      SMOP__Object* capture) { 
    103103  SMOP__Object* ret = SMOP__NATIVE__bool_false; 
     104 
    104105  if (identifier == SMOP__ID__REPR_CREATE) { 
    105106    ret = smop_lowlevel_alloc(sizeof(SMOP__p6opaque_struct)); 
    106107    ret->RI = (SMOP__ResponderInterface*)SMOP__p6opaque__RI; 
     108 
    107109  } else if (identifier == SMOP__ID__REPR_how) { 
    108     fprintf(stderr,"[SMOP p6opaque] .^!how not implemented"); 
    109     ret = SMOP__NATIVE__bool_true; 
     110    if (SMOP_RI(capture) == (SMOP__ResponderInterface*)SMOP__NATIVE__capture) { 
     111      SMOP__Object* invocant = SMOP__NATIVE__capture_invocant(interpreter,capture); 
     112      SMOP__Object* set = SMOP__NATIVE__capture_positional(interpreter,capture,0); 
     113 
     114      if (invocant == SMOP__p6opaque__RI) { 
     115        fprintf(stderr, "[SMOP p6opaque] TODO: p6opaque RI's meta undefined yet\n"); 
     116        ret = SMOP__NATIVE__bool_false; 
     117      } else { 
     118        if (set) 
     119          smop_lowlevel_wrlock(invocant); 
     120        else 
     121          smop_lowlevel_rdlock(invocant); 
     122 
     123        if (((SMOP__p6opaque_struct*)invocant)->metadata) { 
     124          // we have our own metadata. 
     125          SMOP__Object* old = ((SMOP__p6opaque_struct*)invocant)->metadata->how; 
     126          ret = old; 
     127          if (set) { 
     128            ((SMOP__p6opaque_struct*)invocant)->metadata->how = set; 
     129            ret = set; 
     130          } 
     131          smop_lowlevel_unlock(invocant); 
     132          if (old) SMOP_RELEASE(interpreter, old); 
     133 
     134        } else if (((SMOP__p6opaque_struct*)invocant)->instanceof) { 
     135 
     136          // re-dispatch to the instanceof 
     137          SMOP__Object* super = ((SMOP__p6opaque_struct*)invocant)->instanceof; 
     138          smop_lowlevel_unlock(invocant); 
     139 
     140          if (set) { 
     141            fprintf(stderr, "[SMOP p6opaque] Can't set how on a instance\n"); 
     142          } else { 
     143 
     144            ret = SMOP__NATIVE__bool_true; 
     145            SMOP__Object* frame; 
     146            SMOP__Object* continuation = SMOP_DISPATCH(interpreter, SMOP_RI(interpreter), 
     147                                                       SMOP__ID__continuation, interpreter); 
     148            $frame = q:sm0p { 
     149              $continuation; 
     150              $super.SMOP__ID__REPR_how(); 
     151              SMOP__SLIME__CurrentFrame.move_capturize(SMOP__SLIME__Capturize.new(2,(1),(),1)); 
     152              $continuation.setr(); 
     153              $interpreter.goto(|$continuation); 
     154            }; 
     155 
     156            SMOP_DISPATCH(interpreter, SMOP_RI(interpreter), 
     157                          SMOP__ID__goto, 
     158                          frame); 
     159          } 
     160 
     161        } else if (set) { 
     162          // create the metadata struct and set the how. 
     163         
     164 
     165        } else { 
     166 
     167          fprintf(stderr,"[SMOP p6opaque] TODO: invalid .^!how call\n"); 
     168        } 
     169      } 
     170 
     171      if (set) SMOP_RELEASE(interpreter,set); 
     172      SMOP_RELEASE(interpreter,invocant); 
     173    } else { 
     174      fprintf(stderr,"[SMOP p6opaque] TODO: non-native captures\n"); 
     175      ret = SMOP__NATIVE__bool_false; 
     176    } 
    110177  } else { 
    111178    // as we want to support different captures, we'll start to use a 
     
    164231  ((SMOP__ResponderInterface*)SMOP__p6opaque__RI)->REFERENCE = p6opaque_reference; 
    165232  ((SMOP__ResponderInterface*)SMOP__p6opaque__RI)->RELEASE = p6opaque_release; 
     233  ((SMOP__ResponderInterface*)SMOP__p6opaque__RI)->id = "p6opaque"; 
    166234 
    167235}