Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Duet3D/RepRapFirmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Crocker <dcrocker@eschertech.com>2021-03-07 12:35:55 +0300
committerDavid Crocker <dcrocker@eschertech.com>2021-03-07 12:35:55 +0300
commitb26b9cd7e3506fa243031975578e26a42ab0c2fc (patch)
tree937231bcdf765a5ef9905c5004b6ca7d340e34db /src/ObjectModel
parent4cf8ed602d836ff2846786ed287f72ca5b4bb709 (diff)
Fixes to HeapString handling in expressions
Diffstat (limited to 'src/ObjectModel')
-rw-r--r--src/ObjectModel/ObjectModel.cpp34
-rw-r--r--src/ObjectModel/ObjectModel.h1
2 files changed, 19 insertions, 16 deletions
diff --git a/src/ObjectModel/ObjectModel.cpp b/src/ObjectModel/ObjectModel.cpp
index 1dcd3eb0..418381fc 100644
--- a/src/ObjectModel/ObjectModel.cpp
+++ b/src/ObjectModel/ObjectModel.cpp
@@ -34,10 +34,7 @@ void ExpressionValue::AppendAsString(const StringRef& str) const noexcept
break;
case TypeCode::HeapString:
- {
- const auto p = shVal.Get();
- str.cat(p.Ptr());
- }
+ str.cat(shVal.Get().Ptr());
break;
case TypeCode::Float:
@@ -451,6 +448,10 @@ void ObjectModel::ReportArrayLengthAsJson(OutputBuffer *buf, ObjectExplorationCo
buf->catf("%u", strlen(val.sVal));
break;
+ case TypeCode::HeapString:
+ buf->catf("%u", val.shVal.GetLength());
+ break;
+
default:
buf->cat("null");
break;
@@ -530,10 +531,7 @@ void ObjectModel::ReportItemAsJsonFull(OutputBuffer *buf, ObjectExplorationConte
break;
case TypeCode::HeapString:
- {
- const auto p = val.shVal.Get();
- buf->catf("\"%.s\"", p.Ptr());
- }
+ buf->catf("\"%.s\"", val.shVal.Get().Ptr());
break;
#if SUPPORT_CAN_EXPANSION
@@ -951,21 +949,25 @@ ExpressionValue ObjectModel::GetObjectValue(ObjectExplorationContext& context, c
case TypeCode::CanExpansionBoardDetails:
if (*idString == 0)
{
- if (context.WantArrayLength())
- {
- return GetExpansionBoardDetailLength(val);
- }
- return val;
+ return (context.WantArrayLength()) ? GetExpansionBoardDetailLength(val) : val;
}
break;
#endif
+ case TypeCode::HeapString:
+ if (*idString == 0)
+ {
+ return (context.WantArrayLength()) ? ExpressionValue((int32_t)val.shVal.GetLength()) : val;
+ }
+ break;
+
case TypeCode::CString:
- if (*idString == 0 && context.WantArrayLength())
+ if (*idString == 0)
{
- return ExpressionValue((int32_t)strlen(val.sVal));
+ return (context.WantArrayLength()) ? ExpressionValue((int32_t)strlen(val.sVal)) : val;
}
- // no break
+ break;
+
default:
if (*idString == 0)
{
diff --git a/src/ObjectModel/ObjectModel.h b/src/ObjectModel/ObjectModel.h
index 712e36ac..ddce4c62 100644
--- a/src/ObjectModel/ObjectModel.h
+++ b/src/ObjectModel/ObjectModel.h
@@ -135,6 +135,7 @@ struct ExpressionValue
TypeCode GetType() const noexcept { return (TypeCode)type; }
void SetType(TypeCode t) noexcept { type = (uint32_t)t; }
+ bool IsStringType() const noexcept { return type == (uint32_t)TypeCode::CString || type == (uint32_t)TypeCode::HeapString; }
void Set(bool b) noexcept { Release(); type = (uint32_t)TypeCode::Bool; bVal = b; }
void Set(char c) noexcept { Release(); type = (uint32_t)TypeCode::Char; cVal = c; }