- Timestamp:
- 11/08/08 10:26:25 (2 months ago)
- Location:
- v6/smop
- Files:
-
- 3 modified
-
include/smop_s1p.h (modified) (2 diffs)
-
sm0p.pl (modified) (3 diffs)
-
src/lowlevel.sm0p (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
v6/smop/include/smop_s1p.h
r22915 r22923 65 65 #define ___CONST_IDENTIFIER_ONLY___ \ 66 66 if (SMOP_RI(identifier) != SMOP_RI(SMOP__ID__new)) {\ 67 fprintf( "%s\n",SMOP_RI(SMOP__ID__new)->id);\67 fprintf(stderr,"%s\n",SMOP_RI(SMOP__ID__new)->id);\ 68 68 }\ 69 69 assert(SMOP_RI(identifier) == SMOP_RI(SMOP__ID__new)) … … 73 73 assert(SMOP_RI(invocant) == (SMOP__ResponderInterface*)self) 74 74 #define ___VALUE_FETCH___\ 75 SMOP_REFERENCE(interpreter, invocant);\75 SMOP_REFERENCE(interpreter,(SMOP__Object*) invocant);\ 76 76 ret = invocant; 77 77 #define ___VALUE_STORE___ \ -
v6/smop/sm0p.pl
r21974 r22923 44 44 $out_count++; 45 45 quasi( 46 'sm0p' => \&preprocess_sm0p,47 46 'm0ld' => \&preprocess_m0ld, 48 'v6-sm0p' => \&preprocess_p6_sm0p,49 47 'v6-m0ld' => \&preprocess_p6_m0ld, 50 48 ) and next; … … 96 94 return $retbuf; 97 95 } 98 sub preprocess_p6_sm0p {99 my $code = shift;100 my ($writer, $reader, $error) = map { gensym } 1..3;101 my $sm0p = preprocess('','perl',"$base/../../misc/elfish/elfX/elfX",'-C','sm0p','-s','-e',$code);102 return preprocess_sm0p(103 $sm0p104 . "\$SMOP__SLIME__CurrentFrame.\$SMOP__ID__forget();\n"105 . "\$interpreter.goto(|\$continuation);\n"106 );107 }108 96 sub preprocess_p6_m0ld { 109 97 my $code = shift; … … 112 100 return preprocess_m0ld($m0ld); 113 101 } 114 sub preprocess_sm0p {115 my $code = shift;116 #warn "got sm0p code <$code>\n";117 return preprocess($code,'perl',"-I$base/../../src/perl6",118 '-I'.$base.'/sm0p',119 $base.'/sm0p/sm0p_with_actions');120 }121 102 sub preprocess_m0ld { 122 103 my $code = shift; -
v6/smop/src/lowlevel.sm0p
r22915 r22923 7 7 8 8 #include <smop.h> 9 #include <smop_mold.h> 9 10 #include <smop_lowlevel.h> 10 11 #include <stdlib.h> … … 170 171 171 172 smop_lowlevel_free(value); 173 } else if ((SMOP__Object*)SMOP_RI(value) == SMOP__Mold || 174 (SMOP__Object*)SMOP_RI(value) == SMOP__Mold__Frame) { 175 SMOP_DISPATCH(interpreter, SMOP_RI(value), SMOP__ID__DESTROYALL, SMOP__NATIVE__capture_create(interpreter,value,NULL,NULL)); 176 #ifdef SMOP_LOWLEVEL_MEM_TRACE 177 smop_mem_trace_del(value); 178 #endif 179 smop_lowlevel_free(value); 172 180 } else if ((SMOP__Object*)SMOP_RI(value) == SMOP__INTPTR__InterpreterInstance || 173 181 (SMOP__Object*)SMOP_RI(value) == SMOP__NATIVE__capture || … … 183 191 184 192 } else { 185 SMOP_DISPATCH(interpreter, SMOP_RI(value), SMOP__ID__DESTROYALL, SMOP__NATIVE__capture_create(interpreter,value,NULL,NULL)); 186 #ifdef SMOP_LOWLEVEL_MEM_TRACE 187 smop_mem_trace_del(value); 188 #endif 189 190 smop_lowlevel_free(value); 193 SMOP__Object* current = SMOP_DISPATCH(interpreter, SMOP_RI(interpreter), SMOP__ID__continuation, 194 SMOP__NATIVE__capture_create(interpreter,SMOP_REFERENCE(interpreter,interpreter),NULL,NULL)); 195 SMOP__Object* free_obj = q:m0ld { 196 my $interpreter; 197 my $current; 198 my $value; 199 my $void = $value."DESTROYALL"($value); 200 $void = $interpreter."goto"($current); 201 }; 202 SMOP__Object* frame = SMOP__Mold__Frame_create(interpreter,SMOP_REFERENCE(interpreter,free_obj)); 203 mold_reg_set(interpreter,frame,0,SMOP_REFERENCE(interpreter,interpreter)); 204 mold_reg_set(interpreter,frame,1,current); 205 mold_reg_set(interpreter,frame,2,value); 206 SMOP_DISPATCH(interpreter, SMOP_RI(interpreter), SMOP__ID__goto, frame); 207 #ifdef SMOP_LOWLEVEL_MEM_TRACE 208 smop_mem_trace_del(value); 209 #endif 210 //smop_lowlevel_free(value); 211 SMOP_RELEASE(interpreter,free_obj); 191 212 } 192 213 return NULL;
