Changeset 22533 for v6

Show
Ignore:
Timestamp:
10/08/08 13:24:39 (6 weeks ago)
Author:
pmurias
Message:

[smop] moved adhocsignature to the RI DSL

Location:
v6/smop
Files:
3 modified
1 moved

Legend:

Unmodified
Added
Removed
  • v6/smop/CMakeLists.txt

    r22525 r22533  
    105105    src/s1p_io.ri 
    106106    src/s1p_lexicalscope.ri 
     107    src/s1p_adhocsignature.ri 
    107108    src/proto.ri 
    108109) 
  • v6/smop/src/internal.h

    r22525 r22533  
    6262     smop_s1p_defaultblocksignature_init(); \ 
    6363     smop_s1p_bindcapturesignature_init();  \ 
    64      smop_s1p_adhocsignature_init();        \ 
    6564     smop_s1p_pureprototypehow_init();      \ 
    6665     smop_s1p_map_init();                   \ 
     
    7675     smop_s1p_map_destr();                  \ 
    7776     smop_s1p_pureprototypehow_destr();     \ 
    78      smop_s1p_adhocsignature_destr();       \ 
    7977     smop_s1p_bindcapturesignature_destr(); \ 
    8078     smop_s1p_defaultblocksignature_destr();\ 
     
    9997     smop_s1p_defaultblocksignature_mold_init(); \ 
    10098     smop_s1p_bindcapturesignature_mold_init();  \ 
     99     smop_s1p_adhocsignature_init();        \ 
    101100     smop_s1p_code_mold_init();             \ 
    102101     smop_s1p_pureprototypehow_mold_init(); \ 
     
    111110     smop_s1p_pureprototypehow_mold_destr();\ 
    112111     smop_s1p_code_mold_destr();            \ 
     112     smop_s1p_adhocsignature_destr();       \ 
    113113     smop_s1p_bindcapturesignature_mold_destr(); \ 
    114114     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 
    96 
    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 
    318    ret = smop_lowlevel_alloc(sizeof(smop_s1p_adhocsignature_struct)); 
    329    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); 
    3412    sig->accepts_mold = SMOP__NATIVE__capture_named(interpreter,capture,SMOP__ID__ACCEPTS); 
    3513    sig->bind_mold = SMOP__NATIVE__capture_named(interpreter,capture,SMOP__ID__BIND); 
    3614 
    37   } else if (identifier == SMOP__ID__BIND) { 
    38  
     15%method BIND 
    3916    smop_lowlevel_rdlock(invocant); 
    4017    SMOP__Object* mold = ((smop_s1p_adhocsignature_struct*)invocant)->bind_mold; 
     
    5835                  frame); 
    5936 
    60   } else if (identifier == SMOP__ID__ACCEPTS) { 
    61  
     37%method ACCEPTS 
    6238    smop_lowlevel_rdlock(invocant); 
    6339    SMOP__Object* mold = ((smop_s1p_adhocsignature_struct*)invocant)->accepts_mold; 
     
    7450 
    7551    mold_reg_set(interpreter,frame,0,SMOP_REFERENCE(interpreter,capture)); 
     52 
    7653    mold_reg_set(interpreter,frame,1,continuation); 
    7754    mold_reg_set(interpreter,frame,2,SMOP_REFERENCE(interpreter,interpreter)); 
     
    8158                  frame); 
    8259 
    83  
    84   } else if (identifier == SMOP__ID__DESTROYALL) { 
    85  
     60%method DESTROYALL 
    8661    smop_lowlevel_wrlock(invocant); 
    8762    SMOP__Object* bmold = ((smop_s1p_adhocsignature_struct*)invocant)->bind_mold; 
     
    9368    if (bmold) SMOP_RELEASE(interpreter,bmold); 
    9469    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  
    9393              SMOP__ID__goto, 
    9494              frame); 
     95 
    9596%method DESTROYALL 
    9697    smop_lowlevel_wrlock(invocant);