From 3192f8a0084f8a6f82ac18e187d9db30e524ff9b Mon Sep 17 00:00:00 2001 From: Jan Breuer <jan.breuer@mobatime.cz> Date: 周二, 15 8月 2017 00:33:56 +0800 Subject: [PATCH] Merge branch 'jfichtner-OperationStatusRegAdditions' --- libscpi/src/expression.c | 41 +++++++++++++++++++++-------------------- 1 files changed, 21 insertions(+), 20 deletions(-) diff --git a/libscpi/src/expression.c b/libscpi/src/expression.c index 109e853..8f80b2d 100644 --- a/libscpi/src/expression.c +++ b/libscpi/src/expression.c @@ -49,8 +49,7 @@ * SCPI_EXPR_ERROR - parser error * SCPI_EXPR_NO_MORE - no more data */ -static scpi_expr_result_t numericRange(lex_state_t * state, scpi_bool_t * isRange, scpi_token_t * valueFrom, scpi_token_t * valueTo) -{ +static scpi_expr_result_t numericRange(lex_state_t * state, scpi_bool_t * isRange, scpi_token_t * valueFrom, scpi_token_t * valueTo) { if (scpiLex_DecimalNumericProgramData(state, valueFrom)) { if (scpiLex_Colon(state, valueTo)) { *isRange = TRUE; @@ -81,8 +80,7 @@ * SCPI_EXPR_NO_MORE - no more data * @see SCPI_ExprNumericListEntryInt, SCPI_ExprNumericListEntryDouble */ -scpi_expr_result_t SCPI_ExprNumericListEntry(scpi_t * context, scpi_parameter_t * param, int index, scpi_bool_t * isRange, scpi_parameter_t * valueFrom, scpi_parameter_t * valueTo) -{ +scpi_expr_result_t SCPI_ExprNumericListEntry(scpi_t * context, scpi_parameter_t * param, int index, scpi_bool_t * isRange, scpi_parameter_t * valueFrom, scpi_parameter_t * valueTo) { lex_state_t lex; int i; scpi_expr_result_t res = SCPI_EXPR_OK; @@ -133,8 +131,7 @@ * SCPI_EXPR_NO_MORE - no more data * @see SCPI_ExprNumericListEntry, SCPI_ExprNumericListEntryDouble */ -scpi_expr_result_t SCPI_ExprNumericListEntryInt(scpi_t * context, scpi_parameter_t * param, int index, scpi_bool_t * isRange, int32_t * valueFrom, int32_t * valueTo) -{ +scpi_expr_result_t SCPI_ExprNumericListEntryInt(scpi_t * context, scpi_parameter_t * param, int index, scpi_bool_t * isRange, int32_t * valueFrom, int32_t * valueTo) { scpi_expr_result_t res; scpi_bool_t range = FALSE; scpi_parameter_t paramFrom; @@ -143,9 +140,9 @@ res = SCPI_ExprNumericListEntry(context, param, index, &range, ¶mFrom, ¶mTo); if (res == SCPI_EXPR_OK) { *isRange = range; - SCPI_ParamToInt(context, ¶mFrom, valueFrom); + SCPI_ParamToInt32(context, ¶mFrom, valueFrom); if (range) { - SCPI_ParamToInt(context, ¶mTo, valueTo); + SCPI_ParamToInt32(context, ¶mTo, valueTo); } } @@ -165,8 +162,7 @@ * SCPI_EXPR_NO_MORE - no more data * @see SCPI_ExprNumericListEntry, SCPI_ExprNumericListEntryInt */ -scpi_expr_result_t SCPI_ExprNumericListEntryDouble(scpi_t * context, scpi_parameter_t * param, int index, scpi_bool_t * isRange, double * valueFrom, double * valueTo) -{ +scpi_expr_result_t SCPI_ExprNumericListEntryDouble(scpi_t * context, scpi_parameter_t * param, int index, scpi_bool_t * isRange, double * valueFrom, double * valueTo) { scpi_expr_result_t res; scpi_bool_t range = FALSE; scpi_parameter_t paramFrom; @@ -192,13 +188,12 @@ * @param length length of values array * @param dimensions real number of dimensions */ -static scpi_expr_result_t channelSpec(scpi_t * context, lex_state_t * state, int32_t * values, size_t length, size_t * dimensions) -{ +static scpi_expr_result_t channelSpec(scpi_t * context, lex_state_t * state, int32_t * values, size_t length, size_t * dimensions) { scpi_parameter_t param; size_t i = 0; - while(scpiLex_DecimalNumericProgramData(state, ¶m)) { + while (scpiLex_DecimalNumericProgramData(state, ¶m)) { if (i < length) { - SCPI_ParamToInt(context, ¶m, &values[i]); + SCPI_ParamToInt32(context, ¶m, &values[i]); } if (scpiLex_SpecificCharacter(state, ¶m, '!')) { @@ -212,7 +207,7 @@ if (i == 0) { return SCPI_EXPR_NO_MORE; } else { - // there was at least one number followed by !, but after ! was not another number + /* there was at least one number followed by !, but after ! was not another number */ return SCPI_EXPR_ERROR; } } @@ -227,8 +222,7 @@ * @param length length of values arrays * @param dimensions real number of dimensions */ -static scpi_expr_result_t channelRange(scpi_t * context, lex_state_t * state, scpi_bool_t * isRange, int32_t * valuesFrom, int32_t * valuesTo, size_t length, size_t * dimensions) -{ +static scpi_expr_result_t channelRange(scpi_t * context, lex_state_t * state, scpi_bool_t * isRange, int32_t * valuesFrom, int32_t * valuesTo, size_t length, size_t * dimensions) { scpi_token_t token; scpi_expr_result_t err; size_t fromDimensions; @@ -251,6 +245,8 @@ *dimensions = fromDimensions; return SCPI_EXPR_OK; } + } else if (err == SCPI_EXPR_NO_MORE) { + err = SCPI_EXPR_ERROR; } return err; @@ -267,8 +263,7 @@ * @param length length of values arrays * @param dimensions real number of dimensions */ -scpi_expr_result_t SCPI_ExprChannelListEntry(scpi_t * context, scpi_parameter_t * param, int index, scpi_bool_t * isRange, int32_t * valuesFrom, int32_t * valuesTo, size_t length, size_t * dimensions) -{ +scpi_expr_result_t SCPI_ExprChannelListEntry(scpi_t * context, scpi_parameter_t * param, int index, scpi_bool_t * isRange, int32_t * valuesFrom, int32_t * valuesTo, size_t length, size_t * dimensions) { lex_state_t lex; int i; scpi_expr_result_t res = SCPI_EXPR_OK; @@ -288,7 +283,7 @@ lex.pos = lex.buffer; lex.len = param->len - 2; - // detect channel list expression + /* detect channel list expression */ if (!scpiLex_SpecificCharacter(&lex, &token, '@')) { SCPI_ErrorPush(context, SCPI_ERROR_EXPRESSION_PARSING_ERROR); return SCPI_EXPR_ERROR; @@ -310,5 +305,11 @@ if (res == SCPI_EXPR_ERROR) { SCPI_ErrorPush(context, SCPI_ERROR_EXPRESSION_PARSING_ERROR); } + if (res == SCPI_EXPR_NO_MORE) { + if (!scpiLex_IsEos(&lex)) { + res = SCPI_EXPR_ERROR; + SCPI_ErrorPush(context, SCPI_ERROR_EXPRESSION_PARSING_ERROR); + } + } return res; } -- Gitblit v1.9.1