- From: <bugzilla@wiggum.w3.org>
- Date: Tue, 12 Jul 2005 09:26:06 +0000
- To: public-qt-comments@w3.org
- Cc:
http://www.w3.org/Bugs/Public/show_bug.cgi?id=1554 Summary: [FS] technical: 3.3.3 Handling Dynamic Errors Product: XPath / XQuery / XSLT Version: Last Call drafts Platform: All OS/Version: All Status: NEW Severity: normal Priority: P2 Component: Formal Semantics AssignedTo: simeon@us.ibm.com ReportedBy: jmdyck@ibiblio.org QAContact: public-qt-comments@w3.org (para 1 vs para 2 and the rule) More subtly, in para 1, Expr is "evaluated within" Expr1, whereas in para 2 and the rule, Expri is a subexpression of Expr. The difference occurs with functions, where the body of the function *is* evaluated within the function-call that invoked it, but is *not* a subexpression of that call. This distinction wouldn't be so important if function calls "manually" propagated errors from the function body to the call, but it looks like they don't. "There are several expressions, such as [4.6 Logical Expressions] and [4.11 Quantified Expressions], that do not necessarily propogate an error raised by some sub-expression." But actually, that's true of *all* expressions, as 3.3.4 explains. "For each such expression, we give specific error inference rules." And those rules include something like the rule given in this section. (In fact, the rules in 4.6 are exactly equivalent to this rule.) So 4.6 and 4.11 are not exceptions to the default rule. The problem with this rule, however, is that it allows me to infer an error where you don't want me to. Consider it with these bindings: Expr is let $v := 3 return $v+5 Expri is $v+5 (so Expri is a subexpression of Expr) dynEnv is dynEnvDefault If we evaluate $v+5 in dynEnvDefault, we'll get an error, because $v is unbound. So we have dynEnv |- Expri raises dynError This then allows us to conclude dynEnv |- Expr raises dynError i.e., the whole query raises an error. Which of course it shouldn't. The problem is that the rule uses the same dynEnv to evaluate the subexpression as the expression, which is not always appropriate. So some of the places that refer to 3.3 for their error propagation shouldn't: 4.7.3 Computed Constructors 4.7.3.2 Computed Attribute Constructors 4.8.3 Let Expression 4.12.2 Typeswitch
Received on Tuesday, 12 July 2005 09:26:16 UTC