Changeset 200

Show
Ignore:
Timestamp:
02/23/05 13:10:03 (4 years ago)
Author:
autrijus
svk:copy_cache_prev:
1041
Message:

* Decl for array operations; prim param parsing was in the wrong order, oops!

Location:
src
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • src/Main.hs

    r187 r200  
    102102        , Symbol SGlobal "$*PROGNAME" (Val $ VStr name) 
    103103--        , Symbol SGlobal "$*STDIN" (Val $ VStr str) 
    104         , Symbol SGlobal "$*END" (Val VUndef) 
     104        , Symbol SGlobal "@*END" (Val VUndef) 
    105105        , Symbol SGlobal "%*ENV" (Val . VHash . MkHash . listToFM $ [ (VStr k, VStr v) | (k, v) <- environ ]) 
    106106        ] 
  • src/Parser.hs

    r195 r200  
    194194 
    195195ruleClosureTrait = rule "closure trait" $ do 
    196     name    <- tryChoice $ map symbol $ words "BEGIN CHECK INIT END" 
     196    name    <- tryChoice $ map symbol $ words " END " 
    197197    block   <- ruleBlock 
    198     -- let sym = Symbol SGlobal "$*END" block 
    199     -- updateState $ \e -> e{ envGlobal = (sym:envGlobal e) } 
    200     return $ Val VUndef -- XXX 
     198    let (fun, names) = extract (block, []) 
     199    -- Check for placeholder vs formal parameters 
     200    unless (null names) $ 
     201        fail "Closure traits takes no formal parameters" 
     202    let sub = Sub { isMulti       = False 
     203                  , subName       = name 
     204                  , subPad        = [] 
     205                  , subType       = SubBlock 
     206                  , subAssoc      = "pre" 
     207                  , subReturns    = "Any" 
     208                  , subParams     = [] 
     209                  , subFun        = fun 
     210                  } 
     211    return $ App "&prefix:push" [Var "@*END"] [Syn "sub" [Val $ VSub sub]] 
    201212 
    202213rulePackageDeclaration = rule "package declaration" $ fail "" 
  • src/Prim.hs

    r160 r200  
    401401        other       -> (0, other, True) 
    402402         
    403 primDecl str = primOp sym assoc (reverse $ foldr foldParam [] prms) ret 
     403primDecl str = primOp sym assoc (foldr foldParam [] prms) ret 
    404404    where 
    405405    (ret:assoc:sym:prms') = words str 
    406406    takeWord = takeWhile isWord . dropWhile (not . isWord) 
    407     isWord = not . (`elem` "|(),") 
     407    isWord = not . (`elem` "|(),:") 
    408408    prms = map takeWord prms' 
    409409 
     
    413413 
    414414foldParam :: String -> Params -> Params 
    415 foldParam "List"    = doFoldParam "List" "*@?0" 
     415foldParam "List"    = doFoldParam "List" "*@?1" 
     416foldParam ('r':'w':'!':"List") = \ps -> ((buildParam "List" "" "@?0" (Val VUndef)) { isLValue = True }:ps) 
    416417foldParam ('r':'w':'!':str) = \ps -> ((buildParam str "" "$?1" (Val VUndef)) { isLValue = True }:ps) 
    417418foldParam ""        = id 
     
    446447\\n   List      pre     map     (List: Code)\ 
    447448\\n   List      pre     grep    (List: Code)\ 
     449\\n   Int       pre     push    (rw!Array: List)\ 
     450\\n   Int       pre     unshift (rw!Array: List)\ 
     451\\n   Scalar    pre     pop     (rw!Array)\ 
     452\\n   Scalar    pre     shift   (rw!Array)\ 
    448453\\n   Str       pre     join    (List)\ 
    449454\\n   List      left    zip     (List)\