Changeset 11289 for src/Pugs/Eval

Show
Ignore:
Timestamp:
07/08/06 07:02:06 (2 years ago)
Author:
audreyt
Message:

* Massive overhaul of Perl 5 embed system on invokePerl5.

  • non-reference errors from perl5 land like "die 'foo'" becomes Str error objects in perl6 land.
  • reference-type errors from perl5 land like "die foo?" becomes PerlSV error objects in perl6 land.
  • newSVsv(ERRSV) now protects the ERRSV from being GC'ed away. this makes szbalint's desired behaviour work.
Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Eval/Var.hs

    r11266 r11289  
    209209                    then return found 
    210210                    else canPerl5 sv "AUTOLOAD" 
    211                 if not found' then evalExp (App (Var name) Nothing (map (Val . PerlSV) (sv:svs))) else do 
    212                 env     <- ask 
    213                 rv      <- guardIO $ do 
    214                     envSV   <- mkVal (VControl $ ControlEnv env) 
    215                     subSV   <- vstrToSV $ tail name 
    216                     invokePerl5 subSV sv svs envSV (enumCxt $ envContext env) 
    217                 case rv of 
    218                     Right [x]   -> return $ PerlSV x 
    219                     Right xs    -> return $ VList (map PerlSV xs) 
    220                     Left err    -> throwError $ PerlSV err 
     211                if not found' 
     212                    then evalExp (App (Var name) Nothing (map (Val . PerlSV) (sv:svs))) 
     213                    else do 
     214                        subSV   <- liftIO . vstrToSV $ tail name 
     215                        runInvokePerl5 subSV sv svs 
    221216            } 
    222217    possiblyBuildMetaopVCode :: String -> Eval (Maybe VCode)