Changeset 22186 for src/Pugs/CodeGen

Show
Ignore:
Timestamp:
09/07/08 22:26:47 (3 months ago)
Author:
pmurias
Message:

[pugs-m0ld] pugs -Cm0ld compiles 'say 42', it needs runtime support

Files:
1 modified

Legend:

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

    r22179 r22186  
    1818    emit :: a -> [Char] -> State Int [Char] 
    1919 
     20lexicalPrelude = "my $interpreter;\n" 
     21            ++ "my $scope;\n"  
     22            ++ "my $void;\n" 
     23            ++ "my $Code_scalar = $scope.\"postcircumfix:{ }\"(\"Code\");\n" 
     24            ++ "my $Code = $Code_scalar.\"FETCH\"();\n" 
     25 
    2026instance EmitM0ld PIL_Environment where 
    21     emit env r = emit (pilMain env) r 
     27    emit env r = do 
     28        main <- emit (pilMain env) r 
     29        return $ lexicalPrelude ++ main 
    2230instance EmitM0ld PIL_Stmts where 
    2331    emit statement r = case statement of 
     
    2735        PStmts{pStmt=stmt,pStmts=rest} -> do  
    2836            stmt <- emit stmt void 
    29             rest <- emit rest void 
     37            rest <- emit rest r 
    3038            return $ stmt ++ rest 
    3139 
     
    4250            ret <- uniqueId 
    4351            body <- emit body ret 
    44             return ("my " ++ r ++ " = $Code.\"new\"(mold {\n" 
     52            return ("my " ++ r ++ " = $Code.\"new\"(:\"outer\"($scope),:\"mold\"(mold {\n" 
     53                ++ lexicalPrelude 
    4554                ++ body 
    4655                ++ void ++ " = $interpreter.\"return\"(" ++ ret ++ ");\n" 
    47                 ++ "});\n") 
     56                ++ "}));\n") 
    4857        PLit {pLit=lit} -> emit lit r 
    4958        other -> placeholder other r