- Timestamp:
- 09/07/08 20:02:24 (3 months ago)
- Location:
- v6/smop
- Files:
-
- 9 modified
-
CMakeLists.txt (modified) (2 diffs)
-
include/smop_identifiers.h (modified) (4 diffs)
-
include/smop_s1p.h (modified) (1 diff)
-
src/idconst_decl_all.h (modified) (3 diffs)
-
src/idconst_init_all.c (modified) (5 diffs)
-
src/native_bool.c (modified) (1 diff)
-
src/smop_internal.h (modified) (2 diffs)
-
src/smop_s1p_array.c (modified) (2 diffs)
-
src/smop_s1p_array_iterator.sm0p (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
v6/smop/CMakeLists.txt
r22180 r22183 71 71 src/smop_s1p_code.sm0p 72 72 src/smop_s1p_map.sm0p 73 src/smop_s1p_array_iterator.sm0p 73 74 ) 74 75 compile_sm0p (${sm0p_file}) … … 90 91 src/smop_mold.c 91 92 src/smop_s1p_array.c 93 src/smop_s1p_array_iterator.c 92 94 src/smop_s1p_attribute.c 93 95 src/smop_s1p_capturize.c -
v6/smop/include/smop_identifiers.h
r22092 r22183 26 26 extern SMOP__Object* SMOP__ID__continues; /* "continues" */ 27 27 extern SMOP__Object* SMOP__ID__copy; /* "copy" */ 28 extern SMOP__Object* SMOP__ID__count; /* "count" */ 28 29 extern SMOP__Object* SMOP__ID__create_container; /* "create_container" */ 29 30 extern SMOP__Object* SMOP__ID__CREATE; /* "CREATE" */ … … 36 37 extern SMOP__Object* SMOP__ID__does; /* "does" */ 37 38 extern SMOP__Object* SMOP__ID__drop; /* "drop" */ 38 extern SMOP__Object* SMOP__ID__elems; /* "elems" */39 extern SMOP__Object* SMOP__ID__elems; /* "elems" */ 39 40 extern SMOP__Object* SMOP__ID__eval; /* "eval" */ 40 41 extern SMOP__Object* SMOP__ID__exists; /* "exists" */ … … 51 52 extern SMOP__Object* SMOP__ID__HOW_methods; /* "^methods" */ 52 53 extern SMOP__Object* SMOP__ID__identifier; /* "identifier" */ 53 extern SMOP__Object* SMOP__ID__infix_eq; /* "infix:eq" */ 54 extern SMOP__Object* SMOP__ID__infix_num_gt; /* "infix:>" */ 54 extern SMOP__Object* SMOP__ID__infix_eq; /* "infix:eq" */ 55 extern SMOP__Object* SMOP__ID__infix_num_gt; /* "infix:>" */ 56 extern SMOP__Object* SMOP__ID__input_array; /* "input_array" */ 55 57 extern SMOP__Object* SMOP__ID__invocant; /* "invocant" */ 56 58 extern SMOP__Object* SMOP__ID__isa; /* "isa" */ 59 extern SMOP__Object* SMOP__ID__Iterator; /* "Iterator" */ 57 60 extern SMOP__Object* SMOP__ID__jail; /* "jail" */ 58 61 extern SMOP__Object* SMOP__ID__lexical; /* "lexical" */ … … 74 77 extern SMOP__Object* SMOP__ID__postcircumfix_square; /* "postcircumfix:[ ]" */ 75 78 extern SMOP__Object* SMOP__ID__postfix_plusplus; /* "postfix:++" */ 79 extern SMOP__Object* SMOP__ID__prefix_equal; /* "prefix:=" */ 76 80 extern SMOP__Object* SMOP__ID__private_name; /* "private_name" */ 77 81 extern SMOP__Object* SMOP__ID__push; /* "push" */ -
v6/smop/include/smop_s1p.h
r22136 r22183 5 5 extern SMOP__Object* SMOP__S1P__Scalar; 6 6 extern SMOP__Object* SMOP__S1P__Array; 7 extern SMOP__Object* SMOP__S1P__Array_Iterator; 7 8 extern SMOP__Object* SMOP__S1P__IO; 8 9 extern SMOP__Object* SMOP__S1P__Str; -
v6/smop/src/idconst_decl_all.h
r22092 r22183 14 14 SMOP__Object* SMOP__ID__continues; 15 15 SMOP__Object* SMOP__ID__copy; 16 SMOP__Object* SMOP__ID__count; 16 17 SMOP__Object* SMOP__ID__create_container; 17 18 SMOP__Object* SMOP__ID__CREATE; … … 41 42 SMOP__Object* SMOP__ID__infix_eq; 42 43 SMOP__Object* SMOP__ID__infix_num_gt; 44 SMOP__Object* SMOP__ID__input_array; 43 45 SMOP__Object* SMOP__ID__invocant; 44 46 SMOP__Object* SMOP__ID__isa; 47 SMOP__Object* SMOP__ID__Iterator; 45 48 SMOP__Object* SMOP__ID__jail; 46 49 SMOP__Object* SMOP__ID__lexical; … … 62 65 SMOP__Object* SMOP__ID__postcircumfix_square; 63 66 SMOP__Object* SMOP__ID__postfix_plusplus; 67 SMOP__Object* SMOP__ID__prefix_equal; 64 68 SMOP__Object* SMOP__ID__private_name; 65 69 SMOP__Object* SMOP__ID__push; -
v6/smop/src/idconst_init_all.c
r22092 r22183 14 14 SMOP__ID__continues = SMOP__NATIVE__idconst_create_nolist( "continues" ); 15 15 SMOP__ID__copy = SMOP__NATIVE__idconst_create_nolist( "copy" ); 16 SMOP__ID__count = SMOP__NATIVE__idconst_create_nolist( "count" ); 16 17 SMOP__ID__create_container = SMOP__NATIVE__idconst_create_nolist( "create_container" ); 17 18 SMOP__ID__CREATE = SMOP__NATIVE__idconst_create_nolist( "CREATE" ); … … 41 42 SMOP__ID__infix_eq = SMOP__NATIVE__idconst_create_nolist( "infix:eq" ); 42 43 SMOP__ID__infix_num_gt = SMOP__NATIVE__idconst_create_nolist( "infix:>" ); 44 SMOP__ID__input_array = SMOP__NATIVE__idconst_create_nolist( "input_array" ); 43 45 SMOP__ID__invocant = SMOP__NATIVE__idconst_create_nolist( "invocant" ); 44 46 SMOP__ID__isa = SMOP__NATIVE__idconst_create_nolist( "isa" ); 47 SMOP__ID__Iterator = SMOP__NATIVE__idconst_create_nolist( "Iterator" ); 45 48 SMOP__ID__jail = SMOP__NATIVE__idconst_create_nolist( "jail" ); 46 49 SMOP__ID__lexical = SMOP__NATIVE__idconst_create_nolist( "lexical" ); … … 62 65 SMOP__ID__postcircumfix_square = SMOP__NATIVE__idconst_create_nolist( "postcircumfix:[ ]" ); 63 66 SMOP__ID__postfix_plusplus = SMOP__NATIVE__idconst_create_nolist( "postfix:++" ); 67 SMOP__ID__prefix_equal = SMOP__NATIVE__idconst_create_nolist( "prefix:=" ); 64 68 SMOP__ID__private_name = SMOP__NATIVE__idconst_create_nolist( "private_name" ); 65 69 SMOP__ID__push = SMOP__NATIVE__idconst_create_nolist( "push" ); … … 98 102 SMOP__ID__signature = SMOP__NATIVE__idconst_create_nolist( "signature" ); 99 103 SMOP__ID__STORE = SMOP__NATIVE__idconst_create_nolist( "STORE" ); 100 constlist_size = 99;104 constlist_size = 103; 101 105 constlist = calloc(constlist_size,sizeof(SMOP__Object*)); 102 106 assert(constlist); … … 116 120 constlist[13] = SMOP__ID__continues; 117 121 constlist[14] = SMOP__ID__copy; 118 constlist[15] = SMOP__ID__create_container; 119 constlist[16] = SMOP__ID__CREATE; 120 constlist[17] = SMOP__ID__current; 121 constlist[18] = SMOP__ID__debug; 122 constlist[19] = SMOP__ID__defined; 123 constlist[20] = SMOP__ID__DESTROYALL; 124 constlist[21] = SMOP__ID__DESTROY; 125 constlist[22] = SMOP__ID__dispatch; 126 constlist[23] = SMOP__ID__does; 127 constlist[24] = SMOP__ID__drop; 128 constlist[25] = SMOP__ID__elems; 129 constlist[26] = SMOP__ID__eval; 130 constlist[27] = SMOP__ID__exists; 131 constlist[28] = SMOP__ID__FETCH; 132 constlist[29] = SMOP__ID__forget; 133 constlist[30] = SMOP__ID__free; 134 constlist[31] = SMOP__ID__goto; 135 constlist[32] = SMOP__ID__has_next; 136 constlist[33] = SMOP__ID__HOW_attributes; 137 constlist[34] = SMOP__ID__HOW_can; 138 constlist[35] = SMOP__ID__HOW_CREATE; 139 constlist[36] = SMOP__ID__HOW_has; 140 constlist[37] = SMOP__ID__HOW_isa; 141 constlist[38] = SMOP__ID__HOW_methods; 142 constlist[39] = SMOP__ID__identifier; 143 constlist[40] = SMOP__ID__infix_eq; 144 constlist[41] = SMOP__ID__infix_num_gt; 145 constlist[42] = SMOP__ID__invocant; 146 constlist[43] = SMOP__ID__isa; 147 constlist[44] = SMOP__ID__jail; 148 constlist[45] = SMOP__ID__lexical; 149 constlist[46] = SMOP__ID__loop; 150 constlist[47] = SMOP__ID__mold; 151 constlist[48] = SMOP__ID__move_capturize; 152 constlist[49] = SMOP__ID__move_identifier; 153 constlist[50] = SMOP__ID__move_responder; 154 constlist[51] = SMOP__ID__named; 155 constlist[52] = SMOP__ID__name; 156 constlist[53] = SMOP__ID__new; 157 constlist[54] = SMOP__ID__next; 158 constlist[55] = SMOP__ID__outer; 159 constlist[56] = SMOP__ID__past; 160 constlist[57] = SMOP__ID__perl; 161 constlist[58] = SMOP__ID__positional; 162 constlist[59] = SMOP__ID__postcircumfix_curly; 163 constlist[60] = SMOP__ID__postcircumfix_parens; 164 constlist[61] = SMOP__ID__postcircumfix_square; 165 constlist[62] = SMOP__ID__postfix_plusplus; 166 constlist[63] = SMOP__ID__private_name; 167 constlist[64] = SMOP__ID__push; 168 constlist[65] = SMOP__ID__register; 169 constlist[66] = SMOP__ID__REPR_attributes; 170 constlist[67] = SMOP__ID__REPR_bless; 171 constlist[68] = SMOP__ID__REPR_can; 172 constlist[69] = SMOP__ID__REPR_class_storage; 173 constlist[70] = SMOP__ID__REPR_clone; 174 constlist[71] = SMOP__ID__REPR_CREATE; 175 constlist[72] = SMOP__ID__REPR_defined; 176 constlist[73] = SMOP__ID__REPR_DESTROY; 177 constlist[74] = SMOP__ID__REPR_destroy_instance_storage; 178 constlist[75] = SMOP__ID__REPR_destroy_instance_storage_slot; 179 constlist[76] = SMOP__ID__REPR_does; 180 constlist[77] = SMOP__ID__REPR_has; 181 constlist[78] = SMOP__ID__REPR_how; 182 constlist[79] = SMOP__ID__REPR_initialize_instance_storage; 183 constlist[80] = SMOP__ID__REPR_initialize_instance_storage_slot; 184 constlist[81] = SMOP__ID__REPR_instance; 185 constlist[82] = SMOP__ID__REPR_instanceof; 186 constlist[83] = SMOP__ID__REPR_isa; 187 constlist[84] = SMOP__ID__REPR_methods; 188 constlist[85] = SMOP__ID__REPR_multimethods; 189 constlist[86] = SMOP__ID__REPR_multisubmethods; 190 constlist[87] = SMOP__ID__REPR_package; 191 constlist[88] = SMOP__ID__REPR_private_storage; 192 constlist[89] = SMOP__ID__REPR_properties; 193 constlist[90] = SMOP__ID__REPR_submethods; 194 constlist[91] = SMOP__ID__REPR_whence; 195 constlist[92] = SMOP__ID__REPR_who; 196 constlist[93] = SMOP__ID__responder; 197 constlist[94] = SMOP__ID__result; 198 constlist[95] = SMOP__ID__setr; 199 constlist[96] = SMOP__ID__shift; 200 constlist[97] = SMOP__ID__signature; 201 constlist[98] = SMOP__ID__STORE; 122 constlist[15] = SMOP__ID__count; 123 constlist[16] = SMOP__ID__create_container; 124 constlist[17] = SMOP__ID__CREATE; 125 constlist[18] = SMOP__ID__current; 126 constlist[19] = SMOP__ID__debug; 127 constlist[20] = SMOP__ID__defined; 128 constlist[21] = SMOP__ID__DESTROYALL; 129 constlist[22] = SMOP__ID__DESTROY; 130 constlist[23] = SMOP__ID__dispatch; 131 constlist[24] = SMOP__ID__does; 132 constlist[25] = SMOP__ID__drop; 133 constlist[26] = SMOP__ID__elems; 134 constlist[27] = SMOP__ID__eval; 135 constlist[28] = SMOP__ID__exists; 136 constlist[29] = SMOP__ID__FETCH; 137 constlist[30] = SMOP__ID__forget; 138 constlist[31] = SMOP__ID__free; 139 constlist[32] = SMOP__ID__goto; 140 constlist[33] = SMOP__ID__has_next; 141 constlist[34] = SMOP__ID__HOW_attributes; 142 constlist[35] = SMOP__ID__HOW_can; 143 constlist[36] = SMOP__ID__HOW_CREATE; 144 constlist[37] = SMOP__ID__HOW_has; 145 constlist[38] = SMOP__ID__HOW_isa; 146 constlist[39] = SMOP__ID__HOW_methods; 147 constlist[40] = SMOP__ID__identifier; 148 constlist[41] = SMOP__ID__infix_eq; 149 constlist[42] = SMOP__ID__infix_num_gt; 150 constlist[43] = SMOP__ID__input_array; 151 constlist[44] = SMOP__ID__invocant; 152 constlist[45] = SMOP__ID__isa; 153 constlist[46] = SMOP__ID__Iterator; 154 constlist[47] = SMOP__ID__jail; 155 constlist[48] = SMOP__ID__lexical; 156 constlist[49] = SMOP__ID__loop; 157 constlist[50] = SMOP__ID__mold; 158 constlist[51] = SMOP__ID__move_capturize; 159 constlist[52] = SMOP__ID__move_identifier; 160 constlist[53] = SMOP__ID__move_responder; 161 constlist[54] = SMOP__ID__named; 162 constlist[55] = SMOP__ID__name; 163 constlist[56] = SMOP__ID__new; 164 constlist[57] = SMOP__ID__next; 165 constlist[58] = SMOP__ID__outer; 166 constlist[59] = SMOP__ID__past; 167 constlist[60] = SMOP__ID__perl; 168 constlist[61] = SMOP__ID__positional; 169 constlist[62] = SMOP__ID__postcircumfix_curly; 170 constlist[63] = SMOP__ID__postcircumfix_parens; 171 constlist[64] = SMOP__ID__postcircumfix_square; 172 constlist[65] = SMOP__ID__postfix_plusplus; 173 constlist[66] = SMOP__ID__prefix_equal; 174 constlist[67] = SMOP__ID__private_name; 175 constlist[68] = SMOP__ID__push; 176 constlist[69] = SMOP__ID__register; 177 constlist[70] = SMOP__ID__REPR_attributes; 178 constlist[71] = SMOP__ID__REPR_bless; 179 constlist[72] = SMOP__ID__REPR_can; 180 constlist[73] = SMOP__ID__REPR_class_storage; 181 constlist[74] = SMOP__ID__REPR_clone; 182 constlist[75] = SMOP__ID__REPR_CREATE; 183 constlist[76] = SMOP__ID__REPR_defined; 184 constlist[77] = SMOP__ID__REPR_DESTROY; 185 constlist[78] = SMOP__ID__REPR_destroy_instance_storage; 186 constlist[79] = SMOP__ID__REPR_destroy_instance_storage_slot; 187 constlist[80] = SMOP__ID__REPR_does; 188 constlist[81] = SMOP__ID__REPR_has; 189 constlist[82] = SMOP__ID__REPR_how; 190 constlist[83] = SMOP__ID__REPR_initialize_instance_storage; 191 constlist[84] = SMOP__ID__REPR_initialize_instance_storage_slot; 192 constlist[85] = SMOP__ID__REPR_instance; 193 constlist[86] = SMOP__ID__REPR_instanceof; 194 constlist[87] = SMOP__ID__REPR_isa; 195 constlist[88] = SMOP__ID__REPR_methods; 196 constlist[89] = SMOP__ID__REPR_multimethods; 197 constlist[90] = SMOP__ID__REPR_multisubmethods; 198 constlist[91] = SMOP__ID__REPR_package; 199 constlist[92] = SMOP__ID__REPR_private_storage; 200 constlist[93] = SMOP__ID__REPR_properties; 201 constlist[94] = SMOP__ID__REPR_submethods; 202 constlist[95] = SMOP__ID__REPR_whence; 203 constlist[96] = SMOP__ID__REPR_who; 204 constlist[97] = SMOP__ID__responder; 205 constlist[98] = SMOP__ID__result; 206 constlist[99] = SMOP__ID__setr; 207 constlist[100] = SMOP__ID__shift; 208 constlist[101] = SMOP__ID__signature; 209 constlist[102] = SMOP__ID__STORE; -
v6/smop/src/native_bool.c
r22017 r22183 15 15 SMOP__Object* identifier, 16 16 SMOP__Object* capture) { 17 ___UNKNOWN_METHOD___;18 17 18 if (identifier == SMOP__ID__bool) { 19 ___NATIVE_CAPTURE_ONLY___; 20 ___INVOCANT_RI_SHOULD_MATCH___; 21 22 SMOP_RELEASE(interpreter,capture); 23 return invocant; 24 } else { 25 ___UNKNOWN_METHOD___; 26 } 19 27 SMOP_RELEASE(interpreter,capture); 20 28 return SMOP__NATIVE__bool_false; -
v6/smop/src/smop_internal.h
r22136 r22183 61 61 smop_s1p_bindcapturesignature_init(); \ 62 62 smop_s1p_pureprototypehow_init(); \ 63 smop_s1p_map_init(); 63 smop_s1p_map_init(); \ 64 smop_s1p_array_iterator_init(); 64 65 #define SMOP_INTERNAL_DESTROY_SEQUENCE \ 66 smop_s1p_array_iterator_destr(); \ 65 67 smop_s1p_map_destr(); \ 66 68 smop_s1p_pureprototypehow_destr(); \ … … 90 92 smop_s1p_pureprototypehow_mold_init(); \ 91 93 smop_s1p_map_mold_init(); \ 94 smop_s1p_array_iterator_mold_init(); \ 92 95 93 96 #define SMOP_BOOTSTRAP_DESTR_SEQUENCE \ 97 smop_s1p_array_iterator_mold_destr(); \ 94 98 smop_s1p_map_mold_destr(); \ 95 99 smop_s1p_pureprototypehow_mold_destr();\ -
v6/smop/src/smop_s1p_array.c
r22033 r22183 67 67 proxy->array = (smop_s1p_array_struct*) SMOP_REFERENCE(interpreter,invocant); 68 68 ret = (SMOP__Object*) proxy; 69 70 } else if (identifier == SMOP__ID__Iterator) { 71 ret = SMOP__S1P__Array_Iterator_create(SMOP_REFERENCE(interpreter,(SMOP__Object*)invocant)); 72 69 73 } else if (identifier == SMOP__ID__elems) { 70 74 ret = SMOP__NATIVE__int_create(invocant->elems); … … 100 104 } else if (identifier == SMOP__ID__DESTROYALL) { 101 105 SMOP_RELEASE(interpreter,invocant->array); 106 } else if (identifier == SMOP__ID__bool) { 107 ret = SMOP__NATIVE__bool_true; 102 108 } else { 103 109 ___UNKNOWN_METHOD___ -
v6/smop/src/smop_s1p_array_iterator.sm0p
r22181 r22183 36 36 SMOP__Object* ret = SMOP__NATIVE__bool_false; 37 37 38 ___UNKNOWN_METHOD___; 38 if (identifier == SMOP__ID__prefix_equal) { 39 40 SMOP__Object* frame = SMOP__Mold__Frame_create(interpreter,SMOP_REFERENCE(interpreter,smop_s1p_array_iterator_mold)); 41 SMOP__Object* back = SMOP_DISPATCH(interpreter, SMOP_RI(interpreter), 42 SMOP__ID__continuation, 43 SMOP__NATIVE__capture_create(interpreter,SMOP_REFERENCE(interpreter,interpreter), 44 NULL,NULL)); 45 46 mold_reg_set(interpreter,frame,0,SMOP_REFERENCE(interpreter,interpreter)); 47 mold_reg_set(interpreter,frame,1,SMOP_REFERENCE(interpreter,capture)); 48 mold_reg_set(interpreter,frame,2,SMOP_REFERENCE(interpreter,back)); 49 50 SMOP_DISPATCH(interpreter,SMOP_RI(interpreter),SMOP__ID__goto,frame); 51 52 } else if (identifier == SMOP__ID__input_array) { 53 54 smop_lowlevel_rdlock(invocant); 55 ret = ((SMOP__S1P__Array_Iterator_struct*)invocant)->input_array; 56 smop_lowlevel_unlock(invocant); 57 58 SMOP_REFERENCE(interpreter,ret); 59 60 } else if (identifier == SMOP__ID__count) { 61 62 smop_lowlevel_rdlock(invocant); 63 ret = ((SMOP__S1P__Array_Iterator_struct*)invocant)->count; 64 smop_lowlevel_unlock(invocant); 65 66 SMOP_REFERENCE(interpreter,ret); 67 68 } else if (identifier == SMOP__ID__FETCH) { 69 70 ret = SMOP_REFERENCE(interpreter,invocant); 71 72 } else { 73 74 ___UNKNOWN_METHOD___; 75 76 } 39 77 40 78 SMOP_RELEASE(interpreter,invocant); … … 64 102 my $capture; 65 103 my $back; 66 my $code;67 my $outer;68 my $signature;69 my $mold;70 104 71 105 my $void; 72 106 73 my $lexical_proto = ¢SMOP__S1P__LexicalScope; 74 my $lexical = $lexical_proto."new"(); 75 my $lexical_outer_container = $lexical."outer"(); 76 $void = $lexical_outer_container."STORE"($outer); 107 my $iterator = $capture."invocant"(); 108 my $array = $iterator."input_array"(); 109 my $count = $iterator."count"(); 77 110 78 my $actualcapture = $capture."positional"(0); 111 my $size = $array."elems"(); 112 my $bigger = $count."infix:>"($size); 79 113 80 $void = $signature."BIND"($actualcapture,$lexical); 81 my $frame_proto = ¢SMOP__Mold__Frame; 82 my $frame = $frame_proto."new"($mold); 83 $void = $frame."set_reg"(0, $interpreter); 84 $void = $frame."set_reg"(1, $lexical); 85 $void = $frame."set_back"($back); 86 $void = $interpreter."goto"($frame); 114 if $bigger { goto final } else { goto has_next }; 115 has_next: 116 my $item = $array."postcircumfix:[ ]"($count); 117 $void = $count."postfix:++"(); 118 $void = $back."setr"($item); 119 $void = $interpreter."goto"($back); 120 final: 121 $void = $back."setr"(¢SMOP__NATIVE__bool_false); 122 $void = $interpreter."goto"($back) 123 87 124 }; 88 125 }
