Changeset 12176 for src/Pugs/AST.hs

Show
Ignore:
Timestamp:
08/12/06 19:55:50 (2 years ago)
Author:
audreyt
Message:

* First cut at proper compile-time role mixin support, based on

discussion on #perl6 about the semantics of "does".

class C {};
class D does C {};
D.isa(C); # False
D.does(C); # True

Composition works, and overriding role methods should work as well,
but concrete class/package names is not yet renamed, and role conflicts
is not yet validated. Still, a step toward the right direction.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/AST.hs

    r12041 r12176  
    199199isEmptyParams _ = False 
    200200 
    201 newPackage :: String -> String -> [String] -> Exp 
    202 newPackage cls name traits = Stmts metaObj (newType name) 
     201newPackage :: String -> String -> [String] -> [String] -> Exp 
     202newPackage cls name classes roles = Stmts metaObj (newType name) 
    203203    where 
    204204    metaObj = Sym SGlobal (':':'*':name) $! Syn ":=" 
    205205        [ Var (':':'*':name) 
    206         , App (Var "&Object::new") 
     206        , App (Var "&META::new") 
    207207            (Just $ Val (VType $ mkType cls)) 
    208208            [ Syn "named" 
    209                 [ Val (VStr "traits") 
    210                 , Val (VList $ map VStr traits) 
     209                [ Val (VStr "is") 
     210                , Val (VList $ map VStr classes) 
     211                ] 
     212            , Syn "named" 
     213                [ Val (VStr "does") 
     214                , Val (VList $ map VStr roles) 
    211215                ] 
    212216            , Syn "named"