Changeset 200
- Timestamp:
- 02/23/05 13:10:03 (4 years ago)
- svk:copy_cache_prev:
- 1041
- Location:
- src
- Files:
-
- 3 modified
Legend:
- Unmodified
- Added
- Removed
-
src/Main.hs
r187 r200 102 102 , Symbol SGlobal "$*PROGNAME" (Val $ VStr name) 103 103 -- , Symbol SGlobal "$*STDIN" (Val $ VStr str) 104 , Symbol SGlobal " $*END" (Val VUndef)104 , Symbol SGlobal "@*END" (Val VUndef) 105 105 , Symbol SGlobal "%*ENV" (Val . VHash . MkHash . listToFM $ [ (VStr k, VStr v) | (k, v) <- environ ]) 106 106 ] -
src/Parser.hs
r195 r200 194 194 195 195 ruleClosureTrait = rule "closure trait" $ do 196 name <- tryChoice $ map symbol $ words " BEGIN CHECK INIT END"196 name <- tryChoice $ map symbol $ words " END " 197 197 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]] 201 212 202 213 rulePackageDeclaration = rule "package declaration" $ fail "" -
src/Prim.hs
r160 r200 401 401 other -> (0, other, True) 402 402 403 primDecl str = primOp sym assoc ( reverse $foldr foldParam [] prms) ret403 primDecl str = primOp sym assoc (foldr foldParam [] prms) ret 404 404 where 405 405 (ret:assoc:sym:prms') = words str 406 406 takeWord = takeWhile isWord . dropWhile (not . isWord) 407 isWord = not . (`elem` "|(), ")407 isWord = not . (`elem` "|(),:") 408 408 prms = map takeWord prms' 409 409 … … 413 413 414 414 foldParam :: String -> Params -> Params 415 foldParam "List" = doFoldParam "List" "*@?0" 415 foldParam "List" = doFoldParam "List" "*@?1" 416 foldParam ('r':'w':'!':"List") = \ps -> ((buildParam "List" "" "@?0" (Val VUndef)) { isLValue = True }:ps) 416 417 foldParam ('r':'w':'!':str) = \ps -> ((buildParam str "" "$?1" (Val VUndef)) { isLValue = True }:ps) 417 418 foldParam "" = id … … 446 447 \\n List pre map (List: Code)\ 447 448 \\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)\ 448 453 \\n Str pre join (List)\ 449 454 \\n List left zip (List)\
