From 3979cefe5310319d6c7a8c57111c02d5e221486f Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Tue, 7 Dec 2010 11:44:43 +0100 Subject: Support more top-level primary expressions This change allows numbers and literals to be used as top-level primary expressions without failing: 1> xmerl_xpath:string("3", Doc). #xmlObj{type = number,value = 3} 2> xmerl_xpath:string("'foo'", Doc). #xmlObj{type = string,value = "foo"} We still need to allow arithmetic, comparative, boolean and negative expressions, as in `xmerl_xpath_pred:expr/2`. --- lib/xmerl/src/xmerl_xpath.erl | 8 +++----- lib/xmerl/src/xmerl_xpath_lib.erl | 4 +++- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/xmerl/src/xmerl_xpath.erl b/lib/xmerl/src/xmerl_xpath.erl index ee06f08029..e53d105ce7 100644 --- a/lib/xmerl/src/xmerl_xpath.erl +++ b/lib/xmerl/src/xmerl_xpath.erl @@ -338,13 +338,11 @@ eval_path(filter, {PathExpr, PredExpr}, C = #xmlContext{}) -> S1 = path_expr(PathExpr, S), pred_expr(PredExpr, S1). -eval_primary_expr(FC = {function_call,_,_},S = #state{context = Context}) -> +eval_primary_expr(PrimExpr, S = #state{context = Context}) -> %% NewNodeSet = xmerl_xpath_pred:eval(FC, Context), - NewNodeSet = xmerl_xpath_lib:eval(primary_expr, FC, Context), + NewNodeSet = xmerl_xpath_lib:eval(primary_expr, PrimExpr, Context), NewContext = Context#xmlContext{nodeset = NewNodeSet}, - S#state{context = NewContext}; -eval_primary_expr(PrimExpr,_S) -> - exit({primary_expression,{not_implemented, PrimExpr}}). + S#state{context = NewContext}. %% axis(Axis,NodeTest,Context::xmlContext()) -> xmlContext() diff --git a/lib/xmerl/src/xmerl_xpath_lib.erl b/lib/xmerl/src/xmerl_xpath_lib.erl index cfd0e36667..096f54ec30 100644 --- a/lib/xmerl/src/xmerl_xpath_lib.erl +++ b/lib/xmerl/src/xmerl_xpath_lib.erl @@ -49,5 +49,7 @@ primary_expr({function_call, F, Args}, C) -> %% here, we should look up the function in the context provided %% by the caller, but we haven't figured this out yet. exit({not_a_core_function, F}) - end. + end; +primary_expr(PrimExpr, _C) -> + exit({primary_expression, {not_implemented, PrimExpr}}). -- cgit v1.2.3