mirror of
https://github.com/openharmony/drivers_framework.git
synced 2026-07-01 21:54:07 -04:00
!650 fix:modify serialization of c type parameter
Merge pull request !650 from yue/master
This commit is contained in:
@@ -34,29 +34,13 @@ String ASTArrayType::EmitCType(TypeMode mode) const
|
||||
case TypeMode::PARAM_IN: {
|
||||
if (elementType_->GetTypeKind() == TypeKind::TYPE_STRING) {
|
||||
return String::Format("%s*", elementType_->EmitCType(TypeMode::NO_MODE).string());
|
||||
} else if (elementType_->GetTypeKind() == TypeKind::TYPE_STRUCT
|
||||
|| elementType_->GetTypeKind() == TypeKind::TYPE_UNION) {
|
||||
return String::Format("%s", elementType_->EmitCType(TypeMode::PARAM_IN).string());
|
||||
} else {
|
||||
return String::Format("%s*", elementType_->EmitCType(TypeMode::PARAM_IN).string());
|
||||
}
|
||||
}
|
||||
case TypeMode::PARAM_OUT: {
|
||||
if (elementType_->GetTypeKind() == TypeKind::TYPE_STRUCT
|
||||
|| elementType_->GetTypeKind() == TypeKind::TYPE_UNION) {
|
||||
return elementType_->EmitCType(TypeMode::PARAM_OUT);
|
||||
} else {
|
||||
return String::Format("%s*", elementType_->EmitCType(TypeMode::PARAM_OUT).string());
|
||||
}
|
||||
}
|
||||
case TypeMode::LOCAL_VAR: {
|
||||
if (elementType_->GetTypeKind() == TypeKind::TYPE_STRUCT
|
||||
|| elementType_->GetTypeKind() == TypeKind::TYPE_UNION) {
|
||||
return String::Format("%s", elementType_->EmitCType(TypeMode::LOCAL_VAR).string());
|
||||
} else {
|
||||
return String::Format("%s*", elementType_->EmitCType(TypeMode::LOCAL_VAR).string());
|
||||
}
|
||||
return String::Format("const %s*", elementType_->EmitCType(TypeMode::NO_MODE).string());
|
||||
}
|
||||
case TypeMode::PARAM_OUT:
|
||||
return String::Format("%s*", elementType_->EmitCType(TypeMode::NO_MODE).string());
|
||||
case TypeMode::LOCAL_VAR:
|
||||
return String::Format("%s*", elementType_->EmitCType(TypeMode::NO_MODE).string());
|
||||
default:
|
||||
return "unknow type";
|
||||
}
|
||||
@@ -83,15 +67,15 @@ String ASTArrayType::EmitJavaType(TypeMode mode, bool isInnerType) const
|
||||
return String::Format("%s[]", elementType_->EmitJavaType(TypeMode::NO_MODE, false).string());
|
||||
}
|
||||
|
||||
void ASTArrayType::EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
void ASTArrayType::EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
String lenName = String::Format("%sLen", name.string());
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufWriteUint32(%s, %s)) {\n",
|
||||
parcelName.string(), lenName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: write %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
|
||||
@@ -109,25 +93,35 @@ void ASTArrayType::EmitCWriteVar(const String& parcelName, const String& name, c
|
||||
elementName = String::Format("%s[i]", name.string());
|
||||
}
|
||||
|
||||
elementType_->EmitCWriteVar(parcelName, elementName, gotoLabel, sb, prefix + g_tab);
|
||||
elementType_->EmitCWriteVar(parcelName, elementName, ecName, gotoLabel, sb, prefix + g_tab);
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTArrayType::EmitCProxyWriteOutVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
String lenName = String::Format("*%sLen", name.string());
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufWriteUint32(%s, %s)) {\n",
|
||||
parcelName.string(), lenName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: write %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTArrayType::EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
const String& ecName, const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
String lenName = String::Format("%sLen", name.string());
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint32(%s, %s)) {\n",
|
||||
parcelName.string(), lenName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s size failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n\n");
|
||||
|
||||
EmitCMallocVar(name, lenName, true, gotoLabel, sb, prefix);
|
||||
sb.Append("\n");
|
||||
|
||||
if (Options::GetInstance().DoGenerateKernelCode()) {
|
||||
sb.Append(prefix).AppendFormat("for (i = 0; i < *%s; i++) {\n", lenName.string());
|
||||
} else {
|
||||
@@ -135,41 +129,41 @@ void ASTArrayType::EmitCProxyReadVar(const String& parcelName, const String& nam
|
||||
}
|
||||
|
||||
if (elementType_->GetTypeKind() == TypeKind::TYPE_STRING) {
|
||||
EmitCProxyReadStrElement(parcelName, name, gotoLabel, sb, prefix);
|
||||
EmitCProxyReadStrElement(parcelName, name, ecName, gotoLabel, sb, prefix);
|
||||
} else if (elementType_->GetTypeKind() == TypeKind::TYPE_STRUCT) {
|
||||
String element = String::Format("&(*%s)[i]", name.string());
|
||||
elementType_->EmitCProxyReadVar(parcelName, element, true, gotoLabel, sb, prefix + g_tab);
|
||||
String element = String::Format("&%s[i]", name.string());
|
||||
elementType_->EmitCProxyReadVar(parcelName, element, true, ecName, gotoLabel, sb, prefix + g_tab);
|
||||
} else if (elementType_->GetTypeKind() == TypeKind::TYPE_UNION) {
|
||||
String element = String::Format("&(*%s)[i]", name.string());
|
||||
String element = String::Format("&%s[i]", name.string());
|
||||
String elementCp = String::Format("%sElementCp", name.string());
|
||||
elementType_->EmitCProxyReadVar(parcelName, elementCp, true, gotoLabel, sb, prefix + g_tab);
|
||||
elementType_->EmitCProxyReadVar(parcelName, elementCp, true, ecName, gotoLabel, sb, prefix + g_tab);
|
||||
sb.Append(prefix + g_tab).AppendFormat("(void)memcpy_s(%s, sizeof(%s), %s, sizeof(%s));\n",
|
||||
element.string(), elementType_->EmitCType().string(), elementCp.string(),
|
||||
elementType_->EmitCType().string());
|
||||
} else if (elementType_->GetTypeKind() == TypeKind::TYPE_FILEDESCRIPTOR) {
|
||||
String element = String::Format("(*%s)[i]", name.string());
|
||||
elementType_->EmitCProxyReadVar(parcelName, element, true, gotoLabel, sb, prefix + g_tab);
|
||||
String element = String::Format("%s[i]", name.string());
|
||||
elementType_->EmitCProxyReadVar(parcelName, element, true, ecName, gotoLabel, sb, prefix + g_tab);
|
||||
} else {
|
||||
String element = String::Format("&(*%s)[i]", name.string());
|
||||
elementType_->EmitCProxyReadVar(parcelName, element, true, gotoLabel, sb, prefix + g_tab);
|
||||
String element = String::Format("&%s[i]", name.string());
|
||||
elementType_->EmitCProxyReadVar(parcelName, element, true, ecName, gotoLabel, sb, prefix + g_tab);
|
||||
}
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTArrayType::EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
void ASTArrayType::EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
String lenName = String::Format("%sLen", name.string());
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint32(%s, &%s)) {\n",
|
||||
parcelName.string(), lenName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s size failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n\n");
|
||||
|
||||
sb.Append(prefix).AppendFormat("if (%s > 0) {\n", lenName.string());
|
||||
EmitCMallocVar(name, lenName, false, "errors", sb, prefix + g_tab);
|
||||
EmitCMallocVar(name, lenName, false, ecName, gotoLabel, sb, prefix + g_tab);
|
||||
sb.Append("\n");
|
||||
|
||||
if (Options::GetInstance().DoGenerateKernelCode()) {
|
||||
@@ -178,28 +172,46 @@ void ASTArrayType::EmitCStubReadVar(const String& parcelName, const String& name
|
||||
sb.Append(prefix + g_tab).AppendFormat("for (uint32_t i = 0; i < %s; i++) {\n", lenName.string());
|
||||
}
|
||||
if (elementType_->GetTypeKind() == TypeKind::TYPE_STRING) {
|
||||
EmitCStubReadStrElement(parcelName, name, sb, prefix);
|
||||
EmitCStubReadStrElement(parcelName, name, ecName, gotoLabel, sb, prefix);
|
||||
} else if (elementType_->GetTypeKind() == TypeKind::TYPE_STRUCT) {
|
||||
String element = String::Format("&%s[i]", name.string());
|
||||
elementType_->EmitCStubReadVar(parcelName, element, sb, prefix + g_tab + g_tab);
|
||||
elementType_->EmitCStubReadVar(parcelName, element, ecName, gotoLabel, sb, prefix + g_tab + g_tab);
|
||||
} else if (elementType_->GetTypeKind() == TypeKind::TYPE_UNION) {
|
||||
String element = String::Format("%s[i]", name.string());
|
||||
String elementCp = String::Format("%sElementCp", name.string());
|
||||
elementType_->EmitCStubReadVar(parcelName, elementCp, sb, prefix + g_tab + g_tab);
|
||||
elementType_->EmitCStubReadVar(parcelName, elementCp, ecName, gotoLabel, sb, prefix + g_tab + g_tab);
|
||||
sb.Append(prefix + g_tab + g_tab).AppendFormat("(void)memcpy_s(&%s, sizeof(%s), %s, sizeof(%s));\n",
|
||||
element.string(), elementType_->EmitCType().string(), elementCp.string(),
|
||||
elementType_->EmitCType().string());
|
||||
} else if (elementType_->GetTypeKind() == TypeKind::TYPE_FILEDESCRIPTOR) {
|
||||
String element = String::Format("%s[i]", name.string());
|
||||
elementType_->EmitCStubReadVar(parcelName, element, sb, prefix + g_tab + g_tab);
|
||||
elementType_->EmitCStubReadVar(parcelName, element, ecName, gotoLabel, sb, prefix + g_tab + g_tab);
|
||||
} else {
|
||||
String element = String::Format("&%s[i]", name.string());
|
||||
elementType_->EmitCStubReadVar(parcelName, element, sb, prefix + g_tab + g_tab);
|
||||
elementType_->EmitCStubReadVar(parcelName, element, ecName, gotoLabel, sb, prefix + g_tab + g_tab);
|
||||
}
|
||||
sb.Append(prefix + g_tab).Append("}\n");
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTArrayType::EmitCStubReadOutVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
String lenName = String::Format("%sLen", name.string());
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint32(%s, &%s)) {\n",
|
||||
parcelName.string(), lenName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s size failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n\n");
|
||||
|
||||
sb.Append(prefix).AppendFormat("if (%s > 0) {\n", lenName.string());
|
||||
EmitCMallocVar(name, lenName, false, ecName, gotoLabel, sb, prefix + g_tab);
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
|
||||
void ASTArrayType::EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel) const
|
||||
{
|
||||
@@ -250,14 +262,14 @@ void ASTArrayType::EmitCMarshalling(const String& name, StringBuilder& sb, const
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTArrayType::EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const
|
||||
void ASTArrayType::EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& prefix, std::vector<String>& freeObjStatements) const
|
||||
{
|
||||
String lenName = String::Format("%sLen", name.string());
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint32(data, &%s)) {\n", lenName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", lenName.string());
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
sb.Append(prefix).AppendFormat("if (%s > 0) {\n", lenName.string());
|
||||
String newPrefix = prefix + g_tab;
|
||||
@@ -265,7 +277,7 @@ void ASTArrayType::EmitCUnMarshalling(const String& name, StringBuilder& sb, con
|
||||
sb.Append(newPrefix).AppendFormat("%s = (%s*)OsalMemCalloc(sizeof(%s) * %s);\n",
|
||||
name.string(), elementType_->EmitCType().string(), elementType_->EmitCType().string(), lenName.string());
|
||||
sb.Append(newPrefix).AppendFormat("if (%s == NULL) {\n", name.string());
|
||||
sb.Append(newPrefix + g_tab).AppendFormat("goto errors;\n");
|
||||
sb.Append(newPrefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(newPrefix).Append("}\n");
|
||||
freeObjStatements.push_back(String::Format("OsalMemFree(%s);\n", name.string()));
|
||||
|
||||
@@ -276,31 +288,31 @@ void ASTArrayType::EmitCUnMarshalling(const String& name, StringBuilder& sb, con
|
||||
}
|
||||
|
||||
if (elementType_->GetTypeKind() == TypeKind::TYPE_STRING) {
|
||||
EmitCStringElementUnMarshalling(name, sb, newPrefix, freeObjStatements);
|
||||
EmitCStringElementUnMarshalling(name, gotoLabel, sb, newPrefix, freeObjStatements);
|
||||
} else if (elementType_->GetTypeKind() == TypeKind::TYPE_STRUCT) {
|
||||
String element = String::Format("&%s[i]", name.string());
|
||||
elementType_->EmitCUnMarshalling(element, sb, newPrefix + g_tab, freeObjStatements);
|
||||
elementType_->EmitCUnMarshalling(element, gotoLabel, sb, newPrefix + g_tab, freeObjStatements);
|
||||
} else if (elementType_->GetTypeKind() == TypeKind::TYPE_UNION) {
|
||||
String element = String::Format("%s[i]", name.string());
|
||||
String elementCp = String::Format("%sElementCp", name.string());
|
||||
elementType_->EmitCUnMarshalling(elementCp, sb, newPrefix + g_tab, freeObjStatements);
|
||||
elementType_->EmitCUnMarshalling(elementCp, gotoLabel, sb, newPrefix + g_tab, freeObjStatements);
|
||||
sb.Append(newPrefix + g_tab).AppendFormat("(void)memcpy_s(&%s, sizeof(%s), %s, sizeof(%s));\n",
|
||||
element.string(), elementType_->EmitCType().string(), elementCp.string(),
|
||||
elementType_->EmitCType().string());
|
||||
} else {
|
||||
String element = String::Format("%s[i]", name.string());
|
||||
elementType_->EmitCUnMarshalling(element, sb, newPrefix + g_tab, freeObjStatements);
|
||||
elementType_->EmitCUnMarshalling(element, gotoLabel, sb, newPrefix + g_tab, freeObjStatements);
|
||||
}
|
||||
sb.Append(newPrefix).Append("}\n");
|
||||
sb.Append(prefix).Append("}\n");
|
||||
freeObjStatements.pop_back();
|
||||
}
|
||||
|
||||
void ASTArrayType::EmitCStringElementUnMarshalling(const String& name, StringBuilder& sb, const String& newPrefix,
|
||||
std::vector<String>& freeObjStatements) const
|
||||
void ASTArrayType::EmitCStringElementUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& newPrefix, std::vector<String>& freeObjStatements) const
|
||||
{
|
||||
String element = String::Format("%sElement", name.string());
|
||||
elementType_->EmitCUnMarshalling(element, sb, newPrefix + g_tab, freeObjStatements);
|
||||
elementType_->EmitCUnMarshalling(element, gotoLabel, sb, newPrefix + g_tab, freeObjStatements);
|
||||
if (Options::GetInstance().DoGenerateKernelCode()) {
|
||||
sb.Append(newPrefix).AppendFormat("%s[i] = (char*)OsalMemCalloc(strlen(%s) + 1);\n",
|
||||
name.string(), element.string());
|
||||
@@ -373,7 +385,7 @@ void ASTArrayType::EmitCppUnMarshalling(const String& parcelName, const String&
|
||||
void ASTArrayType::EmitMemoryRecycle(const String& name, bool isClient, bool ownership, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
{
|
||||
String varName = isClient ? String::Format("*%s", name.string()) : name;
|
||||
String varName = name;
|
||||
String lenName = isClient ? String::Format("*%sLen", name.string()) : String::Format("%sLen", name.string());
|
||||
|
||||
sb.Append(prefix).AppendFormat("if (%s > 0 && %s != NULL) {\n", lenName.string(), varName.string());
|
||||
@@ -384,8 +396,7 @@ void ASTArrayType::EmitMemoryRecycle(const String& name, bool isClient, bool own
|
||||
sb.Append(prefix + g_tab).AppendFormat("for (uint32_t i = 0; i < %s; i++) {\n", lenName.string());
|
||||
}
|
||||
|
||||
String elementName = isClient ? String::Format("(%s)[i]", varName.string()) :
|
||||
String::Format("%s[i]", varName.string());
|
||||
String elementName = String::Format("%s[i]", varName.string());
|
||||
elementType_->EmitMemoryRecycle(elementName, false, false, sb, prefix + g_tab + g_tab);
|
||||
sb.Append(prefix + g_tab).Append("}\n");
|
||||
}
|
||||
@@ -402,7 +413,7 @@ void ASTArrayType::EmitJavaWriteVar(const String& parcelName, const String& name
|
||||
const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (%s == null) {\n", name.string());
|
||||
sb.Append(prefix).AppendFormat(" %s.writeInt(-1);\n", parcelName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s.writeInt(-1);\n", parcelName.string());
|
||||
sb.Append(prefix).Append("} else { \n");
|
||||
EmitJavaWriteArrayVar(parcelName, name, sb, prefix + g_tab);
|
||||
sb.Append(prefix).Append("}\n");
|
||||
@@ -534,8 +545,8 @@ void ASTArrayType::EmitJavaWriteArrayVar(const String& parcelName, const String&
|
||||
}
|
||||
}
|
||||
|
||||
void ASTArrayType::EmitCMallocVar(const String& name, const String& lenName, bool isClient, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
void ASTArrayType::EmitCMallocVar(const String& name, const String& lenName, bool isClient, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
String varName = isClient ? String::Format("*%s", name.string()) : name;
|
||||
String lenVarName = isClient ? String::Format("*%s", lenName.string()) : lenName;
|
||||
@@ -543,58 +554,62 @@ void ASTArrayType::EmitCMallocVar(const String& name, const String& lenName, boo
|
||||
sb.Append(prefix).AppendFormat("%s = (%s*)OsalMemCalloc(sizeof(%s) * (%s));\n", varName.string(),
|
||||
elementType_->EmitCType().string(), elementType_->EmitCType().string(), lenVarName.string());
|
||||
sb.Append(prefix).AppendFormat("if (%s == NULL) {\n", varName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("ec = HDF_ERR_MALLOC_FAIL;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("HDF_LOGE(\"%%{public}s: malloc %s failed\", __func__);\n",
|
||||
varName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_MALLOC_FAIL;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).AppendFormat("}\n");
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTArrayType::EmitCProxyReadStrElement(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
void ASTArrayType::EmitCProxyReadStrElement(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
String cpName = String::Format("%sCp", name.string());
|
||||
elementType_->EmitCProxyReadVar(parcelName, cpName, true, gotoLabel, sb, prefix + g_tab);
|
||||
elementType_->EmitCProxyReadVar(parcelName, cpName, true, ecName, gotoLabel, sb, prefix + g_tab);
|
||||
sb.Append("\n");
|
||||
if (Options::GetInstance().DoGenerateKernelCode()) {
|
||||
sb.Append(prefix + g_tab).AppendFormat("(*%s)[i] = (char*)OsalMemCalloc(strlen(%s) + 1);\n",
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s[i] = (char*)OsalMemCalloc(strlen(%s) + 1);\n",
|
||||
name.string(), cpName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("if ((*%s)[i] == NULL) {\n", name.string());
|
||||
sb.Append(prefix + g_tab + g_tab).Append("ec = HDF_ERR_MALLOC_FAIL;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("if (%s[i] == NULL) {\n", name.string());
|
||||
sb.Append(prefix + g_tab + g_tab).AppendFormat("HDF_LOGE(\"%%{public}s: malloc %s[i] failed\", __func__);\n",
|
||||
name.string());
|
||||
sb.Append(prefix + g_tab + g_tab).AppendFormat("%s = HDF_ERR_MALLOC_FAIL;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix + g_tab).Append("}\n\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("if (strcpy_s((*%s)[i], (strlen(%s) + 1), %s) != HDF_SUCCESS) {\n",
|
||||
sb.Append(prefix + g_tab).AppendFormat("if (strcpy_s(%s[i], (strlen(%s) + 1), %s) != HDF_SUCCESS) {\n",
|
||||
name.string(), cpName.string(), cpName.string());
|
||||
sb.Append(prefix + g_tab + g_tab).AppendFormat("HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n",
|
||||
cpName.string());
|
||||
sb.Append(prefix + g_tab + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix + g_tab).Append("}\n");
|
||||
} else {
|
||||
sb.Append(prefix + g_tab).AppendFormat("(*%s)[i] = strdup(%sCp);\n",
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s[i] = strdup(%sCp);\n",
|
||||
name.string(), name.string());
|
||||
}
|
||||
}
|
||||
|
||||
void ASTArrayType::EmitCStubReadStrElement(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
void ASTArrayType::EmitCStubReadStrElement(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
String element = String::Format("%sCp", name.string());
|
||||
String newPrefix = prefix + g_tab + g_tab;
|
||||
elementType_->EmitCStubReadVar(parcelName, element, sb, newPrefix);
|
||||
elementType_->EmitCStubReadVar(parcelName, element, ecName, gotoLabel, sb, newPrefix);
|
||||
sb.Append("\n");
|
||||
if (Options::GetInstance().DoGenerateKernelCode()) {
|
||||
sb.Append(newPrefix).AppendFormat("%s[i] = (char*)OsalMemCalloc(strlen(%s) + 1);\n",
|
||||
name.string(), element.string());
|
||||
sb.Append(newPrefix).AppendFormat("if (%s[i] == NULL) {\n", name.string());
|
||||
sb.Append(newPrefix + g_tab).Append("ec = HDF_ERR_MALLOC_FAIL;\n");
|
||||
sb.Append(newPrefix + g_tab).AppendFormat("goto errors;\n");
|
||||
sb.Append(newPrefix + g_tab).AppendFormat("%s = HDF_ERR_MALLOC_FAIL;\n", ecName.string());
|
||||
sb.Append(newPrefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(newPrefix).Append("}\n\n");
|
||||
|
||||
sb.Append(newPrefix).AppendFormat("if (strcpy_s((%s)[i], (strlen(%s) + 1), %s) != HDF_SUCCESS) {\n",
|
||||
sb.Append(newPrefix).AppendFormat("if (strcpy_s(%s[i], (strlen(%s) + 1), %s) != HDF_SUCCESS) {\n",
|
||||
name.string(), element.string(), element.string());
|
||||
sb.Append(newPrefix + g_tab).AppendFormat("HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n",
|
||||
element.string());
|
||||
sb.Append(newPrefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(newPrefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(newPrefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(newPrefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(newPrefix).Append("}\n");
|
||||
} else {
|
||||
sb.Append(newPrefix).AppendFormat("%s[i] = strdup(%sCp);\n", name.string(), name.string());
|
||||
|
||||
@@ -37,14 +37,20 @@ public:
|
||||
|
||||
String EmitJavaType(TypeMode mode, bool isInnerType = false) const override;
|
||||
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const override;
|
||||
void EmitCProxyWriteOutVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadOutVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel = 0) const override;
|
||||
@@ -54,7 +60,7 @@ public:
|
||||
|
||||
void EmitCMarshalling(const String& name, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
void EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const override;
|
||||
|
||||
void EmitCppMarshalling(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
@@ -78,17 +84,17 @@ private:
|
||||
void EmitJavaWriteArrayVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const;
|
||||
|
||||
void EmitCMallocVar(const String& name, const String& lenName, bool isClient, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const;
|
||||
void EmitCMallocVar(const String& name, const String& lenName, bool isClient, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const;
|
||||
|
||||
void EmitCProxyReadStrElement(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const;
|
||||
void EmitCProxyReadStrElement(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const;
|
||||
|
||||
void EmitCStubReadStrElement(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const;
|
||||
void EmitCStubReadStrElement(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const;
|
||||
|
||||
void EmitCStringElementUnMarshalling(const String& name, StringBuilder& sb, const String& newPrefix,
|
||||
std::vector<String>& freeObjStatements) const;
|
||||
void EmitCStringElementUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& newPrefix, std::vector<String>& freeObjStatements) const;
|
||||
|
||||
AutoPtr<ASTType> elementType_;
|
||||
};
|
||||
|
||||
@@ -62,42 +62,42 @@ String ASTBooleanType::EmitJavaType(TypeMode mode, bool isInnerType) const
|
||||
return isInnerType ? "Boolean" : "boolean";
|
||||
}
|
||||
|
||||
void ASTBooleanType::EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
void ASTBooleanType::EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufWriteInt8(%s, %s ? 1 : 0)) {\n",
|
||||
parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: write %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTBooleanType::EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
const String& ecName, const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadInt8(%s, (int8_t *)%s)) {\n",
|
||||
parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTBooleanType::EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadInt8(%s, (int8_t *)%s)) {\n",
|
||||
parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTBooleanType::EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadInt8(%s, (int8_t *)%s)) {\n",
|
||||
parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTBooleanType::EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel) const
|
||||
{
|
||||
@@ -129,14 +129,14 @@ void ASTBooleanType::EmitCMarshalling(const String& name, StringBuilder& sb, con
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTBooleanType::EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const
|
||||
void ASTBooleanType::EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& prefix, std::vector<String>& freeObjStatements) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadInt8(data, (int8_t *)&%s)) {\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
EmitFreeStatements(freeObjStatements, sb, prefix + g_tab);
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
|
||||
@@ -27,14 +27,14 @@ public:
|
||||
|
||||
String EmitJavaType(TypeMode mode, bool isInnerType = false) const override;
|
||||
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const override;
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel = 0) const override;
|
||||
@@ -44,7 +44,7 @@ public:
|
||||
|
||||
void EmitCMarshalling(const String& name, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
void EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const override;
|
||||
|
||||
void EmitCppMarshalling(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
|
||||
@@ -62,40 +62,40 @@ String ASTByteType::EmitJavaType(TypeMode mode, bool isInnerType) const
|
||||
return isInnerType ? "Byte" : "byte";
|
||||
}
|
||||
|
||||
void ASTByteType::EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
void ASTByteType::EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufWriteInt8(%s, %s)) {\n",
|
||||
parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: write %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTByteType::EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
const String& ecName, const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadInt8(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTByteType::EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadInt8(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTByteType::EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadInt8(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTByteType::EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel) const
|
||||
{
|
||||
@@ -127,14 +127,14 @@ void ASTByteType::EmitCMarshalling(const String& name, StringBuilder& sb, const
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTByteType::EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const
|
||||
void ASTByteType::EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& prefix, std::vector<String>& freeObjStatements) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadInt8(data, &%s)) {\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
EmitFreeStatements(freeObjStatements, sb, prefix + g_tab);
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
|
||||
@@ -27,14 +27,14 @@ public:
|
||||
|
||||
String EmitJavaType(TypeMode mode, bool isInnerType = false) const override;
|
||||
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const override;
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel = 0) const override;
|
||||
@@ -44,7 +44,7 @@ public:
|
||||
|
||||
void EmitCMarshalling(const String& name, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
void EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const override;
|
||||
|
||||
void EmitCppMarshalling(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
|
||||
@@ -62,40 +62,40 @@ String ASTDoubleType::EmitJavaType(TypeMode mode, bool isInnerType) const
|
||||
return isInnerType ? "Double" : "double";
|
||||
}
|
||||
|
||||
void ASTDoubleType::EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
void ASTDoubleType::EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufWriteDouble(%s, %s)) {\n",
|
||||
parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: write %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTDoubleType::EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
const String& ecName, const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadDouble(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTDoubleType::EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadDouble(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTDoubleType::EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadDouble(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTDoubleType::EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel) const
|
||||
{
|
||||
@@ -126,14 +126,14 @@ void ASTDoubleType::EmitCMarshalling(const String& name, StringBuilder& sb, cons
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTDoubleType::EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const
|
||||
void ASTDoubleType::EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& prefix, std::vector<String>& freeObjStatements) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadDouble(data, &%s)) {\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
EmitFreeStatements(freeObjStatements, sb, prefix + g_tab);
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
|
||||
@@ -27,14 +27,14 @@ public:
|
||||
|
||||
String EmitJavaType(TypeMode mode, bool isInnerType = false) const override;
|
||||
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const override;
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel = 0) const override;
|
||||
@@ -44,7 +44,7 @@ public:
|
||||
|
||||
void EmitCMarshalling(const String& name, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
void EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const override;
|
||||
|
||||
void EmitCppMarshalling(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
|
||||
@@ -161,42 +161,42 @@ String ASTEnumType::EmitJavaTypeDecl() const
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
void ASTEnumType::EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
void ASTEnumType::EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufWriteUint32(%s, (uint32_t)%s)) {\n",
|
||||
parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: write %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTEnumType::EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
const String& ecName, const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint32(%s, (uint32_t*)%s)) {\n",
|
||||
parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTEnumType::EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint32(%s, (uint32_t*)%s)) {\n",
|
||||
parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTEnumType::EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint32(%s, (uint32_t*)%s)) {\n",
|
||||
parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTEnumType::EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel) const
|
||||
{
|
||||
@@ -229,13 +229,13 @@ void ASTEnumType::EmitCMarshalling(const String& name, StringBuilder& sb, const
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTEnumType::EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const
|
||||
void ASTEnumType::EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& prefix, std::vector<String>& freeObjStatements) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadInt32(data, (int32_t*)&%s)) {\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
|
||||
@@ -146,14 +146,14 @@ public:
|
||||
|
||||
String EmitJavaTypeDecl() const;
|
||||
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const override;
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel = 0) const override;
|
||||
@@ -163,7 +163,7 @@ public:
|
||||
|
||||
void EmitCMarshalling(const String& name, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
void EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const override;
|
||||
|
||||
void EmitCppMarshalling(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
|
||||
@@ -62,20 +62,20 @@ String ASTFdType::EmitJavaType(TypeMode mode, bool isInnerType) const
|
||||
return isInnerType ? "Integer" : "int";
|
||||
}
|
||||
|
||||
void ASTFdType::EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
void ASTFdType::EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufWriteFileDescriptor(%s, %s)) {\n",
|
||||
parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: write %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTFdType::EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
const String& ecName, const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
if (isInnerType) {
|
||||
sb.Append(prefix).AppendFormat("%s = HdfSbufReadFileDescriptor(%s);\n",
|
||||
@@ -88,21 +88,21 @@ void ASTFdType::EmitCProxyReadVar(const String& parcelName, const String& name,
|
||||
}
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTFdType::EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
void ASTFdType::EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("%s = HdfSbufReadFileDescriptor(%s);\n",
|
||||
name.string(), parcelName.string());
|
||||
sb.Append(prefix).AppendFormat("if (%s < 0) {\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
@@ -136,14 +136,14 @@ void ASTFdType::EmitCMarshalling(const String& name, StringBuilder& sb, const St
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTFdType::EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const
|
||||
void ASTFdType::EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& prefix, std::vector<String>& freeObjStatements) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("%s = HdfSbufReadFileDescriptor(data);\n", name.string());
|
||||
sb.Append(prefix).AppendFormat("if (%s < 0) {\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
|
||||
@@ -27,14 +27,14 @@ public:
|
||||
|
||||
String EmitJavaType(TypeMode mode, bool isInnerType = false) const override;
|
||||
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const override;
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel = 0) const override;
|
||||
@@ -44,7 +44,7 @@ public:
|
||||
|
||||
void EmitCMarshalling(const String& name, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
void EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const override;
|
||||
|
||||
void EmitCppMarshalling(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
|
||||
@@ -62,40 +62,40 @@ String ASTFloatType::EmitJavaType(TypeMode mode, bool isInnerType) const
|
||||
return isInnerType ? "Float" : "float";
|
||||
}
|
||||
|
||||
void ASTFloatType::EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
void ASTFloatType::EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufWriteFloat(%s, %s)) {\n",
|
||||
parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: write %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTFloatType::EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
const String& ecName, const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadFloat(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTFloatType::EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadFloat(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTFloatType::EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadFloat(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTFloatType::EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel) const
|
||||
{
|
||||
@@ -126,14 +126,14 @@ void ASTFloatType::EmitCMarshalling(const String& name, StringBuilder& sb, const
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTFloatType::EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const
|
||||
void ASTFloatType::EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& prefix, std::vector<String>& freeObjStatements) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadFloat(data, &%s)) {\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
EmitFreeStatements(freeObjStatements, sb, prefix + g_tab);
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
|
||||
@@ -27,14 +27,14 @@ public:
|
||||
|
||||
String EmitJavaType(TypeMode mode, bool isInnerType = false) const override;
|
||||
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const override;
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel = 0) const override;
|
||||
@@ -44,7 +44,7 @@ public:
|
||||
|
||||
void EmitCMarshalling(const String& name, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
void EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const override;
|
||||
|
||||
void EmitCppMarshalling(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
|
||||
@@ -62,40 +62,40 @@ String ASTIntegerType::EmitJavaType(TypeMode mode, bool isInnerType) const
|
||||
return isInnerType ? "Integer" : "int";
|
||||
}
|
||||
|
||||
void ASTIntegerType::EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
void ASTIntegerType::EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufWriteInt32(%s, %s)) {\n",
|
||||
parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: write %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTIntegerType::EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
const String& ecName, const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadInt32(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTIntegerType::EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadInt32(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTIntegerType::EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadInt32(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTIntegerType::EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel) const
|
||||
{
|
||||
@@ -126,14 +126,14 @@ void ASTIntegerType::EmitCMarshalling(const String& name, StringBuilder& sb, con
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTIntegerType::EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const
|
||||
void ASTIntegerType::EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& prefix, std::vector<String>& freeObjStatements) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadInt32(data, &%s)) {\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
EmitFreeStatements(freeObjStatements, sb, prefix + g_tab);
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
|
||||
@@ -27,14 +27,14 @@ public:
|
||||
|
||||
String EmitJavaType(TypeMode mode, bool isInnerType = false) const override;
|
||||
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const override;
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel = 0) const override;
|
||||
@@ -44,7 +44,7 @@ public:
|
||||
|
||||
void EmitCMarshalling(const String& name, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
void EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const override;
|
||||
|
||||
void EmitCppMarshalling(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
|
||||
@@ -129,31 +129,31 @@ String ASTInterfaceType::EmitJavaType(TypeMode mode, bool isInnerType) const
|
||||
return name_;
|
||||
}
|
||||
|
||||
void ASTInterfaceType::EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
void ASTInterfaceType::EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (HdfSBufWriteRemoteService(%s, %s->AsObject(%s)) != 0) {\n",
|
||||
sb.Append(prefix).AppendFormat("if (HdfSbufWriteRemoteService(%s, %s->AsObject(%s)) != 0) {\n",
|
||||
parcelName.string(), name.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: write %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTInterfaceType::EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
void ASTInterfaceType::EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
String remoteName = String::Format("%sRemote", name.string());
|
||||
String miName = name_.StartsWith("I") ? name_.Substring(1) : name_;
|
||||
|
||||
sb.Append(prefix).AppendFormat("struct HdfRemoteService *%s = HdfSBufReadRemoteService(%s);\n",
|
||||
sb.Append(prefix).AppendFormat("struct HdfRemoteService *%s = HdfSbufReadRemoteService(%s);\n",
|
||||
remoteName.string(), parcelName.string());
|
||||
sb.Append(prefix).AppendFormat("if (%s == NULL) {\n", remoteName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", remoteName.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
sb.Append(prefix).AppendFormat("%s = %sGet(%s);\n",
|
||||
name.string(), miName.string(), remoteName.string());
|
||||
|
||||
@@ -105,11 +105,11 @@ public:
|
||||
|
||||
String EmitJavaType(TypeMode mode, bool isInnerType = false) const override;
|
||||
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const override;
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const override;
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel = 0) const override;
|
||||
|
||||
@@ -34,29 +34,13 @@ String ASTListType::EmitCType(TypeMode mode) const
|
||||
case TypeMode::PARAM_IN: {
|
||||
if (elementType_->GetTypeKind() == TypeKind::TYPE_STRING) {
|
||||
return String::Format("%s*", elementType_->EmitCType(TypeMode::NO_MODE).string());
|
||||
} else if (elementType_->GetTypeKind() == TypeKind::TYPE_STRUCT
|
||||
|| elementType_->GetTypeKind() == TypeKind::TYPE_UNION) {
|
||||
return String::Format("%s", elementType_->EmitCType(TypeMode::PARAM_IN).string());
|
||||
} else {
|
||||
return String::Format("%s*", elementType_->EmitCType(TypeMode::PARAM_IN).string());
|
||||
}
|
||||
}
|
||||
case TypeMode::PARAM_OUT: {
|
||||
if (elementType_->GetTypeKind() == TypeKind::TYPE_STRUCT
|
||||
|| elementType_->GetTypeKind() == TypeKind::TYPE_UNION) {
|
||||
return elementType_->EmitCType(TypeMode::PARAM_OUT);
|
||||
} else {
|
||||
return String::Format("%s*", elementType_->EmitCType(TypeMode::PARAM_OUT).string());
|
||||
}
|
||||
}
|
||||
case TypeMode::LOCAL_VAR: {
|
||||
if (elementType_->GetTypeKind() == TypeKind::TYPE_STRUCT
|
||||
|| elementType_->GetTypeKind() == TypeKind::TYPE_UNION) {
|
||||
return String::Format("%s", elementType_->EmitCType(TypeMode::LOCAL_VAR).string());
|
||||
} else {
|
||||
return String::Format("%s*", elementType_->EmitCType(TypeMode::LOCAL_VAR).string());
|
||||
}
|
||||
return String::Format("const %s*", elementType_->EmitCType(TypeMode::NO_MODE).string());
|
||||
}
|
||||
case TypeMode::PARAM_OUT:
|
||||
return String::Format("%s*", elementType_->EmitCType(TypeMode::NO_MODE).string());
|
||||
case TypeMode::LOCAL_VAR:
|
||||
return String::Format("%s*", elementType_->EmitCType(TypeMode::NO_MODE).string());
|
||||
default:
|
||||
return "unknow type";
|
||||
}
|
||||
@@ -83,15 +67,15 @@ String ASTListType::EmitJavaType(TypeMode mode, bool isInnerType) const
|
||||
return String::Format("List<%s>", elementType_->EmitJavaType(mode, true).string());
|
||||
}
|
||||
|
||||
void ASTListType::EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
void ASTListType::EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
String lenName = String::Format("%sLen", name.string());
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufWriteUint32(%s, %s)) {\n",
|
||||
parcelName.string(), lenName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: write %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
|
||||
@@ -109,25 +93,35 @@ void ASTListType::EmitCWriteVar(const String& parcelName, const String& name, co
|
||||
elementName = String::Format("%s[i]", name.string());
|
||||
}
|
||||
|
||||
elementType_->EmitCWriteVar(parcelName, elementName, gotoLabel, sb, prefix + g_tab);
|
||||
elementType_->EmitCWriteVar(parcelName, elementName, ecName.string(), gotoLabel, sb, prefix + g_tab);
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTListType::EmitCProxyWriteOutVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
String lenName = String::Format("*%sLen", name.string());
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufWriteUint32(%s, %s)) {\n",
|
||||
parcelName.string(), lenName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: write %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTListType::EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
const String& ecName, const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
String lenName = String::Format("%sLen", name.string());
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint32(%s, %s)) {\n",
|
||||
parcelName.string(), lenName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s size failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n\n");
|
||||
|
||||
EmitCMallocVar(name, lenName, true, gotoLabel, sb, prefix);
|
||||
sb.Append("\n");
|
||||
|
||||
if (Options::GetInstance().DoGenerateKernelCode()) {
|
||||
sb.Append(prefix).AppendFormat("for (i = 0; i < *%s; i++) {\n", lenName.string());
|
||||
} else {
|
||||
@@ -135,29 +129,29 @@ void ASTListType::EmitCProxyReadVar(const String& parcelName, const String& name
|
||||
}
|
||||
|
||||
if (elementType_->GetTypeKind() == TypeKind::TYPE_STRING) {
|
||||
EmitCProxyReadStrElement(parcelName, name, gotoLabel, sb, prefix);
|
||||
EmitCProxyReadStrElement(parcelName, name, ecName, gotoLabel, sb, prefix);
|
||||
} else if (elementType_->GetTypeKind() == TypeKind::TYPE_STRUCT) {
|
||||
String element = String::Format("&(*%s)[i]", name.string());
|
||||
elementType_->EmitCProxyReadVar(parcelName, element, true, gotoLabel, sb, prefix + g_tab);
|
||||
String element = String::Format("&%s[i]", name.string());
|
||||
elementType_->EmitCProxyReadVar(parcelName, element, true, ecName, gotoLabel, sb, prefix + g_tab);
|
||||
} else if (elementType_->GetTypeKind() == TypeKind::TYPE_UNION) {
|
||||
String element = String::Format("&(*%s)[i]", name.string());
|
||||
String element = String::Format("&%s[i]", name.string());
|
||||
String elementCp = String::Format("%sElementCp", name.string());
|
||||
elementType_->EmitCProxyReadVar(parcelName, elementCp, true, gotoLabel, sb, prefix + g_tab);
|
||||
elementType_->EmitCProxyReadVar(parcelName, elementCp, true, ecName, gotoLabel, sb, prefix + g_tab);
|
||||
sb.Append(prefix + g_tab).AppendFormat("(void)memcpy_s(%s, sizeof(%s), %s, sizeof(%s));\n",
|
||||
element.string(), elementType_->EmitCType().string(), elementCp.string(),
|
||||
elementType_->EmitCType().string());
|
||||
} else if (elementType_->GetTypeKind() == TypeKind::TYPE_FILEDESCRIPTOR) {
|
||||
String element = String::Format("(*%s)[i]", name.string());
|
||||
elementType_->EmitCProxyReadVar(parcelName, element, true, gotoLabel, sb, prefix + g_tab);
|
||||
String element = String::Format("%s[i]", name.string());
|
||||
elementType_->EmitCProxyReadVar(parcelName, element, true, ecName, gotoLabel, sb, prefix + g_tab);
|
||||
} else {
|
||||
String element = String::Format("&(*%s)[i]", name.string());
|
||||
elementType_->EmitCProxyReadVar(parcelName, element, true, gotoLabel, sb, prefix + g_tab);
|
||||
String element = String::Format("&%s[i]", name.string());
|
||||
elementType_->EmitCProxyReadVar(parcelName, element, true, ecName, gotoLabel, sb, prefix + g_tab);
|
||||
}
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTListType::EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
void ASTListType::EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
String lenName = String::Format("%sLen", name.string());
|
||||
|
||||
@@ -165,12 +159,12 @@ void ASTListType::EmitCStubReadVar(const String& parcelName, const String& name,
|
||||
parcelName.string(), lenName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s size failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n\n");
|
||||
|
||||
sb.Append(prefix).AppendFormat("if (%s > 0) {\n", lenName.string());
|
||||
EmitCMallocVar(name, lenName, false, "errors", sb, prefix + g_tab);
|
||||
EmitCMallocVar(name, lenName, false, ecName, gotoLabel, sb, prefix + g_tab);
|
||||
sb.Append("\n");
|
||||
|
||||
if (Options::GetInstance().DoGenerateKernelCode()) {
|
||||
@@ -180,28 +174,45 @@ void ASTListType::EmitCStubReadVar(const String& parcelName, const String& name,
|
||||
}
|
||||
|
||||
if (elementType_->GetTypeKind() == TypeKind::TYPE_STRING) {
|
||||
EmitCStubReadStrElement(parcelName, name, sb, prefix);
|
||||
EmitCStubReadStrElement(parcelName, name, ecName, gotoLabel, sb, prefix);
|
||||
} else if (elementType_->GetTypeKind() == TypeKind::TYPE_STRUCT) {
|
||||
String element = String::Format("&%s[i]", name.string());
|
||||
elementType_->EmitCStubReadVar(parcelName, element, sb, prefix + g_tab + g_tab);
|
||||
elementType_->EmitCStubReadVar(parcelName, element, ecName, gotoLabel, sb, prefix + g_tab + g_tab);
|
||||
} else if (elementType_->GetTypeKind() == TypeKind::TYPE_UNION) {
|
||||
String element = String::Format("%s[i]", name.string());
|
||||
String elementCp = String::Format("%sElementCp", name.string());
|
||||
elementType_->EmitCStubReadVar(parcelName, elementCp, sb, prefix + g_tab + g_tab);
|
||||
elementType_->EmitCStubReadVar(parcelName, elementCp, ecName, gotoLabel, sb, prefix + g_tab + g_tab);
|
||||
sb.Append(prefix + g_tab + g_tab).AppendFormat("(void)memcpy_s(&%s, sizeof(%s), %s, sizeof(%s));\n",
|
||||
element.string(), elementType_->EmitCType().string(), elementCp.string(),
|
||||
elementType_->EmitCType().string());
|
||||
} else if (elementType_->GetTypeKind() == TypeKind::TYPE_FILEDESCRIPTOR) {
|
||||
String element = String::Format("%s[i]", name.string());
|
||||
elementType_->EmitCStubReadVar(parcelName, element, sb, prefix + g_tab + g_tab);
|
||||
elementType_->EmitCStubReadVar(parcelName, element, ecName, gotoLabel, sb, prefix + g_tab + g_tab);
|
||||
} else {
|
||||
String element = String::Format("&%s[i]", name.string());
|
||||
elementType_->EmitCStubReadVar(parcelName, element, sb, prefix + g_tab + g_tab);
|
||||
elementType_->EmitCStubReadVar(parcelName, element, ecName, gotoLabel, sb, prefix + g_tab + g_tab);
|
||||
}
|
||||
sb.Append(prefix + g_tab).Append("}\n");
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTListType::EmitCStubReadOutVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
String lenName = String::Format("%sLen", name.string());
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint32(%s, &%s)) {\n",
|
||||
parcelName.string(), lenName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s size failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n\n");
|
||||
|
||||
sb.Append(prefix).AppendFormat("if (%s > 0) {\n", lenName.string());
|
||||
EmitCMallocVar(name, lenName, false, ecName, gotoLabel, sb, prefix + g_tab);
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTListType::EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel) const
|
||||
{
|
||||
@@ -252,14 +263,14 @@ void ASTListType::EmitCMarshalling(const String& name, StringBuilder& sb, const
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTListType::EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const
|
||||
void ASTListType::EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& prefix, std::vector<String>& freeObjStatements) const
|
||||
{
|
||||
String lenName = String::Format("%sLen", name.string());
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint32(data, &%s)) {\n", lenName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", lenName.string());
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
|
||||
sb.Append(prefix).AppendFormat("if (%s > 0) {\n", lenName.string());
|
||||
@@ -268,7 +279,7 @@ void ASTListType::EmitCUnMarshalling(const String& name, StringBuilder& sb, cons
|
||||
sb.Append(newPrefix).AppendFormat("%s = (%s*)OsalMemCalloc(sizeof(%s) * %s);\n",
|
||||
name.string(), elementType_->EmitCType().string(), elementType_->EmitCType().string(), lenName.string());
|
||||
sb.Append(newPrefix).AppendFormat("if (%s == NULL) {\n", name.string());
|
||||
sb.Append(newPrefix + g_tab).AppendFormat("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(newPrefix).Append("}\n");
|
||||
|
||||
freeObjStatements.push_back(String::Format("OsalMemFree(%s);\n", name.string()));
|
||||
@@ -280,31 +291,31 @@ void ASTListType::EmitCUnMarshalling(const String& name, StringBuilder& sb, cons
|
||||
}
|
||||
|
||||
if (elementType_->GetTypeKind() == TypeKind::TYPE_STRING) {
|
||||
EmitCStringElementUnMarshalling(name, sb, newPrefix, freeObjStatements);
|
||||
EmitCStringElementUnMarshalling(name, gotoLabel, sb, newPrefix, freeObjStatements);
|
||||
} else if (elementType_->GetTypeKind() == TypeKind::TYPE_STRUCT) {
|
||||
String element = String::Format("&%s[i]", name.string());
|
||||
elementType_->EmitCUnMarshalling(element, sb, newPrefix + g_tab, freeObjStatements);
|
||||
elementType_->EmitCUnMarshalling(element, gotoLabel, sb, newPrefix + g_tab, freeObjStatements);
|
||||
} else if (elementType_->GetTypeKind() == TypeKind::TYPE_UNION) {
|
||||
String element = String::Format("%s[i]", name.string());
|
||||
String elementCp = String::Format("%sElementCp", name.string());
|
||||
elementType_->EmitCUnMarshalling(elementCp, sb, newPrefix + g_tab, freeObjStatements);
|
||||
elementType_->EmitCUnMarshalling(elementCp, gotoLabel, sb, newPrefix + g_tab, freeObjStatements);
|
||||
sb.Append(newPrefix + g_tab).AppendFormat("(void)memcpy_s(&%s, sizeof(%s), %s, sizeof(%s));\n",
|
||||
element.string(), elementType_->EmitCType().string(), elementCp.string(),
|
||||
elementType_->EmitCType().string());
|
||||
} else {
|
||||
String element = String::Format("%s[i]", name.string());
|
||||
elementType_->EmitCUnMarshalling(element, sb, newPrefix + g_tab, freeObjStatements);
|
||||
elementType_->EmitCUnMarshalling(element, gotoLabel, sb, newPrefix + g_tab, freeObjStatements);
|
||||
}
|
||||
sb.Append(newPrefix).Append("}\n");
|
||||
sb.Append(prefix).Append("}\n");
|
||||
freeObjStatements.pop_back();
|
||||
}
|
||||
|
||||
void ASTListType::EmitCStringElementUnMarshalling(const String& name, StringBuilder& sb, const String& newPrefix,
|
||||
std::vector<String>& freeObjStatements) const
|
||||
void ASTListType::EmitCStringElementUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& newPrefix, std::vector<String>& freeObjStatements) const
|
||||
{
|
||||
String element = String::Format("%sElement", name.string());
|
||||
elementType_->EmitCUnMarshalling(element, sb, newPrefix + g_tab, freeObjStatements);
|
||||
elementType_->EmitCUnMarshalling(element, gotoLabel, sb, newPrefix + g_tab, freeObjStatements);
|
||||
if (Options::GetInstance().DoGenerateKernelCode()) {
|
||||
sb.Append(newPrefix).AppendFormat("%s[i] = (char*)OsalMemCalloc(strlen(%s) + 1);\n",
|
||||
name.string(), element.string());
|
||||
@@ -376,7 +387,7 @@ void ASTListType::EmitCppUnMarshalling(const String& parcelName, const String& n
|
||||
void ASTListType::EmitMemoryRecycle(const String& name, bool isClient, bool ownership, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
{
|
||||
String varName = isClient ? String::Format("*%s", name.string()) : name;
|
||||
String varName = name;
|
||||
String lenName = isClient ? String::Format("*%sLen", name.string()) : String::Format("%sLen", name.string());
|
||||
|
||||
sb.Append(prefix).AppendFormat("if (%s > 0 && %s != NULL) {\n", lenName.string(), varName.string());
|
||||
@@ -387,8 +398,7 @@ void ASTListType::EmitMemoryRecycle(const String& name, bool isClient, bool owne
|
||||
sb.Append(prefix + g_tab).AppendFormat("for (uint32_t i = 0; i < %s; i++) {\n", lenName.string());
|
||||
}
|
||||
|
||||
String elementName = isClient ? String::Format("(%s)[i]", varName.string()) :
|
||||
String::Format("%s[i]", varName.string());
|
||||
String elementName = String::Format("%s[i]", varName.string());
|
||||
elementType_->EmitMemoryRecycle(elementName, false, false, sb, prefix + g_tab + g_tab);
|
||||
sb.Append(prefix + g_tab).Append("}\n");
|
||||
}
|
||||
@@ -434,8 +444,8 @@ void ASTListType::EmitJavaReadInnerVar(const String& parcelName, const String& n
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTListType::EmitCMallocVar(const String& name, const String& lenName, bool isClient, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
void ASTListType::EmitCMallocVar(const String& name, const String& lenName, bool isClient, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
String varName = isClient ? String::Format("*%s", name.string()) : name;
|
||||
String lenVarName = isClient ? String::Format("*%s", lenName.string()) : lenName;
|
||||
@@ -443,58 +453,62 @@ void ASTListType::EmitCMallocVar(const String& name, const String& lenName, bool
|
||||
sb.Append(prefix).AppendFormat("%s = (%s*)OsalMemCalloc(sizeof(%s) * (%s));\n", varName.string(),
|
||||
elementType_->EmitCType().string(), elementType_->EmitCType().string(), lenVarName.string());
|
||||
sb.Append(prefix).AppendFormat("if (%s == NULL) {\n", varName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("ec = HDF_ERR_MALLOC_FAIL;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("HDF_LOGE(\"%%{public}s: malloc %s failed\", __func__);\n",
|
||||
varName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_MALLOC_FAIL;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).AppendFormat("}\n");
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTListType::EmitCProxyReadStrElement(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
void ASTListType::EmitCProxyReadStrElement(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
String cpName = String::Format("%sCp", name.string());
|
||||
elementType_->EmitCProxyReadVar(parcelName, cpName, true, gotoLabel, sb, prefix + g_tab);
|
||||
elementType_->EmitCProxyReadVar(parcelName, cpName, true, ecName, gotoLabel, sb, prefix + g_tab);
|
||||
sb.Append("\n");
|
||||
if (Options::GetInstance().DoGenerateKernelCode()) {
|
||||
sb.Append(prefix + g_tab).AppendFormat("(*%s)[i] = (char*)OsalMemCalloc(strlen(%s) + 1);\n",
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s[i] = (char*)OsalMemCalloc(strlen(%s) + 1);\n",
|
||||
name.string(), cpName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("if ((*%s)[i] == NULL) {\n", name.string());
|
||||
sb.Append(prefix + g_tab + g_tab).Append("ec = HDF_ERR_MALLOC_FAIL;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("if (%s[i] == NULL) {\n", name.string());
|
||||
sb.Append(prefix + g_tab + g_tab).AppendFormat("%s = HDF_ERR_MALLOC_FAIL;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("HDF_LOGE(\"%%{public}s: malloc %s[i] failed\", __func__);\n",
|
||||
name.string());
|
||||
sb.Append(prefix + g_tab + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix + g_tab).Append("}\n\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("if (strcpy_s((*%s)[i], (strlen(%s) + 1), %s) != HDF_SUCCESS) {\n",
|
||||
sb.Append(prefix + g_tab).AppendFormat("if (strcpy_s(%s[i], (strlen(%s) + 1), %s) != HDF_SUCCESS) {\n",
|
||||
name.string(), cpName.string(), cpName.string());
|
||||
sb.Append(prefix + g_tab + g_tab).AppendFormat("HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n",
|
||||
cpName.string());
|
||||
sb.Append(prefix + g_tab + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix + g_tab).Append("}\n");
|
||||
} else {
|
||||
sb.Append(prefix + g_tab).AppendFormat("(*%s)[i] = strdup(%sCp);\n",
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s[i] = strdup(%sCp);\n",
|
||||
name.string(), name.string());
|
||||
}
|
||||
}
|
||||
|
||||
void ASTListType::EmitCStubReadStrElement(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
void ASTListType::EmitCStubReadStrElement(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
String element = String::Format("%sCp", name.string());
|
||||
String newPrefix = prefix + g_tab + g_tab;
|
||||
elementType_->EmitCStubReadVar(parcelName, element, sb, newPrefix);
|
||||
elementType_->EmitCStubReadVar(parcelName, element, ecName, gotoLabel, sb, newPrefix);
|
||||
sb.Append("\n");
|
||||
if (Options::GetInstance().DoGenerateKernelCode()) {
|
||||
sb.Append(newPrefix).AppendFormat("%s[i] = (char*)OsalMemCalloc(strlen(%s) + 1);\n",
|
||||
name.string(), element.string());
|
||||
sb.Append(newPrefix).AppendFormat("if (%s[i] == NULL) {\n", name.string());
|
||||
sb.Append(newPrefix + g_tab).Append("ec = HDF_ERR_MALLOC_FAIL;\n");
|
||||
sb.Append(newPrefix + g_tab).AppendFormat("goto errors;\n");
|
||||
sb.Append(newPrefix + g_tab).AppendFormat("%s = HDF_ERR_MALLOC_FAIL;\n", ecName.string());
|
||||
sb.Append(newPrefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(newPrefix).Append("}\n\n");
|
||||
|
||||
sb.Append(newPrefix).AppendFormat("if (strcpy_s((%s)[i], (strlen(%s) + 1), %s) != HDF_SUCCESS) {\n",
|
||||
sb.Append(newPrefix).AppendFormat("if (strcpy_s(%s[i], (strlen(%s) + 1), %s) != HDF_SUCCESS) {\n",
|
||||
name.string(), element.string(), element.string());
|
||||
sb.Append(newPrefix + g_tab).AppendFormat("HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n",
|
||||
element.string());
|
||||
sb.Append(newPrefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(newPrefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(newPrefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(newPrefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(newPrefix).Append("}\n");
|
||||
} else {
|
||||
sb.Append(newPrefix).AppendFormat("%s[i] = strdup(%sCp);\n", name.string(), name.string());
|
||||
|
||||
@@ -38,14 +38,20 @@ public:
|
||||
|
||||
String EmitJavaType(TypeMode mode, bool isInnerType = false) const override;
|
||||
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const override;
|
||||
void EmitCProxyWriteOutVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadOutVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel = 0) const override;
|
||||
@@ -55,7 +61,7 @@ public:
|
||||
|
||||
void EmitCMarshalling(const String& name, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
void EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const override;
|
||||
|
||||
void EmitCppMarshalling(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
@@ -76,17 +82,17 @@ public:
|
||||
void EmitJavaReadInnerVar(const String& parcelName, const String& name, bool isInner, StringBuilder& sb,
|
||||
const String& prefix) const override;
|
||||
private:
|
||||
void EmitCMallocVar(const String& name, const String& lenName, bool isClient, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const;
|
||||
void EmitCMallocVar(const String& name, const String& lenName, bool isClient, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const;
|
||||
|
||||
void EmitCProxyReadStrElement(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const;
|
||||
void EmitCProxyReadStrElement(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const;
|
||||
|
||||
void EmitCStubReadStrElement(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const;
|
||||
void EmitCStubReadStrElement(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const;
|
||||
|
||||
void EmitCStringElementUnMarshalling(const String& name, StringBuilder& sb, const String& newPrefix,
|
||||
std::vector<String>& freeObjStatements) const;
|
||||
void EmitCStringElementUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& newPrefix, std::vector<String>& freeObjStatements) const;
|
||||
|
||||
AutoPtr<ASTType> elementType_ = nullptr;
|
||||
};
|
||||
|
||||
@@ -62,40 +62,40 @@ String ASTLongType::EmitJavaType(TypeMode mode, bool isInnerType) const
|
||||
return isInnerType ? "Long" : "long";
|
||||
}
|
||||
|
||||
void ASTLongType::EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
void ASTLongType::EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufWriteInt64(%s, %s)) {\n",
|
||||
parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: write %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTLongType::EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
const String& ecName, const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadInt64(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTLongType::EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadInt64(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTLongType::EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadInt64(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTLongType::EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel) const
|
||||
{
|
||||
@@ -126,14 +126,14 @@ void ASTLongType::EmitCMarshalling(const String& name, StringBuilder& sb, const
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTLongType::EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const
|
||||
void ASTLongType::EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& prefix, std::vector<String>& freeObjStatements) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadInt64(data, &%s)) {\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
EmitFreeStatements(freeObjStatements, sb, prefix + g_tab);
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
|
||||
@@ -27,14 +27,14 @@ public:
|
||||
|
||||
String EmitJavaType(TypeMode mode, bool isInnerType = false) const override;
|
||||
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const override;
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel = 0) const override;
|
||||
@@ -44,7 +44,7 @@ public:
|
||||
|
||||
void EmitCMarshalling(const String& name, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
void EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const override;
|
||||
|
||||
void EmitCppMarshalling(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
|
||||
@@ -36,7 +36,6 @@ String ASTParameter::Dump(const String& prefix)
|
||||
String ASTParameter::EmitCParameter()
|
||||
{
|
||||
StringBuilder sb;
|
||||
|
||||
switch (type_->GetTypeKind()) {
|
||||
case TypeKind::TYPE_BOOLEAN:
|
||||
case TypeKind::TYPE_BYTE:
|
||||
@@ -51,16 +50,21 @@ String ASTParameter::EmitCParameter()
|
||||
case TypeKind::TYPE_DOUBLE:
|
||||
case TypeKind::TYPE_ENUM:
|
||||
case TypeKind::TYPE_FILEDESCRIPTOR:
|
||||
case TypeKind::TYPE_STRING:
|
||||
case TypeKind::TYPE_INTERFACE:
|
||||
case TypeKind::TYPE_STRING:
|
||||
case TypeKind::TYPE_STRUCT:
|
||||
case TypeKind::TYPE_UNION:
|
||||
case TypeKind::TYPE_VOID: {
|
||||
StringBuilder paramStr;
|
||||
if (attribute_ == ParamAttr::PARAM_IN) {
|
||||
return String::Format("%s %s", type_->EmitCType(TypeMode::PARAM_IN).string(), name_.string());
|
||||
paramStr.AppendFormat("%s %s", type_->EmitCType(TypeMode::PARAM_IN).string(), name_.string());
|
||||
} else {
|
||||
return String::Format("%s %s", type_->EmitCType(TypeMode::PARAM_OUT).string(), name_.string());
|
||||
paramStr.AppendFormat("%s %s", type_->EmitCType(TypeMode::PARAM_OUT).string(), name_.string());
|
||||
}
|
||||
if (type_->GetTypeKind() == TypeKind::TYPE_STRING && attribute_ == ParamAttr::PARAM_OUT) {
|
||||
paramStr.AppendFormat(", uint32_t %sLen", name_.string());
|
||||
}
|
||||
return paramStr.ToString();
|
||||
}
|
||||
case TypeKind::TYPE_ARRAY:
|
||||
case TypeKind::TYPE_LIST: {
|
||||
@@ -70,19 +74,13 @@ String ASTParameter::EmitCParameter()
|
||||
} else {
|
||||
paramStr.AppendFormat("%s %s", type_->EmitCType(TypeMode::PARAM_OUT).string(), name_.string());
|
||||
}
|
||||
|
||||
if (attribute_ == ParamAttr::PARAM_IN) {
|
||||
paramStr.AppendFormat(", uint32_t %sLen", name_.string());
|
||||
} else {
|
||||
paramStr.AppendFormat(", uint32_t* %sLen", name_.string());
|
||||
}
|
||||
|
||||
paramStr.AppendFormat(", uint32_t%s %sLen", (attribute_ == ParamAttr::PARAM_IN) ? "" : "*",
|
||||
name_.string());
|
||||
return paramStr.ToString();
|
||||
}
|
||||
default:
|
||||
return String::Format("unknow type %s", name_.string());
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
@@ -206,14 +204,45 @@ String ASTParameter::EmitJavaLocalVar()
|
||||
return "";
|
||||
}
|
||||
|
||||
void ASTParameter::EmitCWriteVar(const String& parcelName, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
void ASTParameter::EmitCWriteVar(const String& parcelName, const String& ecName, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
if (type_ == nullptr) {
|
||||
return;
|
||||
}
|
||||
|
||||
type_->EmitCWriteVar(parcelName, name_, gotoLabel, sb, prefix);
|
||||
type_->EmitCWriteVar(parcelName, name_, ecName, gotoLabel, sb, prefix);
|
||||
}
|
||||
|
||||
bool ASTParameter::EmitCProxyWriteOutVar(const String& parcelName, const String& ecName, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
if (type_ == nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (type_->IsStringType() || type_->IsArrayType() || type_->IsListType()) {
|
||||
type_->EmitCProxyWriteOutVar(parcelName, name_, ecName, gotoLabel, sb, prefix);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ASTParameter::EmitCStubReadOutVar(const String& parcelName, const String& ecName, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
if (type_ == nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (type_->IsStringType() || type_->IsArrayType() || type_->IsListType()
|
||||
|| type_->IsStructType() || type_->IsUnionType()) {
|
||||
type_->EmitCStubReadOutVar(parcelName, name_, ecName, gotoLabel, sb, prefix);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void ASTParameter::EmitJavaWriteVar(const String& parcelName, StringBuilder& sb, const String& prefix) const
|
||||
|
||||
@@ -72,9 +72,15 @@ public:
|
||||
|
||||
String EmitJavaLocalVar();
|
||||
|
||||
void EmitCWriteVar(const String& parcelName, const String& gotoLabel, StringBuilder& sb,
|
||||
void EmitCWriteVar(const String& parcelName, const String& ecName, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& prefix) const;
|
||||
|
||||
bool EmitCProxyWriteOutVar(const String& parcelName, const String& ecName, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const;
|
||||
|
||||
bool EmitCStubReadOutVar(const String& parcelName, const String& ecName, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const;
|
||||
|
||||
void EmitJavaWriteVar(const String& parcelName, StringBuilder& sb, const String& prefix) const;
|
||||
|
||||
void EmitJavaReadVar(const String& parcelName, StringBuilder& sb, const String& prefix) const;
|
||||
|
||||
@@ -62,40 +62,40 @@ String ASTShortType::EmitJavaType(TypeMode mode, bool isInnerType) const
|
||||
return isInnerType ? "Short" : "short";
|
||||
}
|
||||
|
||||
void ASTShortType::EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
void ASTShortType::EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufWriteInt16(%s, %s)) {\n",
|
||||
parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: write %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTShortType::EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
const String& ecName, const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadInt16(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTShortType::EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadInt16(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTShortType::EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadInt16(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTShortType::EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel) const
|
||||
{
|
||||
@@ -127,14 +127,14 @@ void ASTShortType::EmitCMarshalling(const String& name, StringBuilder& sb, const
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTShortType::EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const
|
||||
void ASTShortType::EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& prefix, std::vector<String>& freeObjStatements) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadInt16(data, &%s)) {\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
EmitFreeStatements(freeObjStatements, sb, prefix + g_tab);
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
|
||||
@@ -27,14 +27,14 @@ public:
|
||||
|
||||
String EmitJavaType(TypeMode mode, bool isInnerType = false) const override;
|
||||
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const override;
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel = 0) const override;
|
||||
@@ -44,7 +44,7 @@ public:
|
||||
|
||||
void EmitCMarshalling(const String& name, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
void EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const override;
|
||||
|
||||
void EmitCppMarshalling(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
|
||||
@@ -33,7 +33,7 @@ String ASTStringType::EmitCType(TypeMode mode) const
|
||||
case TypeMode::PARAM_IN:
|
||||
return "const char*";
|
||||
case TypeMode::PARAM_OUT:
|
||||
return "char**";
|
||||
return "char*";
|
||||
case TypeMode::LOCAL_VAR:
|
||||
return "char*";
|
||||
default:
|
||||
@@ -62,19 +62,45 @@ String ASTStringType::EmitJavaType(TypeMode mode, bool isInnerType) const
|
||||
return "String";
|
||||
}
|
||||
|
||||
void ASTStringType::EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
void ASTStringType::EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufWriteString(%s, %s)) {\n",
|
||||
parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: write %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTStringType::EmitCProxyWriteOutVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
String lenName = String::Format("%sLen", name.string());
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufWriteUint32(%s, %s)) {\n",
|
||||
parcelName.string(), lenName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: write %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTStringType::EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
const String& ecName, const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("const char *%s = HdfSbufReadString(%s);\n",
|
||||
name.string(), parcelName.string());
|
||||
sb.Append(prefix).AppendFormat("if (%s == NULL) {\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTStringType::EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("const char *%s = HdfSbufReadString(%s);\n",
|
||||
@@ -82,21 +108,32 @@ void ASTStringType::EmitCProxyReadVar(const String& parcelName, const String& na
|
||||
sb.Append(prefix).AppendFormat("if (%s == NULL) {\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTStringType::EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
void ASTStringType::EmitCStubReadOutVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("const char *%s = HdfSbufReadString(%s);\n",
|
||||
name.string(), parcelName.string());
|
||||
sb.Append(prefix).AppendFormat("if (%s == NULL) {\n", name.string());
|
||||
String lenName = String::Format("%sLen", name.string());
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint32(%s, &%s)) {\n",
|
||||
parcelName.string(), lenName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
"HDF_LOGE(\"%%{public}s: read %s size failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n\n");
|
||||
|
||||
sb.Append(prefix).AppendFormat("if (%s > 0) {\n", lenName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = (%s)OsalMemCalloc(%s);\n", name.string(), EmitCType().string(),
|
||||
lenName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("if (%s == NULL) {\n", name.string());
|
||||
sb.Append(prefix + g_tab + g_tab).AppendFormat("HDF_LOGE(\"%%{public}s: malloc %s failed\", __func__);\n",
|
||||
name.string());
|
||||
sb.Append(prefix + g_tab + g_tab).AppendFormat("%s = HDF_ERR_MALLOC_FAIL;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix + g_tab).Append("}\n");
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
@@ -130,15 +167,15 @@ void ASTStringType::EmitCMarshalling(const String& name, StringBuilder& sb, cons
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTStringType::EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const
|
||||
void ASTStringType::EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& prefix, std::vector<String>& freeObjStatements) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("const char *%s = HdfSbufReadString(data);\n", name.string());
|
||||
sb.Append(prefix).AppendFormat("if (%s == NULL) {\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
EmitFreeStatements(freeObjStatements, sb, prefix + g_tab);
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
@@ -167,10 +204,9 @@ void ASTStringType::EmitCppUnMarshalling(const String& parcelName, const String&
|
||||
void ASTStringType::EmitMemoryRecycle(const String& name, bool isClient, bool ownership, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
{
|
||||
String varName = isClient ? String::Format("*%s", name.string()) : name;
|
||||
sb.Append(prefix).AppendFormat("if (%s != NULL) {\n", varName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("OsalMemFree(%s);\n", varName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = NULL;\n", varName.string());
|
||||
sb.Append(prefix).AppendFormat("if (%s != NULL) {\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("OsalMemFree(%s);\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = NULL;\n", name.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
|
||||
@@ -27,14 +27,20 @@ public:
|
||||
|
||||
String EmitJavaType(TypeMode mode, bool isInnerType = false) const override;
|
||||
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const override;
|
||||
void EmitCProxyWriteOutVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadOutVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel = 0) const override;
|
||||
@@ -44,7 +50,7 @@ public:
|
||||
|
||||
void EmitCMarshalling(const String& name, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
void EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const override;
|
||||
|
||||
void EmitCppMarshalling(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
|
||||
@@ -77,7 +77,7 @@ String ASTStructType::EmitCType(TypeMode mode) const
|
||||
case TypeMode::PARAM_IN:
|
||||
return String::Format("const struct %s*", name_.string());
|
||||
case TypeMode::PARAM_OUT:
|
||||
return String::Format("struct %s**", name_.string());
|
||||
return String::Format("struct %s*", name_.string());
|
||||
case TypeMode::LOCAL_VAR:
|
||||
return String::Format("struct %s*", name_.string());
|
||||
default:
|
||||
@@ -147,40 +147,53 @@ String ASTStructType::EmitJavaTypeDecl() const
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
void ASTStructType::EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
void ASTStructType::EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!%sBlockMarshalling(%s, %s)) {\n",
|
||||
name_.string(), parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: write %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTStructType::EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
const String& ecName, const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!%sBlockUnmarshalling(%s, %s)) {\n",
|
||||
name_.string(), parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTStructType::EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!%sBlockUnmarshalling(%s, %s)) {\n",
|
||||
name_.string(), parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
sb.Append(prefix).AppendFormat("}\n");
|
||||
}
|
||||
|
||||
void ASTStructType::EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
void ASTStructType::EmitCStubReadOutVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!%sBlockUnmarshalling(%s, %s)) {\n",
|
||||
name_.string(), parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix).AppendFormat("}\n");
|
||||
sb.Append(prefix).AppendFormat("%s = (%s*)OsalMemCalloc(sizeof(%s));\n", name.string(),
|
||||
EmitCType(TypeMode::NO_MODE).string(), EmitCType(TypeMode::NO_MODE).string());
|
||||
sb.Append(prefix).AppendFormat("if (%s == NULL) {\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("HDF_LOGE(\"%%{public}s: malloc %s failed\", __func__);\n",
|
||||
name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_MALLOC_FAIL;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTStructType::EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
@@ -217,14 +230,14 @@ void ASTStructType::EmitCMarshalling(const String& name, StringBuilder& sb, cons
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTStructType::EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const
|
||||
void ASTStructType::EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& prefix, std::vector<String>& freeObjStatements) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!%sBlockUnmarshalling(data, %s)) {\n",
|
||||
name_.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
@@ -253,7 +266,7 @@ void ASTStructType::EmitCppUnMarshalling(const String& parcelName, const String&
|
||||
void ASTStructType::EmitMemoryRecycle(const String& name, bool isClient, bool ownership, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
{
|
||||
String varName = isClient ? String::Format("*%s", name.string()) : name;
|
||||
String varName = name;
|
||||
if (ownership) {
|
||||
sb.Append(prefix).AppendFormat("if (%s != NULL) {\n", varName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%sFree(%s, true);\n", name_.string(), varName.string());
|
||||
|
||||
@@ -92,14 +92,17 @@ public:
|
||||
|
||||
String EmitJavaTypeDecl() const;
|
||||
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const override;
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadOutVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel = 0) const override;
|
||||
@@ -109,7 +112,7 @@ public:
|
||||
|
||||
void EmitCMarshalling(const String& name, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
void EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const override;
|
||||
|
||||
void EmitCppMarshalling(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
|
||||
@@ -177,20 +177,32 @@ String ASTType::EmitJavaType(TypeMode mode, bool isInnerType) const
|
||||
return "unknow";
|
||||
}
|
||||
|
||||
void ASTType::EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
void ASTType::EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("//Writeing \"%s\" type of data is not supported\n", name_.string());
|
||||
sb.Append(prefix).AppendFormat("//Writing \"%s\" type of data is not supported\n", name_.string());
|
||||
}
|
||||
|
||||
void ASTType::EmitCProxyWriteOutVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("//Writing \"%s\" type of data is not supported\n", name_.string());
|
||||
}
|
||||
|
||||
void ASTType::EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
const String& ecName, const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("//Reading \"%s\" type of data is not supported\n", name_.string());
|
||||
}
|
||||
|
||||
void ASTType::EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("//Reading \"%s\" type of data is not supported\n", name_.string());
|
||||
}
|
||||
|
||||
void ASTType::EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
void ASTType::EmitCStubReadOutVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("//Reading \"%s\" type of data is not supported\n", name_.string());
|
||||
}
|
||||
@@ -212,8 +224,8 @@ void ASTType::EmitCMarshalling(const String& name, StringBuilder& sb, const Stri
|
||||
sb.Append(prefix).AppendFormat("//Writing \"%s\" type of data is not supported\n", name_.string());
|
||||
}
|
||||
|
||||
void ASTType::EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const
|
||||
void ASTType::EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& prefix, std::vector<String>& freeObjStatements) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("//Reading \"%s\" type of data is not supported\n", name_.string());
|
||||
}
|
||||
|
||||
@@ -126,14 +126,20 @@ public:
|
||||
|
||||
virtual String EmitJavaType(TypeMode mode, bool isInnerType = false) const;
|
||||
|
||||
virtual void EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const;
|
||||
|
||||
virtual void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
virtual void EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const;
|
||||
|
||||
virtual void EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const;
|
||||
virtual void EmitCProxyWriteOutVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const;
|
||||
|
||||
virtual void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
const String& ecName, const String& gotoLabel, StringBuilder& sb, const String& prefix) const;
|
||||
|
||||
virtual void EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const;
|
||||
|
||||
virtual void EmitCStubReadOutVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const;
|
||||
|
||||
virtual void EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel = 0) const;
|
||||
@@ -143,8 +149,8 @@ public:
|
||||
|
||||
virtual void EmitCMarshalling(const String& name, StringBuilder& sb, const String& prefix) const;
|
||||
|
||||
virtual void EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const;
|
||||
virtual void EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& prefix, std::vector<String>& freeObjStatements) const;
|
||||
|
||||
void EmitFreeStatements(const std::vector<String>& freeObjStatements, StringBuilder& sb,
|
||||
const String& prefix) const;
|
||||
|
||||
@@ -63,40 +63,40 @@ String ASTUcharType::EmitJavaType(TypeMode mode, bool isInnerType) const
|
||||
return "/";
|
||||
}
|
||||
|
||||
void ASTUcharType::EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
void ASTUcharType::EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufWriteUint8(%s, %s)) {\n",
|
||||
parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: write %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTUcharType::EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
const String& ecName, const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint8(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTUcharType::EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint8(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTUcharType::EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint8(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTUcharType::EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel) const
|
||||
{
|
||||
@@ -127,14 +127,14 @@ void ASTUcharType::EmitCMarshalling(const String& name, StringBuilder& sb, const
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTUcharType::EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const
|
||||
void ASTUcharType::EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& prefix, std::vector<String>& freeObjStatements) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint8(data, &%s)) {\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
EmitFreeStatements(freeObjStatements, sb, prefix + g_tab);
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
|
||||
@@ -27,14 +27,14 @@ public:
|
||||
|
||||
String EmitJavaType(TypeMode mode, bool isInnerType = false) const override;
|
||||
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const override;
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel = 0) const override;
|
||||
@@ -44,7 +44,7 @@ public:
|
||||
|
||||
void EmitCMarshalling(const String& name, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
void EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const override;
|
||||
|
||||
void EmitCppMarshalling(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
|
||||
@@ -63,40 +63,40 @@ String ASTUintType::EmitJavaType(TypeMode mode, bool isInnerType) const
|
||||
return "/";
|
||||
}
|
||||
|
||||
void ASTUintType::EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
void ASTUintType::EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufWriteUint32(%s, %s)) {\n",
|
||||
parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: write %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTUintType::EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
const String& ecName, const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint32(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTUintType::EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint32(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTUintType::EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint32(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTUintType::EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel) const
|
||||
{
|
||||
@@ -127,14 +127,14 @@ void ASTUintType::EmitCMarshalling(const String& name, StringBuilder& sb, const
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTUintType::EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const
|
||||
void ASTUintType::EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& prefix, std::vector<String>& freeObjStatements) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint32(data, &%s)) {\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
EmitFreeStatements(freeObjStatements, sb, prefix + g_tab);
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
|
||||
@@ -27,14 +27,14 @@ public:
|
||||
|
||||
String EmitJavaType(TypeMode mode, bool isInnerType = false) const override;
|
||||
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const override;
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel = 0) const override;
|
||||
@@ -44,7 +44,7 @@ public:
|
||||
|
||||
void EmitCMarshalling(const String& name, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
void EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const override;
|
||||
|
||||
void EmitCppMarshalling(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
|
||||
@@ -63,40 +63,40 @@ String ASTUlongType::EmitJavaType(TypeMode mode, bool isInnerType) const
|
||||
return "/";
|
||||
}
|
||||
|
||||
void ASTUlongType::EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
void ASTUlongType::EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufWriteUint64(%s, %s)) {\n",
|
||||
parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: write %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTUlongType::EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
const String& ecName, const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint64(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTUlongType::EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint64(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTUlongType::EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint64(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTUlongType::EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel) const
|
||||
{
|
||||
@@ -127,14 +127,14 @@ void ASTUlongType::EmitCMarshalling(const String& name, StringBuilder& sb, const
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTUlongType::EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const
|
||||
void ASTUlongType::EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& prefix, std::vector<String>& freeObjStatements) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint64(data, &%s)) {\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
EmitFreeStatements(freeObjStatements, sb, prefix + g_tab);
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
|
||||
@@ -27,14 +27,14 @@ public:
|
||||
|
||||
String EmitJavaType(TypeMode mode, bool isInnerType = false) const override;
|
||||
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const override;
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel = 0) const override;
|
||||
@@ -44,7 +44,7 @@ public:
|
||||
|
||||
void EmitCMarshalling(const String& name, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
void EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const override;
|
||||
|
||||
void EmitCppMarshalling(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
|
||||
@@ -78,7 +78,7 @@ String ASTUnionType::EmitCType(TypeMode mode) const
|
||||
case TypeMode::PARAM_IN:
|
||||
return String::Format("const union %s*", name_.string());
|
||||
case TypeMode::PARAM_OUT:
|
||||
return String::Format("union %s**", name_.string());
|
||||
return String::Format("union %s*", name_.string());
|
||||
case TypeMode::LOCAL_VAR:
|
||||
return String::Format("union %s*", name_.string());
|
||||
default:
|
||||
@@ -148,8 +148,8 @@ String ASTUnionType::EmitJavaTypeDecl() const
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
void ASTUnionType::EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
void ASTUnionType::EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
if (Options::GetInstance().DoGenerateKernelCode()) {
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufWriteBuffer(%s, (const void *)%s, sizeof(%s))) {\n",
|
||||
@@ -160,13 +160,13 @@ void ASTUnionType::EmitCWriteVar(const String& parcelName, const String& name, c
|
||||
}
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: write %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTUnionType::EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
const String& ecName, const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
if (Options::GetInstance().DoGenerateKernelCode()) {
|
||||
sb.Append(prefix).AppendFormat("%s *%s = NULL;\n", EmitCType().string(), name.string());
|
||||
@@ -175,7 +175,7 @@ void ASTUnionType::EmitCProxyReadVar(const String& parcelName, const String& nam
|
||||
parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n\n");
|
||||
sb.Append(prefix).AppendFormat("if (%s == NULL || sizeof(%s) != len) {\n",
|
||||
@@ -188,13 +188,13 @@ void ASTUnionType::EmitCProxyReadVar(const String& parcelName, const String& nam
|
||||
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTUnionType::EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
void ASTUnionType::EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
if (Options::GetInstance().DoGenerateKernelCode()) {
|
||||
sb.Append(prefix).AppendFormat("%s *%s = NULL;\n", EmitCType().string(), name.string());
|
||||
@@ -203,8 +203,8 @@ void ASTUnionType::EmitCStubReadVar(const String& parcelName, const String& name
|
||||
parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n\n");
|
||||
sb.Append(prefix).AppendFormat("if (%s == NULL || sizeof(%s) != len) {\n",
|
||||
name.string(), EmitCType().string());
|
||||
@@ -216,8 +216,21 @@ void ASTUnionType::EmitCStubReadVar(const String& parcelName, const String& name
|
||||
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTUnionType::EmitCStubReadOutVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("%s = (%s*)OsalMemCalloc(sizeof(%s));\n", name.string(),
|
||||
EmitCType(TypeMode::NO_MODE).string(), EmitCType(TypeMode::NO_MODE).string());
|
||||
sb.Append(prefix).AppendFormat("if (%s == NULL) {\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("HDF_LOGE(\"%%{public}s: malloc %s failed\", __func__);\n",
|
||||
name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_MALLOC_FAIL;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
@@ -265,8 +278,8 @@ void ASTUnionType::EmitCMarshalling(const String& name, StringBuilder& sb, const
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTUnionType::EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const
|
||||
void ASTUnionType::EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& prefix, std::vector<String>& freeObjStatements) const
|
||||
{
|
||||
if (Options::GetInstance().DoGenerateKernelCode()) {
|
||||
sb.Append(prefix).AppendFormat("%s *%s = NULL;\n", EmitCType().string(), name.string());
|
||||
@@ -274,7 +287,7 @@ void ASTUnionType::EmitCUnMarshalling(const String& name, StringBuilder& sb, con
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadBuffer(data, (const void **)&%s, &len)) {\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n\n");
|
||||
sb.Append(prefix).AppendFormat("if (%s == NULL || sizeof(%s) != len) {\n",
|
||||
name.string(), EmitCType().string());
|
||||
@@ -286,7 +299,7 @@ void ASTUnionType::EmitCUnMarshalling(const String& name, StringBuilder& sb, con
|
||||
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
|
||||
@@ -92,14 +92,17 @@ public:
|
||||
|
||||
String EmitJavaTypeDecl() const;
|
||||
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const override;
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadOutVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel = 0) const override;
|
||||
@@ -109,7 +112,7 @@ public:
|
||||
|
||||
void EmitCMarshalling(const String& name, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
void EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const override;
|
||||
|
||||
void EmitCppMarshalling(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
|
||||
@@ -63,40 +63,40 @@ String ASTUshortType::EmitJavaType(TypeMode mode, bool isInnerType) const
|
||||
return "/";
|
||||
}
|
||||
|
||||
void ASTUshortType::EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const
|
||||
void ASTUshortType::EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufWriteUint16(%s, %s)) {\n",
|
||||
parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: write %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTUshortType::EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
const String& ecName, const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint16(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTUshortType::EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint16(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", ecName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTUshortType::EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint16(%s, %s)) {\n", parcelName.string(), name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTUshortType::EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel) const
|
||||
{
|
||||
@@ -127,14 +127,14 @@ void ASTUshortType::EmitCMarshalling(const String& name, StringBuilder& sb, cons
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void ASTUshortType::EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const
|
||||
void ASTUshortType::EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& prefix, std::vector<String>& freeObjStatements) const
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (!HdfSbufReadUint16(data, &%s)) {\n", name.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n", name.string());
|
||||
EmitFreeStatements(freeObjStatements, sb, prefix + g_tab);
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
|
||||
@@ -27,14 +27,14 @@ public:
|
||||
|
||||
String EmitJavaType(TypeMode mode, bool isInnerType = false) const override;
|
||||
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& gotoLabel,
|
||||
StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType,
|
||||
void EmitCWriteVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix) const override;
|
||||
void EmitCProxyReadVar(const String& parcelName, const String& name, bool isInnerType, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCStubReadVar(const String& parcelName, const String& name, const String& ecName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCppWriteVar(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
const String& prefix, unsigned int innerLevel = 0) const override;
|
||||
@@ -44,7 +44,7 @@ public:
|
||||
|
||||
void EmitCMarshalling(const String& name, StringBuilder& sb, const String& prefix) const override;
|
||||
|
||||
void EmitCUnMarshalling(const String& name, StringBuilder& sb, const String& prefix,
|
||||
void EmitCUnMarshalling(const String& name, const String& gotoLabel, StringBuilder& sb, const String& prefix,
|
||||
std::vector<String>& freeObjStatements) const override;
|
||||
|
||||
void EmitCppMarshalling(const String& parcelName, const String& name, StringBuilder& sb,
|
||||
|
||||
@@ -225,67 +225,44 @@ void CClientProxyCodeEmitter::EmitProxyMethodImpl(const AutoPtr<ASTMethod>& meth
|
||||
void CClientProxyCodeEmitter::EmitProxyMethodBody(const AutoPtr<ASTMethod>& method, StringBuilder& sb,
|
||||
const String& prefix)
|
||||
{
|
||||
String dataName = "data_";
|
||||
String replyName = "reply_";
|
||||
sb.Append(prefix).Append("{\n");
|
||||
sb.Append(prefix + g_tab).Append("int32_t ec = HDF_FAILURE;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("int32_t %s = HDF_FAILURE;\n", errorCodeName_.string());
|
||||
|
||||
// Local variable definitions must precede all execution statements.
|
||||
if (isKernelCode_) {
|
||||
for (size_t i = 0; i < method->GetParameterNumber(); i++) {
|
||||
AutoPtr<ASTParameter> param = method->GetParameter(i);
|
||||
AutoPtr<ASTType> type = param->GetType();
|
||||
if (type->GetTypeKind() == TypeKind::TYPE_ARRAY ||
|
||||
type->GetTypeKind() == TypeKind::TYPE_LIST) {
|
||||
sb.Append(prefix + g_tab).Append("uint32_t i = 0;\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
EmitInitLoopVar(method, sb, prefix + g_tab);
|
||||
|
||||
sb.Append("\n");
|
||||
EmitCreateBuf(dataName, replyName, sb, prefix + g_tab);
|
||||
EmitCreateBuf(dataParcelName_, replyParcelName_, sb, prefix + g_tab);
|
||||
sb.Append("\n");
|
||||
|
||||
String gotoName = GetGotLabel(method);
|
||||
for (size_t i = 0; i < method->GetParameterNumber(); i++) {
|
||||
AutoPtr<ASTParameter> param = method->GetParameter(i);
|
||||
if (param->GetAttribute() == ParamAttr::PARAM_IN) {
|
||||
param->EmitCWriteVar(dataName, gotoName, sb, prefix + g_tab);
|
||||
param->EmitCWriteVar(dataParcelName_, errorCodeName_, finishedLabelName_, sb, prefix + g_tab);
|
||||
sb.Append("\n");
|
||||
} else if (param->EmitCProxyWriteOutVar(dataParcelName_, errorCodeName_, finishedLabelName_, sb,
|
||||
prefix + g_tab)) {
|
||||
sb.Append("\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (!isKernelCode_) {
|
||||
sb.Append(prefix + g_tab).AppendFormat("ec = %sCall(self, %s, %s, %s, %s);\n", proxyName_.string(),
|
||||
EmitMethodCmdID(method).string(), dataName.string(), replyName.string(),
|
||||
method->IsOneWay() ? "true" : "false");
|
||||
} else {
|
||||
sb.Append(prefix + g_tab).AppendFormat("ec = %sCall(self, %s, %s, %s);\n", proxyName_.string(),
|
||||
EmitMethodCmdID(method).string(), dataName.string(), replyName.string());
|
||||
}
|
||||
sb.Append(prefix + g_tab).Append("if (ec != HDF_SUCCESS) {\n");
|
||||
sb.Append(prefix + g_tab + g_tab).Append(
|
||||
"HDF_LOGE(\"%{public}s: call failed! error code is %{public}d\", __func__, ec);\n");
|
||||
sb.Append(prefix + g_tab + g_tab).AppendFormat("goto %s;\n", gotoName.string());
|
||||
sb.Append(prefix + g_tab).Append("}\n");
|
||||
EmitStubCallMethod(method, sb, prefix + g_tab);
|
||||
sb.Append("\n");
|
||||
|
||||
if (!method->IsOneWay()) {
|
||||
for (size_t i = 0; i < method->GetParameterNumber(); i++) {
|
||||
AutoPtr<ASTParameter> param = method->GetParameter(i);
|
||||
if (param->GetAttribute() == ParamAttr::PARAM_OUT) {
|
||||
EmitReadProxyMethodParameter(param, replyName, gotoName, sb, prefix + g_tab);
|
||||
EmitReadProxyMethodParameter(param, replyParcelName_, finishedLabelName_, sb, prefix + g_tab);
|
||||
sb.Append("\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EmitErrorHandle(method, "errors", true, sb, prefix);
|
||||
sb.Append(prefix).Append("finished:\n");
|
||||
EmitReleaseBuf(dataName, replyName, sb, prefix + g_tab);
|
||||
sb.Append(prefix).AppendFormat("%s:\n", finishedLabelName_);
|
||||
EmitReleaseBuf(dataParcelName_, replyParcelName_, sb, prefix + g_tab);
|
||||
|
||||
sb.Append(prefix + g_tab).Append("return ec;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("return %s;\n", errorCodeName_.string());
|
||||
sb.Append("}\n");
|
||||
}
|
||||
|
||||
@@ -293,18 +270,18 @@ void CClientProxyCodeEmitter::EmitCreateBuf(const String& dataBufName, const Str
|
||||
StringBuilder& sb, const String& prefix)
|
||||
{
|
||||
if (isKernelCode_) {
|
||||
sb.Append(prefix).AppendFormat("struct HdfSBuf *%s = HdfSBufObtainDefaultSize();\n", dataBufName.string());
|
||||
sb.Append(prefix).AppendFormat("struct HdfSBuf *%s = HdfSBufObtainDefaultSize();\n", replyBufName.string());
|
||||
sb.Append(prefix).AppendFormat("struct HdfSBuf *%s = HdfSbufObtainDefaultSize();\n", dataBufName.string());
|
||||
sb.Append(prefix).AppendFormat("struct HdfSBuf *%s = HdfSbufObtainDefaultSize();\n", replyBufName.string());
|
||||
} else {
|
||||
sb.Append(prefix).AppendFormat("struct HdfSBuf *%s = HdfSBufTypedObtain(SBUF_IPC);\n", dataBufName.string());
|
||||
sb.Append(prefix).AppendFormat("struct HdfSBuf *%s = HdfSBufTypedObtain(SBUF_IPC);\n", replyBufName.string());
|
||||
sb.Append(prefix).AppendFormat("struct HdfSBuf *%s = HdfSbufTypedObtain(SBUF_IPC);\n", dataBufName.string());
|
||||
sb.Append(prefix).AppendFormat("struct HdfSBuf *%s = HdfSbufTypedObtain(SBUF_IPC);\n", replyBufName.string());
|
||||
}
|
||||
|
||||
sb.Append("\n");
|
||||
sb.Append(prefix).AppendFormat("if (%s == NULL || %s == NULL) {\n", dataBufName.string(), replyBufName.string());
|
||||
sb.Append(prefix + g_tab).Append("HDF_LOGE(\"%{public}s: HdfSubf malloc failed!\", __func__);\n");
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_MALLOC_FAIL;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto finished;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_MALLOC_FAIL;\n", errorCodeName_.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", finishedLabelName_);
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
@@ -312,10 +289,10 @@ void CClientProxyCodeEmitter::EmitReleaseBuf(const String& dataBufName, const St
|
||||
const String& prefix)
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("if (%s != NULL) {\n", dataBufName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("HdfSBufRecycle(%s);\n", dataBufName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("HdfSbufRecycle(%s);\n", dataBufName.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
sb.Append(prefix).AppendFormat("if (%s != NULL) {\n", replyBufName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("HdfSBufRecycle(%s);\n", replyBufName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("HdfSbufRecycle(%s);\n", replyBufName.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
@@ -325,69 +302,43 @@ void CClientProxyCodeEmitter::EmitReadProxyMethodParameter(const AutoPtr<ASTPara
|
||||
AutoPtr<ASTType> type = param->GetType();
|
||||
if (type->GetTypeKind() == TypeKind::TYPE_STRING) {
|
||||
String cloneName = String::Format("%sCopy", param->GetName().string());
|
||||
type->EmitCProxyReadVar(parcelName, cloneName, false, gotoLabel, sb, prefix);
|
||||
String leftVar = String::Format("*%s", param->GetName().string());
|
||||
if (isKernelCode_) {
|
||||
sb.Append("\n");
|
||||
sb.Append(prefix).AppendFormat("%s = (char*)OsalMemCalloc(strlen(%s) + 1);\n",
|
||||
leftVar.string(), cloneName.string());
|
||||
sb.Append(prefix).AppendFormat("if (%s == NULL) {\n", leftVar.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_MALLOC_FAIL;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n\n");
|
||||
sb.Append(prefix).AppendFormat("if (strcpy_s(%s, (strlen(%s) + 1), %s) != HDF_SUCCESS) {\n",
|
||||
leftVar.string(), cloneName.string(), cloneName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n",
|
||||
leftVar.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
} else {
|
||||
sb.Append(prefix).AppendFormat("%s = strdup(%s);\n", leftVar.string(), cloneName.string());
|
||||
}
|
||||
} else if (type->GetTypeKind() == TypeKind::TYPE_STRUCT) {
|
||||
String name = String::Format("*%s", param->GetName().string());
|
||||
sb.Append(prefix).AppendFormat("%s = (%s*)OsalMemAlloc(sizeof(%s));\n",
|
||||
name.string(), type->EmitCType().string(), type->EmitCType().string());
|
||||
sb.Append(prefix).AppendFormat("if (%s == NULL) {\n", name.string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_MALLOC_FAIL;\n");
|
||||
type->EmitCProxyReadVar(parcelName, cloneName, false, errorCodeName_, gotoLabel, sb, prefix);
|
||||
sb.Append(prefix).AppendFormat("if (strcpy_s(%s, %sLen, %s) != EOK) {\n",
|
||||
param->GetName().string(), param->GetName().string(), cloneName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n",
|
||||
param->GetName().string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", errorCodeName_.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
type->EmitCProxyReadVar(parcelName, name, false, gotoLabel, sb, prefix);
|
||||
} else if (type->GetTypeKind() == TypeKind::TYPE_STRUCT) {
|
||||
type->EmitCProxyReadVar(parcelName, param->GetName().string(), false, errorCodeName_, gotoLabel, sb, prefix);
|
||||
} else if (type->GetTypeKind() == TypeKind::TYPE_UNION) {
|
||||
String cpName = String::Format("%sCp", param->GetName().string());
|
||||
type->EmitCProxyReadVar(parcelName, cpName, false, gotoLabel, sb, prefix);
|
||||
sb.Append(prefix).AppendFormat("*%s = (%s*)OsalMemAlloc(sizeof(%s));\n",
|
||||
param->GetName().string(), type->EmitCType().string(), type->EmitCType().string());
|
||||
sb.Append(prefix).AppendFormat("if (*%s == NULL) {\n", param->GetName().string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_MALLOC_FAIL;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
sb.Append(prefix).AppendFormat("(void)memcpy_s(*%s, sizeof(%s), %s, sizeof(%s));\n",
|
||||
type->EmitCProxyReadVar(parcelName, cpName, false, errorCodeName_, gotoLabel, sb, prefix);
|
||||
sb.Append(prefix).AppendFormat("(void)memcpy_s(%s, sizeof(%s), %s, sizeof(%s));\n",
|
||||
param->GetName().string(), type->EmitCType().string(), cpName.string(), type->EmitCType().string());
|
||||
} else {
|
||||
type->EmitCProxyReadVar(parcelName, param->GetName(), false, gotoLabel, sb, prefix);
|
||||
type->EmitCProxyReadVar(parcelName, param->GetName(), false, errorCodeName_, gotoLabel, sb, prefix);
|
||||
}
|
||||
}
|
||||
|
||||
String CClientProxyCodeEmitter::GetGotLabel(const AutoPtr<ASTMethod>& method)
|
||||
void CClientProxyCodeEmitter::EmitStubCallMethod(const AutoPtr<ASTMethod>& method, StringBuilder& sb,
|
||||
const String& prefix)
|
||||
{
|
||||
String labelName = "finished";
|
||||
for (size_t i = 0; i < method->GetParameterNumber(); i++) {
|
||||
AutoPtr<ASTParameter> param = method->GetParameter(i);
|
||||
AutoPtr<ASTType> paramType = param->GetType();
|
||||
if (param->GetAttribute() == ParamAttr::PARAM_OUT &&
|
||||
(paramType->GetTypeKind() == TypeKind::TYPE_STRING
|
||||
|| paramType->GetTypeKind() == TypeKind::TYPE_ARRAY
|
||||
|| paramType->GetTypeKind() == TypeKind::TYPE_LIST
|
||||
|| paramType->GetTypeKind() == TypeKind::TYPE_STRUCT
|
||||
|| paramType->GetTypeKind() == TypeKind::TYPE_UNION)) {
|
||||
labelName = "errors";
|
||||
break;
|
||||
}
|
||||
if (!isKernelCode_) {
|
||||
sb.Append(prefix).AppendFormat("%s = %sCall(self, %s, %s, %s, %s);\n", errorCodeName_.string(),
|
||||
proxyName_.string(), EmitMethodCmdID(method).string(), dataParcelName_.string(),
|
||||
replyParcelName_.string(), method->IsOneWay() ? "true" : "false");
|
||||
} else {
|
||||
sb.Append(prefix).AppendFormat("%s = %sCall(self, %s, %s, %s);\n", errorCodeName_.string(),
|
||||
proxyName_.string(), EmitMethodCmdID(method).string(), dataParcelName_.string(),
|
||||
replyParcelName_.string());
|
||||
}
|
||||
|
||||
return labelName;
|
||||
sb.Append(prefix).AppendFormat("if (%s != HDF_SUCCESS) {\n", errorCodeName_.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: call failed! error code is %%{public}d\", __func__, %s);\n", errorCodeName_.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", finishedLabelName_);
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
void CClientProxyCodeEmitter::EmitProxyAsObjectMethodImpl(StringBuilder& sb)
|
||||
@@ -471,9 +422,9 @@ void CClientProxyCodeEmitter::EmitProxyGetInstanceMethodImpl(StringBuilder& sb)
|
||||
sb.Append(g_tab).AppendFormat("%sProxyConstruct(%s);\n", infName_.string(), objName.string());
|
||||
sb.Append(g_tab).AppendFormat("uint32_t %s = 0;\n", SerMajorName.string());
|
||||
sb.Append(g_tab).AppendFormat("uint32_t %s = 0;\n", SerMinorName.string());
|
||||
sb.Append(g_tab).AppendFormat("int32_t ec = %s->GetVersion(%s, &%s, &%s);\n", objName.string(), objName.string(),
|
||||
SerMajorName.string(), SerMinorName.string());
|
||||
sb.Append(g_tab).Append("if (ec != HDF_SUCCESS) {\n");
|
||||
sb.Append(g_tab).AppendFormat("int32_t %s = %s->GetVersion(%s, &%s, &%s);\n",
|
||||
errorCodeName_.string(), objName.string(), objName.string(), SerMajorName.string(), SerMinorName.string());
|
||||
sb.Append(g_tab).AppendFormat("if (%s != HDF_SUCCESS) {\n", errorCodeName_.string());
|
||||
sb.Append(g_tab).Append(g_tab).Append("HDF_LOGE(\"%{public}s: get version failed!\", __func__);\n");
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat("%sRelease(%s);\n", infName_.string(), objName.string());
|
||||
sb.Append(g_tab).Append(g_tab).Append("return NULL;\n");
|
||||
@@ -546,9 +497,9 @@ void CClientProxyCodeEmitter::EmitCbProxyGetMethodImpl(StringBuilder& sb)
|
||||
sb.Append(g_tab).AppendFormat("%sProxyConstruct(%s);\n", infName_.string(), objName.string());
|
||||
sb.Append(g_tab).AppendFormat("uint32_t %s = 0;\n", SerMajorName.string());
|
||||
sb.Append(g_tab).AppendFormat("uint32_t %s = 0;\n", SerMinorName.string());
|
||||
sb.Append(g_tab).AppendFormat("int32_t ec = %s->GetVersion(%s, &%s, &%s);\n", objName.string(), objName.string(),
|
||||
SerMajorName.string(), SerMinorName.string());
|
||||
sb.Append(g_tab).Append("if (ec != HDF_SUCCESS) {\n");
|
||||
sb.Append(g_tab).AppendFormat("int32_t %s = %s->GetVersion(%s, &%s, &%s);\n",
|
||||
errorCodeName_.string(), objName.string(), objName.string(), SerMajorName.string(), SerMinorName.string());
|
||||
sb.Append(g_tab).AppendFormat("if (%s != HDF_SUCCESS) {\n", errorCodeName_.string());
|
||||
sb.Append(g_tab).Append(g_tab).Append("HDF_LOGE(\"%{public}s: get version failed!\", __func__);\n");
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat("%sRelease(%s);\n", infName_.string(), objName.string());
|
||||
sb.Append(g_tab).Append(g_tab).Append("return NULL;\n");
|
||||
|
||||
@@ -48,8 +48,8 @@ private:
|
||||
|
||||
void EmitReadProxyMethodParameter(const AutoPtr<ASTParameter>& param, const String& parcelName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix);
|
||||
|
||||
String GetGotLabel(const AutoPtr<ASTMethod>& method);
|
||||
|
||||
void EmitStubCallMethod(const AutoPtr<ASTMethod>& method, StringBuilder& sb, const String& prefix);
|
||||
|
||||
void EmitProxyAsObjectMethodImpl(StringBuilder& sb);
|
||||
|
||||
|
||||
@@ -72,6 +72,21 @@ void CCodeEmitter::EmitInterfaceMethodParameter(const AutoPtr<ASTParameter>& par
|
||||
sb.Append(prefix).Append(parameter->EmitCParameter());
|
||||
}
|
||||
|
||||
void CCodeEmitter::EmitInitLoopVar(const AutoPtr<ASTMethod>& method, StringBuilder& sb, const String& prefix)
|
||||
{
|
||||
if (isKernelCode_) {
|
||||
for (size_t i = 0; i < method->GetParameterNumber(); i++) {
|
||||
AutoPtr<ASTParameter> param = method->GetParameter(i);
|
||||
AutoPtr<ASTType> type = param->GetType();
|
||||
if (type->GetTypeKind() == TypeKind::TYPE_ARRAY ||
|
||||
type->GetTypeKind() == TypeKind::TYPE_LIST) {
|
||||
sb.Append(prefix).Append("uint32_t i = 0;\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CCodeEmitter::EmitErrorHandle(const AutoPtr<ASTMethod>& method, const String& gotoLabel, bool isClient,
|
||||
StringBuilder& sb, const String& prefix)
|
||||
{
|
||||
@@ -84,28 +99,6 @@ void CCodeEmitter::EmitErrorHandle(const AutoPtr<ASTMethod>& method, const Strin
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
bool errorLabel = false;
|
||||
for (size_t i = 0; i < method->GetParameterNumber(); i++) {
|
||||
AutoPtr<ASTParameter> param = method->GetParameter(i);
|
||||
AutoPtr<ASTType> paramType = param->GetType();
|
||||
if (param->GetAttribute() == ParamAttr::PARAM_OUT &&
|
||||
(paramType->GetTypeKind() == TypeKind::TYPE_STRING
|
||||
|| paramType->GetTypeKind() == TypeKind::TYPE_ARRAY
|
||||
|| paramType->GetTypeKind() == TypeKind::TYPE_LIST
|
||||
|| paramType->GetTypeKind() == TypeKind::TYPE_STRUCT
|
||||
|| paramType->GetTypeKind() == TypeKind::TYPE_UNION)) {
|
||||
if (!errorLabel) {
|
||||
sb.Append(prefix + g_tab).Append("goto finished;\n");
|
||||
sb.Append("\n");
|
||||
sb.Append(prefix).AppendFormat("%s:\n", gotoLabel.string());
|
||||
errorLabel = true;
|
||||
}
|
||||
|
||||
paramType->EmitMemoryRecycle(param->GetName(), isClient, true, sb, prefix + g_tab);
|
||||
sb.Append("\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CCodeEmitter::EmitLicense(StringBuilder& sb)
|
||||
|
||||
@@ -31,6 +31,8 @@ protected:
|
||||
|
||||
void EmitInterfaceMethodParameter(const AutoPtr<ASTParameter>& parameter, StringBuilder& sb, const String& prefix);
|
||||
|
||||
void EmitInitLoopVar(const AutoPtr<ASTMethod>& method, StringBuilder& sb, const String& prefix);
|
||||
|
||||
void EmitErrorHandle(const AutoPtr<ASTMethod>& method, const String& gotoLabel, bool isClient, StringBuilder& sb,
|
||||
const String& prefix);
|
||||
|
||||
@@ -58,6 +60,9 @@ protected:
|
||||
}
|
||||
|
||||
String SpecificationParam(StringBuilder& sb, const String& prefix);
|
||||
|
||||
static constexpr const char *errorsLabelName_ = "ERRORS";
|
||||
static constexpr const char *finishedLabelName_ = "FINISHED";
|
||||
};
|
||||
} // namespace HDI
|
||||
} // namespace OHOS
|
||||
|
||||
@@ -280,7 +280,7 @@ void CCustomTypesCodeEmitter::EmitCustomTypeUnmarshallingImpl(StringBuilder& sb,
|
||||
}
|
||||
|
||||
sb.Append(g_tab).AppendFormat("return true;\n");
|
||||
sb.Append("errors:\n");
|
||||
sb.AppendFormat("%s:\n", errorsLabelName_);
|
||||
EmitCustomTypeMemoryRecycle(type, objName, sb, g_tab);
|
||||
|
||||
sb.Append(g_tab).Append("return false;\n");
|
||||
@@ -294,38 +294,38 @@ void CCustomTypesCodeEmitter::EmitMemberUnmarshalling(const AutoPtr<ASTType>& ty
|
||||
switch (type->GetTypeKind()) {
|
||||
case TypeKind::TYPE_STRING: {
|
||||
String tmpName = String::Format("%sCp", memberName.string());
|
||||
type->EmitCUnMarshalling(tmpName, sb, g_tab, freeObjStatements_);
|
||||
type->EmitCUnMarshalling(tmpName, errorsLabelName_, sb, g_tab, freeObjStatements_);
|
||||
|
||||
if (Options::GetInstance().DoGenerateKernelCode()) {
|
||||
sb.Append(g_tab).AppendFormat("%s = (char*)OsalMemCalloc(strlen(%s) + 1);\n",
|
||||
varName.string(), tmpName.string());
|
||||
sb.Append(g_tab).AppendFormat("if (%s == NULL) {\n", varName.string());
|
||||
sb.Append(g_tab).Append(g_tab).Append("goto errors;\n");
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat("goto %s;\n", errorsLabelName_);
|
||||
sb.Append(g_tab).Append("}\n");
|
||||
|
||||
sb.Append(g_tab).AppendFormat("if (strcpy_s(%s, (strlen(%s) + 1), %s) != HDF_SUCCESS) {\n",
|
||||
varName.string(), tmpName.string(), tmpName.string());
|
||||
sb.Append(g_tab).Append(g_tab).Append("goto errors;\n");
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat("goto %s;\n", errorsLabelName_);
|
||||
sb.Append(g_tab).Append("}\n");
|
||||
} else {
|
||||
sb.Append(g_tab).AppendFormat("%s = strdup(%s);\n", varName.string(), tmpName.string());
|
||||
}
|
||||
|
||||
sb.Append(g_tab).AppendFormat("if (%s == NULL) {\n", varName.string());
|
||||
sb.Append(g_tab).Append(g_tab).Append("goto errors;\n");
|
||||
sb.Append(g_tab).Append(g_tab).AppendFormat("goto %s;\n", errorsLabelName_);
|
||||
sb.Append(g_tab).Append("}\n");
|
||||
sb.Append("\n");
|
||||
break;
|
||||
}
|
||||
case TypeKind::TYPE_STRUCT: {
|
||||
String paramName = String::Format("&%s", varName.string());
|
||||
type->EmitCUnMarshalling(paramName, sb, g_tab, freeObjStatements_);
|
||||
type->EmitCUnMarshalling(paramName, errorsLabelName_, sb, g_tab, freeObjStatements_);
|
||||
sb.Append("\n");
|
||||
break;
|
||||
}
|
||||
case TypeKind::TYPE_UNION: {
|
||||
String tmpName = String::Format("%sCp", memberName.string());
|
||||
type->EmitCUnMarshalling(tmpName, sb, g_tab, freeObjStatements_);
|
||||
type->EmitCUnMarshalling(tmpName, errorsLabelName_, sb, g_tab, freeObjStatements_);
|
||||
sb.Append(g_tab).AppendFormat("(void)memcpy_s(&%s, sizeof(%s), %s, sizeof(%s));\n",
|
||||
varName.string(), type->EmitCType().string(),
|
||||
tmpName.string(), type->EmitCType().string());
|
||||
@@ -339,7 +339,7 @@ void CCustomTypesCodeEmitter::EmitMemberUnmarshalling(const AutoPtr<ASTType>& ty
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
type->EmitCUnMarshalling(varName, sb, g_tab, freeObjStatements_);
|
||||
type->EmitCUnMarshalling(varName, errorsLabelName_, sb, g_tab, freeObjStatements_);
|
||||
sb.Append("\n");
|
||||
}
|
||||
}
|
||||
@@ -360,7 +360,7 @@ void CCustomTypesCodeEmitter::EmitArrayMemberUnmarshalling(const AutoPtr<ASTType
|
||||
|
||||
sb.Append(prefix).AppendFormat("%s* %s = NULL;\n", elementType->EmitCType().string(), tmpName.string());
|
||||
sb.Append(prefix).AppendFormat("uint32_t %sLen = 0;\n", tmpName.string());
|
||||
type->EmitCUnMarshalling(tmpName, sb, prefix, freeObjStatements_);
|
||||
type->EmitCUnMarshalling(tmpName, errorsLabelName_, sb, prefix, freeObjStatements_);
|
||||
sb.Append(prefix).AppendFormat("%s = %s;\n", varName.string(), tmpName.string());
|
||||
sb.Append(prefix).AppendFormat("%sLen = %sLen;\n", varName.string(), tmpName.string());
|
||||
}
|
||||
|
||||
@@ -193,35 +193,24 @@ void CServiceStubCodeEmitter::EmitServiceStubMethodImpls(StringBuilder& sb, cons
|
||||
}
|
||||
|
||||
EmitStubGetVerMethodImpl(interface_->GetVersionMethod(), sb, prefix);
|
||||
sb.Append("\n");
|
||||
EmitStubAsObjectMethodImpl(sb, prefix);
|
||||
if (!isKernelCode_) {
|
||||
sb.Append("\n");
|
||||
EmitStubAsObjectMethodImpl(sb, prefix);
|
||||
}
|
||||
}
|
||||
|
||||
void CServiceStubCodeEmitter::EmitServiceStubMethodImpl(const AutoPtr<ASTMethod>& method, StringBuilder& sb,
|
||||
const String& prefix)
|
||||
{
|
||||
String dataName = "data_";
|
||||
String replyName = "reply_";
|
||||
sb.Append(prefix).AppendFormat(
|
||||
"static int32_t SerStub%s(struct %s *serviceImpl, struct HdfSBuf *%s, struct HdfSBuf *%s)\n",
|
||||
method->GetName().string(), interfaceName_.string(), dataName.string(), replyName.string());
|
||||
method->GetName().string(), interfaceName_.string(), dataParcelName_.string(), replyParcelName_.string());
|
||||
sb.Append(prefix).Append("{\n");
|
||||
sb.Append(prefix + g_tab).Append("int32_t ec = HDF_FAILURE;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("int32_t %s = HDF_FAILURE;\n", errorCodeName_.string());
|
||||
|
||||
// Local variable definitions must precede all execution statements.
|
||||
if (isKernelCode_) {
|
||||
for (size_t i = 0; i < method->GetParameterNumber(); i++) {
|
||||
AutoPtr<ASTParameter> param = method->GetParameter(i);
|
||||
AutoPtr<ASTType> type = param->GetType();
|
||||
if (type->GetTypeKind() == TypeKind::TYPE_ARRAY ||
|
||||
type->GetTypeKind() == TypeKind::TYPE_LIST) {
|
||||
sb.Append(prefix + g_tab).Append("uint32_t i = 0;\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
EmitInitLoopVar(method, sb, prefix + g_tab);
|
||||
|
||||
String gotoName = "errors";
|
||||
if (method->GetParameterNumber() > 0) {
|
||||
for (size_t i = 0; i < method->GetParameterNumber(); i++) {
|
||||
AutoPtr<ASTParameter> param = method->GetParameter(i);
|
||||
@@ -232,25 +221,28 @@ void CServiceStubCodeEmitter::EmitServiceStubMethodImpl(const AutoPtr<ASTMethod>
|
||||
for (int i = 0; i < method->GetParameterNumber(); i++) {
|
||||
AutoPtr<ASTParameter> param = method->GetParameter(i);
|
||||
if (param->GetAttribute() == ParamAttr::PARAM_IN) {
|
||||
EmitReadStubMethodParameter(param, dataName, sb, prefix + g_tab);
|
||||
EmitReadStubMethodParameter(param, dataParcelName_, finishedLabelName_, sb, prefix + g_tab);
|
||||
sb.Append("\n");
|
||||
} else if (param->EmitCStubReadOutVar(dataParcelName_, errorCodeName_, finishedLabelName_, sb,
|
||||
prefix + g_tab)) {
|
||||
sb.Append("\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EmitStubCallMethod(method, gotoName, sb, prefix + g_tab);
|
||||
EmitStubCallMethod(method, finishedLabelName_, sb, prefix + g_tab);
|
||||
sb.Append("\n");
|
||||
|
||||
for (int i = 0; i < method->GetParameterNumber(); i++) {
|
||||
AutoPtr<ASTParameter> param = method->GetParameter(i);
|
||||
if (param->GetAttribute() == ParamAttr::PARAM_OUT) {
|
||||
param->EmitCWriteVar(replyName, gotoName, sb, prefix + g_tab);
|
||||
param->EmitCWriteVar(replyParcelName_, errorCodeName_, finishedLabelName_, sb, prefix + g_tab);
|
||||
sb.Append("\n");
|
||||
}
|
||||
}
|
||||
|
||||
EmitErrorHandle(method, gotoName, false, sb, prefix);
|
||||
sb.Append(prefix + g_tab).Append("return ec;\n");
|
||||
EmitErrorHandle(method, finishedLabelName_, false, sb, prefix);
|
||||
sb.Append(prefix + g_tab).AppendFormat("return %s;\n", errorCodeName_.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
@@ -259,68 +251,77 @@ void CServiceStubCodeEmitter::EmitStubLocalVariable(const AutoPtr<ASTParameter>&
|
||||
{
|
||||
AutoPtr<ASTType> type = param->GetType();
|
||||
sb.Append(prefix).Append(param->EmitCLocalVar()).Append("\n");
|
||||
if (type->GetTypeKind() == TypeKind::TYPE_ARRAY || type->GetTypeKind() == TypeKind::TYPE_LIST) {
|
||||
if (type->GetTypeKind() == TypeKind::TYPE_ARRAY
|
||||
|| type->GetTypeKind() == TypeKind::TYPE_LIST
|
||||
|| (type->GetTypeKind() == TypeKind::TYPE_STRING && param->GetAttribute() == ParamAttr::PARAM_OUT)) {
|
||||
sb.Append(prefix).AppendFormat("uint32_t %sLen = 0;\n", param->GetName().string());
|
||||
}
|
||||
}
|
||||
|
||||
void CServiceStubCodeEmitter::EmitReadStubMethodParameter(const AutoPtr<ASTParameter>& param,
|
||||
const String& parcelName, StringBuilder& sb, const String& prefix)
|
||||
const String& parcelName, const String& gotoLabel, StringBuilder& sb, const String& prefix)
|
||||
{
|
||||
AutoPtr<ASTType> type = param->GetType();
|
||||
|
||||
if (type->GetTypeKind() == TypeKind::TYPE_STRING) {
|
||||
EmitReadCStringStubMethodParameter(param, parcelName, sb, prefix, type);
|
||||
EmitReadCStringStubMethodParameter(param, parcelName, gotoLabel, sb, prefix, type);
|
||||
} else if (type->GetTypeKind() == TypeKind::TYPE_INTERFACE) {
|
||||
type->EmitCStubReadVar(parcelName, param->GetName(), sb, prefix);
|
||||
type->EmitCStubReadVar(parcelName, param->GetName(), errorCodeName_, gotoLabel, sb, prefix);
|
||||
} else if (type->GetTypeKind() == TypeKind::TYPE_STRUCT) {
|
||||
sb.Append(prefix).AppendFormat("%s = (%s*)OsalMemAlloc(sizeof(%s));\n", param->GetName().string(),
|
||||
type->EmitCType(TypeMode::NO_MODE).string(), type->EmitCType(TypeMode::NO_MODE).string());
|
||||
sb.Append(prefix).AppendFormat("if (%s == NULL) {\n", param->GetName().string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_MALLOC_FAIL;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("HDF_LOGE(\"%%{public}s: malloc %s failed\", __func__);\n",
|
||||
param->GetName().string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_MALLOC_FAIL;\n", errorCodeName_.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", finishedLabelName_);
|
||||
sb.Append(prefix).Append("}\n");
|
||||
type->EmitCStubReadVar(parcelName, param->GetName(), sb, prefix);
|
||||
type->EmitCStubReadVar(parcelName, param->GetName(), errorCodeName_, gotoLabel, sb, prefix);
|
||||
} else if (type->GetTypeKind() == TypeKind::TYPE_UNION) {
|
||||
String cpName = String::Format("%sCp", param->GetName().string());
|
||||
type->EmitCStubReadVar(parcelName, cpName, sb, prefix);
|
||||
type->EmitCStubReadVar(parcelName, cpName, errorCodeName_, gotoLabel, sb, prefix);
|
||||
sb.Append(prefix).AppendFormat("%s = (%s*)OsalMemAlloc(sizeof(%s));\n", param->GetName().string(),
|
||||
type->EmitCType(TypeMode::NO_MODE).string(), type->EmitCType(TypeMode::NO_MODE).string());
|
||||
sb.Append(prefix).AppendFormat("if (%s == NULL) {\n", param->GetName().string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_MALLOC_FAIL;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("HDF_LOGE(\"%%{public}s: malloc %s failed\", __func__);\n",
|
||||
param->GetName().string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_MALLOC_FAIL;\n", errorCodeName_.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", finishedLabelName_);
|
||||
sb.Append(prefix).Append("}\n");
|
||||
sb.Append(prefix).AppendFormat("(void)memcpy_s(%s, sizeof(%s), %s, sizeof(%s));\n", param->GetName().string(),
|
||||
type->EmitCType(TypeMode::NO_MODE).string(), cpName.string(), type->EmitCType(TypeMode::NO_MODE).string());
|
||||
} else if (type->GetTypeKind() == TypeKind::TYPE_ARRAY || type->GetTypeKind() == TypeKind::TYPE_LIST) {
|
||||
type->EmitCStubReadVar(parcelName, param->GetName(), sb, prefix);
|
||||
type->EmitCStubReadVar(parcelName, param->GetName(), errorCodeName_, gotoLabel, sb, prefix);
|
||||
} else if (type->GetTypeKind() == TypeKind::TYPE_FILEDESCRIPTOR) {
|
||||
type->EmitCStubReadVar(parcelName, param->GetName(), sb, prefix);
|
||||
type->EmitCStubReadVar(parcelName, param->GetName(), errorCodeName_, gotoLabel, sb, prefix);
|
||||
} else {
|
||||
String name = String::Format("&%s", param->GetName().string());
|
||||
type->EmitCStubReadVar(parcelName, name, sb, prefix);
|
||||
type->EmitCStubReadVar(parcelName, name, errorCodeName_, gotoLabel, sb, prefix);
|
||||
}
|
||||
}
|
||||
|
||||
void CServiceStubCodeEmitter::EmitReadCStringStubMethodParameter(const AutoPtr<ASTParameter>& param,
|
||||
const String& parcelName, StringBuilder& sb, const String& prefix, AutoPtr<ASTType>& type)
|
||||
const String& parcelName, const String& gotoLabel, StringBuilder& sb, const String& prefix,
|
||||
AutoPtr<ASTType>& type)
|
||||
{
|
||||
String cloneName = String::Format("%sCp", param->GetName().string());
|
||||
type->EmitCStubReadVar(parcelName, cloneName, sb, prefix);
|
||||
type->EmitCStubReadVar(parcelName, cloneName, errorCodeName_, gotoLabel, sb, prefix);
|
||||
if (isKernelCode_) {
|
||||
sb.Append("\n");
|
||||
sb.Append(prefix).AppendFormat("%s = (char*)OsalMemCalloc(strlen(%s) + 1);\n",
|
||||
param->GetName().string(), cloneName.string());
|
||||
sb.Append(prefix).AppendFormat("if (%s == NULL) {\n", param->GetName().string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_MALLOC_FAIL;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_MALLOC_FAIL;\n", errorCodeName_.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("HDF_LOGE(\"%%{public}s: malloc %s failed\", __func__);\n",
|
||||
param->GetName().string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n\n");
|
||||
sb.Append(prefix).AppendFormat("if (strcpy_s(%s, (strlen(%s) + 1), %s) != HDF_SUCCESS) {\n",
|
||||
param->GetName().string(), cloneName.string(), cloneName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("HDF_LOGE(\"%%{public}s: read %s failed!\", __func__);\n",
|
||||
param->GetName().string());
|
||||
sb.Append(prefix + g_tab).Append("ec = HDF_ERR_INVALID_PARAM;\n");
|
||||
sb.Append(prefix + g_tab).Append("goto errors;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("%s = HDF_ERR_INVALID_PARAM;\n", errorCodeName_.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
} else {
|
||||
sb.Append(prefix).AppendFormat("%s = strdup(%s);\n", param->GetName().string(), cloneName.string());
|
||||
@@ -331,9 +332,11 @@ void CServiceStubCodeEmitter::EmitStubCallMethod(const AutoPtr<ASTMethod>& metho
|
||||
StringBuilder& sb, const String& prefix)
|
||||
{
|
||||
if (method->GetParameterNumber() == 0) {
|
||||
sb.Append(prefix).AppendFormat("ec = serviceImpl->%s(serviceImpl);\n", method->GetName().string());
|
||||
sb.Append(prefix).AppendFormat("%s = serviceImpl->%s(serviceImpl);\n", errorCodeName_.string(),
|
||||
method->GetName().string());
|
||||
} else {
|
||||
sb.Append(prefix).AppendFormat("ec = serviceImpl->%s(serviceImpl, ", method->GetName().string());
|
||||
sb.Append(prefix).AppendFormat("%s = serviceImpl->%s(serviceImpl, ", errorCodeName_.string(),
|
||||
method->GetName().string());
|
||||
for (size_t i = 0; i < method->GetParameterNumber(); i++) {
|
||||
AutoPtr<ASTParameter> param = method->GetParameter(i);
|
||||
EmitCallParameter(sb, param->GetType(), param->GetAttribute(), param->GetName());
|
||||
@@ -344,7 +347,7 @@ void CServiceStubCodeEmitter::EmitStubCallMethod(const AutoPtr<ASTMethod>& metho
|
||||
sb.AppendFormat(");\n", method->GetName().string());
|
||||
}
|
||||
|
||||
sb.Append(prefix).Append("if (ec != HDF_SUCCESS) {\n");
|
||||
sb.Append(prefix).AppendFormat("if (%s != HDF_SUCCESS) {\n", errorCodeName_.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s: call %s function failed!\", __func__);\n", method->GetName().string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("goto %s;\n", gotoLabel.string());
|
||||
@@ -355,8 +358,19 @@ void CServiceStubCodeEmitter::EmitCallParameter(StringBuilder& sb, const AutoPtr
|
||||
const String& name)
|
||||
{
|
||||
if (attribute == ParamAttr::PARAM_OUT) {
|
||||
sb.AppendFormat("&%s", name.string());
|
||||
if (type->GetTypeKind() == TypeKind::TYPE_ARRAY || type->GetTypeKind() == TypeKind::TYPE_LIST) {
|
||||
if (type->GetTypeKind() == TypeKind::TYPE_STRING
|
||||
|| type->GetTypeKind() == TypeKind::TYPE_ARRAY
|
||||
|| type->GetTypeKind() == TypeKind::TYPE_LIST
|
||||
|| type->GetTypeKind() == TypeKind::TYPE_STRUCT
|
||||
|| type->GetTypeKind() == TypeKind::TYPE_UNION) {
|
||||
sb.AppendFormat("%s", name.string());
|
||||
} else {
|
||||
sb.AppendFormat("&%s", name.string());
|
||||
}
|
||||
|
||||
if (type->GetTypeKind() == TypeKind::TYPE_STRING) {
|
||||
sb.AppendFormat(", %sLen", name.string());
|
||||
} else if (type->GetTypeKind() == TypeKind::TYPE_ARRAY || type->GetTypeKind() == TypeKind::TYPE_LIST) {
|
||||
sb.AppendFormat(", &%sLen", name.string());
|
||||
}
|
||||
} else {
|
||||
@@ -370,23 +384,20 @@ void CServiceStubCodeEmitter::EmitCallParameter(StringBuilder& sb, const AutoPtr
|
||||
void CServiceStubCodeEmitter::EmitStubGetVerMethodImpl(const AutoPtr<ASTMethod>& method, StringBuilder& sb,
|
||||
const String& prefix)
|
||||
{
|
||||
String dataName = "data_";
|
||||
String replyName = "reply_";
|
||||
sb.Append(prefix).AppendFormat(
|
||||
"static int32_t SerStub%s(struct %s *serviceImpl, struct HdfSBuf *%s, struct HdfSBuf *%s)\n",
|
||||
method->GetName().string(), interfaceName_.string(), dataName.string(), replyName.string());
|
||||
method->GetName().string(), interfaceName_.string(), dataParcelName_.string(), replyParcelName_.string());
|
||||
sb.Append(prefix).Append("{\n");
|
||||
sb.Append(prefix + g_tab).Append("int32_t ec = HDF_FAILURE;\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("int32_t %s = HDF_FAILURE;\n", errorCodeName_.string());
|
||||
|
||||
String gotoName = "errors";
|
||||
AutoPtr<ASTType> type = new ASTUintType();
|
||||
type->EmitCWriteVar(replyName, majorVerName_, gotoName, sb, prefix + g_tab);
|
||||
type->EmitCWriteVar(replyParcelName_, majorVerName_, errorCodeName_, finishedLabelName_, sb, prefix + g_tab);
|
||||
sb.Append("\n");
|
||||
type->EmitCWriteVar(replyName, minorVerName_, gotoName, sb, prefix + g_tab);
|
||||
type->EmitCWriteVar(replyParcelName_, minorVerName_, errorCodeName_, finishedLabelName_, sb, prefix + g_tab);
|
||||
sb.Append("\n");
|
||||
|
||||
sb.Append(gotoName).Append(":\n");
|
||||
sb.Append(prefix + g_tab).Append("return ec;\n");
|
||||
sb.Append(finishedLabelName_).Append(":\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("return %s;\n", errorCodeName_.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
|
||||
@@ -429,7 +440,7 @@ void CServiceStubCodeEmitter::EmitStubOnRequestMethodImpl(StringBuilder& sb, con
|
||||
AutoPtr<ASTMethod> getVerMethod = interface_->GetVersionMethod();
|
||||
sb.Append(prefix + g_tab + g_tab).AppendFormat("case %s:\n", EmitMethodCmdID(getVerMethod).string());
|
||||
sb.Append(prefix + g_tab + g_tab + g_tab).AppendFormat("return SerStub%s(serviceImpl, data, reply);\n",
|
||||
getVerMethod->GetName().string());
|
||||
getVerMethod->GetName().string());
|
||||
|
||||
sb.Append(prefix + g_tab + g_tab).Append("default: {\n");
|
||||
sb.Append(prefix + g_tab + g_tab + g_tab).AppendFormat(
|
||||
@@ -460,7 +471,7 @@ void CServiceStubCodeEmitter::EmitServiceStubOnRequestMethodImpl(StringBuilder&
|
||||
AutoPtr<ASTMethod> getVerMethod = interface_->GetVersionMethod();
|
||||
sb.Append(prefix + g_tab + g_tab).AppendFormat("case %s:\n", EmitMethodCmdID(getVerMethod).string());
|
||||
sb.Append(prefix + g_tab + g_tab + g_tab).AppendFormat("return SerStub%s(serviceImpl, data, reply);\n",
|
||||
getVerMethod->GetName().string());
|
||||
getVerMethod->GetName().string());
|
||||
|
||||
sb.Append(prefix + g_tab + g_tab).Append("default: {\n");
|
||||
sb.Append(prefix + g_tab + g_tab + g_tab).AppendFormat(
|
||||
@@ -514,7 +525,6 @@ void CServiceStubCodeEmitter::EmitKernelStubGetMethodImpl(StringBuilder& sb)
|
||||
interfaceName_.string(), objName.string());
|
||||
sb.Append(g_tab).Append(g_tab).Append("return NULL;\n");
|
||||
sb.Append(g_tab).Append("}\n");
|
||||
sb.Append(g_tab).AppendFormat("%sServiceConstruct(%s);\n", infName_.string(), objName.string());
|
||||
sb.Append(g_tab).AppendFormat("return %s;\n", objName.string());
|
||||
sb.Append("}\n");
|
||||
}
|
||||
|
||||
@@ -43,11 +43,11 @@ private:
|
||||
|
||||
void EmitStubLocalVariable(const AutoPtr<ASTParameter>& param, StringBuilder& sb, const String& prefix);
|
||||
|
||||
void EmitReadStubMethodParameter(const AutoPtr<ASTParameter>& param, const String& parcelName, StringBuilder& sb,
|
||||
const String& prefix);
|
||||
void EmitReadStubMethodParameter(const AutoPtr<ASTParameter>& param, const String& parcelName,
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix);
|
||||
|
||||
void EmitReadCStringStubMethodParameter(const AutoPtr<ASTParameter>& param, const String& parcelName,
|
||||
StringBuilder& sb, const String& prefix, AutoPtr<ASTType>& type);
|
||||
const String& gotoLabel, StringBuilder& sb, const String& prefix, AutoPtr<ASTType>& type);
|
||||
|
||||
void EmitStubCallMethod(const AutoPtr<ASTMethod>& method, const String& gotoLabel, StringBuilder& sb,
|
||||
const String& prefix);
|
||||
|
||||
@@ -52,6 +52,12 @@ bool CodeEmitter::Reset(const AutoPtr<AST>& ast, const String& targetDirectory,
|
||||
majorVerName_ = String::Format("%s_MAJOR_VERSION", interfaceName_.ToUnderLineUpper().string());
|
||||
minorVerName_ = String::Format("%s_MINOR_VERSION", interfaceName_.ToUnderLineUpper().string());
|
||||
|
||||
String prefix = String::Format("%c%s", tolower(infName_[0]), infName_.Substring(1).string());
|
||||
dataParcelName_ = prefix + "Data";
|
||||
replyParcelName_ = prefix + "Reply";
|
||||
optionName_ = prefix + "Option";
|
||||
errorCodeName_ = prefix + "Ret";
|
||||
|
||||
if (!ResolveDirectory(targetDirectory)) {
|
||||
return false;
|
||||
}
|
||||
@@ -74,6 +80,10 @@ void CodeEmitter::CleanData()
|
||||
stubFullName_ = "";
|
||||
implName_ = "";
|
||||
implFullName_ = "";
|
||||
dataParcelName_ = "";
|
||||
replyParcelName_ = "";
|
||||
optionName_ = "";
|
||||
errorCodeName_ = "";
|
||||
}
|
||||
|
||||
String CodeEmitter::GetFilePath(const String& outDir)
|
||||
|
||||
@@ -97,6 +97,11 @@ protected:
|
||||
String implFullName_;
|
||||
String majorVerName_;
|
||||
String minorVerName_;
|
||||
|
||||
String dataParcelName_;
|
||||
String replyParcelName_;
|
||||
String optionName_;
|
||||
String errorCodeName_;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -245,9 +245,9 @@ void CppClientProxyCodeEmitter::EmitGetInstanceMethodImpl(StringBuilder& sb, con
|
||||
|
||||
sb.Append(prefix + g_tab).AppendFormat("uint32_t %s = 0;\n", SerMajorName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("uint32_t %s = 0;\n", SerMinorName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("int32_t ec = %s->GetVersion(%s, %s);\n",
|
||||
sb.Append(prefix + g_tab).AppendFormat("int32_t %s = %s->GetVersion(%s, %s);\n", errorCodeName_.string(),
|
||||
objName.string(), SerMajorName.string(), SerMinorName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("if (ec != HDF_SUCCESS) {\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("if (%s != HDF_SUCCESS) {\n", errorCodeName_.string());
|
||||
sb.Append(prefix + g_tab + g_tab).Append("HDF_LOGE(\"%{public}s:get version failed!\", __func__);\n");
|
||||
sb.Append(prefix + g_tab + g_tab).Append("return nullptr;\n");
|
||||
sb.Append(prefix + g_tab).Append("}\n\n");
|
||||
@@ -301,32 +301,30 @@ void CppClientProxyCodeEmitter::EmitProxyMethodImpl(const AutoPtr<ASTMethod>& me
|
||||
void CppClientProxyCodeEmitter::EmitProxyMethodBody(const AutoPtr<ASTMethod>& method, StringBuilder& sb,
|
||||
const String& prefix)
|
||||
{
|
||||
String dataName = "data_";
|
||||
String replyName = "reply_";
|
||||
String optionName = "option_";
|
||||
String option = method->IsOneWay() ? "MessageOption::TF_ASYNC" : "MessageOption::TF_SYNC";
|
||||
sb.Append(prefix).Append("{\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("MessageParcel %s;\n", dataName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("MessageParcel %s;\n", replyName.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("MessageOption %s(%s);\n", optionName.string(), option.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("MessageParcel %s;\n", dataParcelName_.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("MessageParcel %s;\n", replyParcelName_.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("MessageOption %s(%s);\n", optionName_.string(), option.string());
|
||||
sb.Append("\n");
|
||||
|
||||
if (method->GetParameterNumber() > 0) {
|
||||
for (size_t i = 0; i < method->GetParameterNumber(); i++) {
|
||||
AutoPtr<ASTParameter> param = method->GetParameter(i);
|
||||
if (param->GetAttribute() == ParamAttr::PARAM_IN) {
|
||||
EmitWriteMethodParameter(param, dataName, sb, prefix + g_tab);
|
||||
EmitWriteMethodParameter(param, dataParcelName_, sb, prefix + g_tab);
|
||||
sb.Append("\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sb.Append(prefix + g_tab).AppendFormat("int32_t ec = Remote()->SendRequest(%s, %s, %s, %s);\n",
|
||||
EmitMethodCmdID(method).string(), dataName.string(), replyName.string(), optionName.string());
|
||||
sb.Append(prefix + g_tab).Append("if (ec != HDF_SUCCESS) {\n");
|
||||
sb.Append(prefix + g_tab).AppendFormat("int32_t %s = Remote()->SendRequest(%s, %s, %s, %s);\n",
|
||||
errorCodeName_.string(), EmitMethodCmdID(method).string(), dataParcelName_.string(),
|
||||
replyParcelName_.string(), optionName_.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("if (%s != HDF_SUCCESS) {\n", errorCodeName_.string());
|
||||
sb.Append(prefix + g_tab + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s failed, error code is %%{public}d\", __func__, ec);\n", method->GetName().string());
|
||||
sb.Append(prefix + g_tab + g_tab).Append("return ec;\n");
|
||||
"HDF_LOGE(\"%%{public}s failed, error code is %%{public}d\", __func__, %s);\n", errorCodeName_.string());
|
||||
sb.Append(prefix + g_tab + g_tab).AppendFormat("return %s;\n", errorCodeName_.string());
|
||||
sb.Append(prefix + g_tab).Append("}\n");
|
||||
|
||||
if (!method->IsOneWay()) {
|
||||
@@ -334,7 +332,7 @@ void CppClientProxyCodeEmitter::EmitProxyMethodBody(const AutoPtr<ASTMethod>& me
|
||||
for (size_t i = 0; i < method->GetParameterNumber(); i++) {
|
||||
AutoPtr<ASTParameter> param = method->GetParameter(i);
|
||||
if (param->GetAttribute() == ParamAttr::PARAM_OUT) {
|
||||
EmitReadMethodParameter(param, replyName, false, sb, prefix + g_tab);
|
||||
EmitReadMethodParameter(param, replyParcelName_, false, sb, prefix + g_tab);
|
||||
sb.Append("\n");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -268,8 +268,6 @@ void CppCustomTypesCodeEmitter::EmitBeginNamespace(StringBuilder& sb)
|
||||
{
|
||||
std::vector<String> cppNamespaceVec = EmitCppNameSpaceVec(ast_->GetPackageName());
|
||||
for (const auto& nspace : cppNamespaceVec) {
|
||||
Logger::D("EmitBeginNamespace", "%s", nspace.string());
|
||||
|
||||
sb.AppendFormat("namespace %s {\n", nspace.string());
|
||||
}
|
||||
}
|
||||
@@ -282,4 +280,4 @@ void CppCustomTypesCodeEmitter::EmitEndNamespace(StringBuilder& sb)
|
||||
}
|
||||
}
|
||||
} // namespace HDI
|
||||
} // namespace OHOS
|
||||
} // namespace OHOS
|
||||
|
||||
@@ -150,11 +150,9 @@ void CppServiceStubCodeEmitter::EmitStubMethodDecls(StringBuilder& sb, const Str
|
||||
void CppServiceStubCodeEmitter::EmitStubMethodDecl(const AutoPtr<ASTMethod>& method, StringBuilder& sb,
|
||||
const String& prefix)
|
||||
{
|
||||
String dataName = "data_";
|
||||
String replyName = "reply_";
|
||||
String optionName = "option_";
|
||||
sb.Append(prefix).AppendFormat("int32_t %s%s(MessageParcel& %s, MessageParcel& %s, MessageOption& %s);\n",
|
||||
stubName_.string(), method->GetName().string(), dataName.string(), replyName.string(), optionName.string());
|
||||
stubName_.string(), method->GetName().string(), dataParcelName_.string(), replyParcelName_.string(),
|
||||
optionName_.string());
|
||||
}
|
||||
|
||||
void CppServiceStubCodeEmitter::EmitStubSourceFile()
|
||||
@@ -280,19 +278,16 @@ void CppServiceStubCodeEmitter::EmitStubMethodImpls(StringBuilder& sb, const Str
|
||||
void CppServiceStubCodeEmitter::EmitStubMethodImpl(const AutoPtr<ASTMethod>& method, StringBuilder& sb,
|
||||
const String& prefix)
|
||||
{
|
||||
String dataName = "data_";
|
||||
String replyName = "reply_";
|
||||
String optionName = "option_";
|
||||
sb.Append(prefix).AppendFormat(
|
||||
"int32_t %s::%s%s(MessageParcel& %s, MessageParcel& %s, MessageOption& %s)\n",
|
||||
stubName_.string(), stubName_.string(), method->GetName().string(),
|
||||
dataName.string(), replyName.string(), optionName.string());
|
||||
dataParcelName_.string(), replyParcelName_.string(), optionName_.string());
|
||||
sb.Append(prefix).Append("{\n");
|
||||
|
||||
for (size_t i = 0; i < method->GetParameterNumber(); i++) {
|
||||
AutoPtr<ASTParameter> param = method->GetParameter(i);
|
||||
if (param->GetAttribute() == ParamAttr::PARAM_IN) {
|
||||
EmitReadMethodParameter(param, dataName, true, sb, prefix + g_tab);
|
||||
EmitReadMethodParameter(param, dataParcelName_, true, sb, prefix + g_tab);
|
||||
sb.Append("\n");
|
||||
} else {
|
||||
EmitLocalVariable(param, sb, prefix + g_tab);
|
||||
@@ -307,7 +302,7 @@ void CppServiceStubCodeEmitter::EmitStubMethodImpl(const AutoPtr<ASTMethod>& met
|
||||
for (size_t i = 0; i < method->GetParameterNumber(); i++) {
|
||||
AutoPtr<ASTParameter> param = method->GetParameter(i);
|
||||
if (param->GetAttribute() == ParamAttr::PARAM_OUT) {
|
||||
EmitWriteMethodParameter(param, replyName, sb, prefix + g_tab);
|
||||
EmitWriteMethodParameter(param, replyParcelName_, sb, prefix + g_tab);
|
||||
sb.Append("\n");
|
||||
}
|
||||
}
|
||||
@@ -320,7 +315,7 @@ void CppServiceStubCodeEmitter::EmitStubMethodImpl(const AutoPtr<ASTMethod>& met
|
||||
void CppServiceStubCodeEmitter::EmitStubCallMethod(const AutoPtr<ASTMethod>& method, StringBuilder& sb,
|
||||
const String& prefix)
|
||||
{
|
||||
sb.Append(prefix).AppendFormat("int32_t ec = %s(", method->GetName().string());
|
||||
sb.Append(prefix).AppendFormat("int32_t %s = %s(", errorCodeName_.string(), method->GetName().string());
|
||||
for (size_t i = 0; i < method->GetParameterNumber(); i++) {
|
||||
AutoPtr<ASTParameter> param = method->GetParameter(i);
|
||||
sb.Append(param->GetName());
|
||||
@@ -330,10 +325,10 @@ void CppServiceStubCodeEmitter::EmitStubCallMethod(const AutoPtr<ASTMethod>& met
|
||||
}
|
||||
sb.Append(");\n");
|
||||
|
||||
sb.Append(prefix).Append("if (ec != HDF_SUCCESS) {\n");
|
||||
sb.Append(prefix).AppendFormat("if (%s != HDF_SUCCESS) {\n", errorCodeName_.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat(
|
||||
"HDF_LOGE(\"%%{public}s failed, error code is %%d\", __func__, ec);\n", method->GetName().string());
|
||||
sb.Append(prefix + g_tab).Append("return ec;\n");
|
||||
"HDF_LOGE(\"%%{public}s failed, error code is %%d\", __func__, %s);\n", errorCodeName_.string());
|
||||
sb.Append(prefix + g_tab).AppendFormat("return %s;\n", errorCodeName_.string());
|
||||
sb.Append(prefix).Append("}\n");
|
||||
}
|
||||
} // namespace HDI
|
||||
|
||||
Reference in New Issue
Block a user