Changeset 22171 for src/Pugs/CodeGen

Show
Ignore:
Timestamp:
09/06/08 17:32:06 (3 months ago)
Author:
pmurias
Message:

[pugs-m0ld] replace ? with generated identifiers

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/CodeGen/M0ld.hs

    r22170 r22171  
    88import Control.Monad.State 
    99 
     10uniqueId = 
     11    do 
     12        modify (+1) 
     13        id <- get 
     14        return $ "$id"++(show id) 
     15void = "$void" 
     16 
    1017class EmitM0ld a where 
    1118    emit :: a -> [Char] -> State Int [Char] 
     
    1623    emit PNil r = return "nil" 
    1724    emit PPad {} r = return "pad" 
    18     emit PStmts{pStmt=stmt,pStmts=PNil} r = (emit stmt "void") 
     25    emit PStmts{pStmt=stmt,pStmts=PNil} r = (emit stmt void) 
    1926    emit PStmts{pStmt=stmt,pStmts=rest} r = do  
    20         stmt <- emit stmt "void" 
    21         rest <- emit rest "void" 
     27        stmt <- emit stmt void 
     28        rest <- emit rest void 
    2229        return $ stmt ++ rest 
    2330 
    2431instance EmitM0ld PIL_Stmt where 
    25     emit PPos {pNode=stmt} = emit stmt 
    26     emit PNoop = \_-> return ";\n" 
    27     emit PStmt {pExpr=expr} = emit expr 
     32    emit PPos {pNode=stmt} r = emit stmt r 
     33    emit PNoop r = return "; #noop\n" 
     34    emit PStmt {pExpr=expr} r = emit expr r 
    2835 
    2936instance EmitM0ld PIL_Expr where 
     
    3138    emit PCode {pBody=body} r = 
    3239     do 
    33         body <- emit body "void" 
    34         let ret = "?" 
    35         return ("my $" ++ r ++ " = $Code.\"new\"(mold {\n" 
     40        ret <- uniqueId 
     41        body <- emit body ret 
     42        return ("my " ++ r ++ " = $Code.\"new\"(mold {\n" 
    3643         ++ body 
    37          ++ "$interpreter.\"return\"($" ++ ret ++ ");\n" 
     44         ++ void ++ " = $interpreter.\"return\"(" ++ ret ++ ");\n" 
    3845         ++ "});\n") 
    3946 
     
    4148    emit PApp {pFun=fun,pArgs=args,pInv=Nothing} r = 
    4249     do 
    43         let fun_r = "?" 
    44         fun <- emit fun fun_r 
    45         return (fun ++ "my $" ++ r ++ " = $" ++ fun_r ++ ".\"postcircumfix:( )\"(" ++ (show args) ++ ");\n") 
     50        fun_r <- uniqueId 
     51        fun_code <- emit fun fun_r 
     52        return (fun_code ++ "my " ++ r ++ " = " ++ fun_r ++ ".\"postcircumfix:( )\"(" ++ (show args) ++ ");\n") 
    4653    emit PApp {pFun=fun,pArgs=args,pInv=Just inv} r = 
    4754     do 
     
    5158    emit PVar {pVarName=name} r = 
    5259     do 
    53         return $ "my $" ++ r ++ " = $scope.\"postcircumfix:{ }\"(\"" ++ name ++ "\");\n" 
     60        return $ "my " ++ r ++ " = $scope.\"postcircumfix:{ }\"(\"" ++ name ++ "\");\n" 
    5461    emit x r = return $ show x 
    5562