- Timestamp:
- 10/08/08 13:24:39 (6 weeks ago)
- Location:
- v6/smop
- Files:
-
- 3 modified
- 1 moved
-
CMakeLists.txt (modified) (1 diff)
-
src/internal.h (modified) (4 diffs)
-
src/s1p_adhocsignature.ri (moved) (moved from v6/smop/src/s1p_adhocsignature.c) (5 diffs)
-
src/s1p_lexicalscope.ri (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
v6/smop/CMakeLists.txt
r22525 r22533 105 105 src/s1p_io.ri 106 106 src/s1p_lexicalscope.ri 107 src/s1p_adhocsignature.ri 107 108 src/proto.ri 108 109 ) -
v6/smop/src/internal.h
r22525 r22533 62 62 smop_s1p_defaultblocksignature_init(); \ 63 63 smop_s1p_bindcapturesignature_init(); \ 64 smop_s1p_adhocsignature_init(); \65 64 smop_s1p_pureprototypehow_init(); \ 66 65 smop_s1p_map_init(); \ … … 76 75 smop_s1p_map_destr(); \ 77 76 smop_s1p_pureprototypehow_destr(); \ 78 smop_s1p_adhocsignature_destr(); \79 77 smop_s1p_bindcapturesignature_destr(); \ 80 78 smop_s1p_defaultblocksignature_destr();\ … … 99 97 smop_s1p_defaultblocksignature_mold_init(); \ 100 98 smop_s1p_bindcapturesignature_mold_init(); \ 99 smop_s1p_adhocsignature_init(); \ 101 100 smop_s1p_code_mold_init(); \ 102 101 smop_s1p_pureprototypehow_mold_init(); \ … … 111 110 smop_s1p_pureprototypehow_mold_destr();\ 112 111 smop_s1p_code_mold_destr(); \ 112 smop_s1p_adhocsignature_destr(); \ 113 113 smop_s1p_bindcapturesignature_mold_destr(); \ 114 114 smop_s1p_defaultblocksignature_mold_destr();\ -
v6/smop/src/s1p_adhocsignature.ri
r22525 r22533 1 #include <stdlib.h> 2 #include <string.h> 3 #include <stdio.h> 4 #include <assert.h> 5 #include <smop.h> 6 #include <smop_lowlevel.h> 7 #include <smop_s1p.h> 8 #include <smop_mold.h> 1 %prefix smop_s1p_adhocsignature 2 %prototype SMOP__S1P__AdhocSignature 3 %attr SMOP__Object* accepts_mold 4 %attr SMOP__Object* bind_mold 5 %RI.id S1P Adhoc Signature 9 6 10 SMOP__Object* SMOP__S1P__AdhocSignature; 11 12 typedef struct smop_s1p_adhocsignature_struct { 13 SMOP__Object__BASE 14 SMOP__Object* accepts_mold; 15 SMOP__Object* bind_mold; 16 } smop_s1p_adhocsignature_struct; 17 18 19 static SMOP__Object* adhocsignature_message(SMOP__Object* interpreter, 20 SMOP__ResponderInterface* self, 21 SMOP__Object* identifier, 22 SMOP__Object* capture) { 23 24 ___NATIVE_CAPTURE_ONLY___; 25 ___CONST_IDENTIFIER_ONLY___; 26 ___INVOCANT_RI_SHOULD_MATCH___; 27 28 SMOP__Object* ret = SMOP__NATIVE__bool_false; 29 30 if (SMOP__ID__new == identifier) { 7 %method new 31 8 ret = smop_lowlevel_alloc(sizeof(smop_s1p_adhocsignature_struct)); 32 9 smop_s1p_adhocsignature_struct* sig = (smop_s1p_adhocsignature_struct*)ret; 33 sig->RI = (SMOP__ResponderInterface*)SMOP__S1P__AdhocSignature; 10 sig->RI = (SMOP__ResponderInterface*)RI; 11 SMOP_REFERENCE(interpreter,RI); 34 12 sig->accepts_mold = SMOP__NATIVE__capture_named(interpreter,capture,SMOP__ID__ACCEPTS); 35 13 sig->bind_mold = SMOP__NATIVE__capture_named(interpreter,capture,SMOP__ID__BIND); 36 14 37 } else if (identifier == SMOP__ID__BIND) { 38 15 %method BIND 39 16 smop_lowlevel_rdlock(invocant); 40 17 SMOP__Object* mold = ((smop_s1p_adhocsignature_struct*)invocant)->bind_mold; … … 58 35 frame); 59 36 60 } else if (identifier == SMOP__ID__ACCEPTS) { 61 37 %method ACCEPTS 62 38 smop_lowlevel_rdlock(invocant); 63 39 SMOP__Object* mold = ((smop_s1p_adhocsignature_struct*)invocant)->accepts_mold; … … 74 50 75 51 mold_reg_set(interpreter,frame,0,SMOP_REFERENCE(interpreter,capture)); 52 76 53 mold_reg_set(interpreter,frame,1,continuation); 77 54 mold_reg_set(interpreter,frame,2,SMOP_REFERENCE(interpreter,interpreter)); … … 81 58 frame); 82 59 83 84 } else if (identifier == SMOP__ID__DESTROYALL) { 85 60 %method DESTROYALL 86 61 smop_lowlevel_wrlock(invocant); 87 62 SMOP__Object* bmold = ((smop_s1p_adhocsignature_struct*)invocant)->bind_mold; … … 93 68 if (bmold) SMOP_RELEASE(interpreter,bmold); 94 69 if (amold) SMOP_RELEASE(interpreter,amold); 95 96 } else { 97 ___UNKNOWN_METHOD___; 98 99 } 100 101 SMOP_RELEASE(interpreter, invocant); 102 SMOP_RELEASE(interpreter, capture); 103 104 return ret; 105 } 106 107 void smop_s1p_adhocsignature_init() { 108 SMOP__S1P__AdhocSignature = calloc(1, sizeof(SMOP__ResponderInterface)); 109 assert(SMOP__S1P__AdhocSignature); 110 ((SMOP__ResponderInterface*)SMOP__S1P__AdhocSignature)->MESSAGE = adhocsignature_message; 111 ((SMOP__ResponderInterface*)SMOP__S1P__AdhocSignature)->REFERENCE = smop_lowlevel_generic_reference; 112 ((SMOP__ResponderInterface*)SMOP__S1P__AdhocSignature)->RELEASE = smop_lowlevel_generic_release; 113 ((SMOP__ResponderInterface*)SMOP__S1P__AdhocSignature)->id = "S1P Adhoc Signature"; 114 } 115 116 void smop_s1p_adhocsignature_destr() { 117 free(SMOP__S1P__AdhocSignature); 118 } 70 SMOP_RELEASE(interpreter,RI); -
v6/smop/src/s1p_lexicalscope.ri
r22523 r22533 93 93 SMOP__ID__goto, 94 94 frame); 95 95 96 %method DESTROYALL 96 97 smop_lowlevel_wrlock(invocant);
