Changeset 22179

Show
Ignore:
Timestamp:
09/07/08 14:05:38 (3 months ago)
Author:
pmurias
Message:

[pugs-m0ld] basic functions calls with only positionals and integer literals

Files:
1 modified

Legend:

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

    r22172 r22179  
    1313    return $ "$id"++(show id) 
    1414void = "$void" 
     15placeholder other r = return $ "my "++ r ++ " = " ++ (show other) ++ "; #placeholder\n" 
    1516 
    1617class EmitM0ld a where 
     
    3233    emit statement r = case statement of  
    3334        PPos {pNode=stmt}  -> emit stmt r 
    34         PNoop              -> return "; #noop\n" 
     35        PNoop              -> return "#noop\n" 
    3536        PStmt {pExpr=expr} -> emit expr r 
    3637 
     
    4546                ++ void ++ " = $interpreter.\"return\"(" ++ ret ++ ");\n" 
    4647                ++ "});\n") 
     48        PLit {pLit=lit} -> emit lit r 
     49        other -> placeholder other r 
     50 
     51instance EmitM0ld PIL_Literal where 
     52    emit PVal {pVal=val} r = emit val r 
     53 
     54instance EmitM0ld Val where 
     55    emit (VInt int) r = return $ "my " ++ r ++ " = " ++ (show int) ++ ";\n" 
     56    emit other r = placeholder other r 
    4757 
    4858instance EmitM0ld PIL_LValue where 
     
    5161            fun_r <- uniqueId 
    5262            fun_code <- emit fun fun_r 
    53             return (fun_code ++ "my " ++ r ++ " = " ++ fun_r ++ ".\"postcircumfix:( )\"(" ++ (show args) ++ ");\n") 
    54         PApp {pFun=fun,pArgs=args,pInv=Just inv} -> do 
    55             inv <- emit inv r 
    56             fun <- emit fun r 
    57             return (inv ++ ".(" ++ fun ++ ")(" ++ (show args) ++ ")") 
     63            args <- mapM (\arg -> do 
     64                id <- uniqueId 
     65                code <- emit arg id 
     66                return (code,id)) args 
     67            return (fun_code ++ (concat $ fmap fst args) ++ "my " ++ r ++ " = " ++ fun_r ++ ".\"postcircumfix:( )\"(" ++ (concat $ fmap snd args) ++ ");\n") 
    5868        PVar {pVarName=name} -> do 
    5969            return $ "my " ++ r ++ " = $scope.\"postcircumfix:{ }\"(\"" ++ name ++ "\");\n" 
    60         other -> return $ show other  
     70        other -> return $ (show other) ++ ";\n" 
    6171 
    6272genM0ld :: FilePath -> Eval Val 
    6373genM0ld filepath = do 
    6474    penv <- compile () :: Eval PIL_Environment 
    65     return $ VStr $ (evalState (emit penv void) 0) ++ "\n" 
     75    return $ VStr $ (evalState (emit penv void) 0)