Changeset 22313 for src/Pugs/CodeGen

Show
Ignore:
Timestamp:
09/22/08 19:30:53 (2 months ago)
Author:
pmurias
Message:

[pugs][smop]
lexical variable work in pugs -Cm0ld
Pugs.Compile.compile marks lexical delarations in PIL1 although not fully correctly

Files:
1 modified

Legend:

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

    r22306 r22313  
    2828    ++ "$void = $OUT_scalar.\"STORE\"($OUT_root);\n" 
    2929    ++ "\n" 
     30 
    3031    ++ "my $Code_scalar = $scope.\"postcircumfix:{ }\"(\"Code\");\n" 
    3132    ++ "my $Code_root_scalar = ?SMOP__S1P__RootNamespace.\"postcircumfix:{ }\"(\"::Code\");\n" 
    3233    ++ "my $Code = $Code_root_scalar.\"FETCH\"();\n" 
    3334    ++ "$void = $Code_scalar.\"STORE\"($Code);\n" 
     35 
     36    ++ "my $Scalar_scalar = $scope.\"postcircumfix:{ }\"(\"Scalar\");\n" 
     37    ++ "my $Scalar_root_scalar = ?SMOP__S1P__RootNamespace.\"postcircumfix:{ }\"(\"::Scalar\");\n" 
     38    ++ "my $Scalar = $Scalar_root_scalar.\"FETCH\"();\n" 
     39    ++ "$void = $Scalar_scalar.\"STORE\"($Scalar);\n" 
     40 
    3441    ++ "\n" 
    3542    ++ "\n" 
     
    4148            ++ "my $Code_scalar = $scope.\"lookup\"(\"Code\");\n" 
    4249            ++ "my $Code = $Code_scalar.\"FETCH\"();\n" 
     50            ++ "my $Scalar_scalar = $scope.\"lookup\"(\"Scalar\");\n" 
     51            ++ "my $Scalar = $Scalar_scalar.\"FETCH\"();\n" 
    4352 
    4453instance EmitM0ld PIL_Environment where 
     
    4958    emit statement r = case statement of 
    5059        PNil                           -> return "nil" 
    51         PPad {}                        -> return "pad" 
     60        PPad {pStmts=rest,pScope=SMy,pSyms=[(var,_)]} -> do 
     61            new_scalar <- uniqueId 
     62            lexpad_cell <- uniqueId 
     63            rest <- emit rest r 
     64            return $ 
     65                "my " ++ new_scalar ++ " = $Scalar.\"new\"();\n" 
     66                ++  "my " ++ lexpad_cell ++ " = $scope.\"postcircumfix:{ }\"(" ++ (show var) ++ ");\n" 
     67                ++ "my $void = " ++ lexpad_cell ++ ".\"STORE\"(" ++ new_scalar ++ ");\n" 
     68                ++ rest 
    5269        PStmts{pStmt=stmt,pStmts=PNil} -> emit stmt r 
    5370        PStmts{pStmt=stmt,pStmts=rest} -> do