[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