!650 fix:modify serialization of c type parameter

Merge pull request !650 from yue/master
This commit is contained in:
openharmony_ci
2022-02-19 01:19:09 +00:00
committed by Gitee
54 changed files with 1002 additions and 869 deletions
+100 -85
View File
@@ -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());
+21 -15
View File
@@ -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_;
};
+19 -19
View File
@@ -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");
}
+7 -7
View File
@@ -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,
+18 -18
View File
@@ -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");
}
+7 -7
View File
@@ -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,
+18 -18
View File
@@ -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");
}
+7 -7
View File
@@ -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,
+19 -19
View File
@@ -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");
}
+7 -7
View File
@@ -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,
+12 -12
View File
@@ -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");
}
+7 -7
View File
@@ -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,
+18 -18
View File
@@ -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");
}
+7 -7
View File
@@ -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,
+18 -18
View File
@@ -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");
}
+7 -7
View File
@@ -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,
+9 -9
View File
@@ -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());
+4 -4
View File
@@ -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;
+98 -84
View File
@@ -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());
+21 -15
View File
@@ -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;
};
+18 -18
View File
@@ -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");
}
+7 -7
View File
@@ -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,
+44 -15
View File
@@ -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
+7 -1
View File
@@ -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;
+18 -18
View File
@@ -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");
}
+7 -7
View File
@@ -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,
+56 -20
View File
@@ -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");
}
+13 -7
View File
@@ -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,
+32 -19
View File
@@ -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());
+10 -7
View File
@@ -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,
+19 -7
View File
@@ -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());
}
+14 -8
View File
@@ -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;
+18 -18
View File
@@ -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");
}
+7 -7
View File
@@ -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,
+18 -18
View File
@@ -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");
}
+7 -7
View File
@@ -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,
+18 -18
View File
@@ -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");
}
+7 -7
View File
@@ -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,
+30 -17
View File
@@ -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");
}
+10 -7
View File
@@ -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,
+18 -18
View File
@@ -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");
}
+7 -7
View File
@@ -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);
+15 -22
View File
@@ -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)
+5
View File
@@ -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);
+10
View File
@@ -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)
+5
View File
@@ -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