[svn] r6489: nemerle/trunk/ncc/typing/Macros.n

stn svnadmin at nemerle.org
Mon Aug 7 16:18:26 CEST 2006


Log:
More null checks in TraverseExpr to avoid the null-reference exception.

Author: stn
Date: Mon Aug  7 16:18:24 2006
New Revision: 6489

Modified:
   nemerle/trunk/ncc/typing/Macros.n

Modified: nemerle/trunk/ncc/typing/Macros.n
==============================================================================
--- nemerle/trunk/ncc/typing/Macros.n	(original)
+++ nemerle/trunk/ncc/typing/Macros.n	Mon Aug  7 16:18:24 2006
@@ -915,23 +915,24 @@
             <[ $(traverse (obj)) . $mem ]>
 
           | <[ $func (.. $parms) ]> =>
-            <[ $(traverse (func)) (..$(parms.Map (traverse))) ]>
+            <[ $(traverse (func)) (..$(parms.Map (fun (param) {
+                if (param == null) null else traverse (param) } ))) ]>
 
           | <[ $func .[.. $parms] ]> =>
-            <[ $(traverse (func)) .[..$(parms.Map (traverse))] ]>
+            <[ $(traverse (func)) .[..$(parms.Map (fun (param) {
+                if (param == null) null else traverse (param) } ))] ]>
             
           | <[ $target = $source ]> =>
-            <[ $(traverse (target)) = $(traverse (source)) ]>
+            <[ $(traverse (target)) = $(if (source == null) null else traverse (source)) ]>
 
           | <[ def $n = $val ]> =>
-            <[ def $(traversep (n)) = $(traverse (val)) ]>
+            <[ def $(traversep (n)) = $(if (val == null) null else traverse (val)) ]>
 
           | <[ mutable $n = $val ]> =>
             <[ mutable $(traversep (n)) = $(if (val == null) null else traverse (val)) ]>
 
           | <[ match ($mexpr) {.. $cases } ]> =>
             def go_case (c : MatchCase) {
-              
               def go_guard (g : PExpr) {
                 | <[ $pat when $e ]> => <[ $(traversep (pat)) when $(traverse (e)) ]>
                 | _ => traversep (g)
@@ -945,10 +946,10 @@
             <[ match ($(traverse (mexpr))) {.. $cases } ]>
 
           | <[ throw $exc ]> =>
-            if (exc == null)
-              <[ throw $exc ]>
-            else
-              <[ throw $(traverse (exc)) ]>
+            <[ throw $(if (exc == null) null else traverse (exc)) ]>
+
+          | PExpr.TryWith (body, exn, exn_ty, handler) =>
+            PExpr.Try (traverse (body), [TryCase.Catch (exn, exn_ty, traverse (handler))])
 
           | PExpr.TryFinally (body, handler) =>
             PExpr.TryFinally (traverse (body), traverse (handler))
@@ -972,20 +973,19 @@
 
           | <[ typeof ($_) ]> => expr
 
-          | <[ $expr :> $ty ]> => <[ $(traverse (expr)) :> $ty ]>
+          | <[ $expr :> $ty ]> => <[ $(if (expr == null) null else traverse (expr)) :> $ty ]>
 
-          | <[ $expr : $ty ]> => <[ $(traverse (expr)) : $ty ]>
+          | <[ $expr : $ty ]> => <[ $(if (expr == null) null else traverse (expr)) : $ty ]>
 
           | <[ {.. $seq } ]> => <[ { ..$(List.Map (seq, traverse)) } ]>
 
           | <[ (.. $args) ]> => <[ ( ..$(List.Map (args, traverse)) ) ]>
 
-          | <[ ref $e ]> => <[ ref $(traverse (e)) ]>
+          | <[ ref $e ]> => <[ ref $(if (e == null) null else traverse (e)) ]>
 
-          | <[ out $e ]> => <[ out $(traverse (e)) ]>
+          | <[ out $e ]> => <[ out $(if (e == null) null else traverse (e)) ]>
 
-          | <[ array (..$args) ]> =>
-            <[ array ( ..$(List.Map (args, traverse)) ) ]>
+          | <[ array (..$args) ]> => <[ array ( ..$(List.Map (args, traverse)) ) ]>
 
           | <[ array $args ]> => <[ array $(traverse (args)) ]>
 



More information about the svn mailing list