transfer after get Res

This commit is contained in:
lyon 2021-09-04 13:28:39 +08:00
parent c34a849b7b
commit 48e01e8f97
3 changed files with 60 additions and 31 deletions

View File

@ -156,24 +156,6 @@ char *getTypeVal(Args *buffs, char *typeToken)
return strsGetLastToken(buffs, typeToken, ':');
}
static void transferReturnVal(PikaObj *self, char *returnType, char *returnName, Args *args)
{
if (strEqu("->int", returnType))
{
int returnVal = args_getInt(args, "return");
obj_setInt(self, returnName, returnVal);
}
if (strEqu("->float", returnType))
{
float returnVal = args_getFloat(args, "return");
obj_setFloat(self, returnName, returnVal);
}
if (strEqu("->str", returnType))
{
char *returnVal = args_getStr(args, "return");
obj_setStr(self, returnName, returnVal);
}
}
static Args *getArgsByNameMatch(PikaObj *self, char *typeList, char *argList)
{
@ -392,6 +374,7 @@ Args *obj_invoke(PikaObj *self, char *cmd)
/* get return type */
char *returnType = strsGetLastToken(buffs, methodDec, ')');
/* get args */
args = getArgsBySentence(self, typeList, argList);
if (NULL == args)
@ -406,12 +389,17 @@ Args *obj_invoke(PikaObj *self, char *cmd)
/* run method */
methodPtr(methodHostObj, args);
/* transfer return type */
args_setStr(res, "returnType", returnType);
/* transfer return */
args_copyArgByName(args, "return", res);
/* transfer return name */
if (strIsContain(methodToken, '='))
{
char *returnName = strsGetFirstToken(buffs, methodToken, '=');
transferReturnVal(self, returnType, returnName, args);
args_setStr(res, "returnName", returnName);
}
/* transfer sysOut */
char *sysOut = obj_getSysOut(methodHostObj);
if (NULL != sysOut)

View File

@ -486,15 +486,56 @@ exit:
return res;
}
Args *obj_runDirect(PikaObj *self, char *cmd)
static void transferReturnVal(PikaObj *self, char *returnType, char *returnName, Args *args)
{
if (strEqu("->int", returnType))
{
int returnVal = args_getInt(args, "return");
obj_setInt(self, returnName, returnVal);
}
if (strEqu("->float", returnType))
{
float returnVal = args_getFloat(args, "return");
obj_setFloat(self, returnName, returnVal);
}
if (strEqu("->str", returnType))
{
char *returnVal = args_getStr(args, "return");
obj_setStr(self, returnName, returnVal);
}
}
Args *getRes(PikaObj *self, char *cmd)
{
if (strIsContain(cmd, '(') && strIsContain(cmd, ')'))
{
return obj_invoke(self, cmd);
}
Args *res = New_args(NULL);
}
Args *obj_runDirect(PikaObj *self, char *cmd)
{
Args *buffs = New_strBuff();
Args *res = NULL;
res = getRes(self, cmd);
/* transfer return */
if (strIsContain(cmd, '='))
{
char *returnType = args_getStr(res, "returnType");
char *returnName = args_getStr(res, "returnName");
transferReturnVal(self, returnType, returnName, res);
}
if (NULL == res)
{
res = New_args(NULL);
args_setErrorCode(res, 1);
args_setSysOut(res, "[error] solve script format faild!");
}
exit:
args_deinit(buffs);
return res;
}

View File

@ -36,13 +36,13 @@ TEST(block, pop)
EXPECT_EQ(pikaMemNow(), 0);
}
TEST(block, assert1)
{
PikaObj *block = block_init();
block_setAssert(block, (char *)"1");
int res = block_checkAssert(block);
ASSERT_EQ(1, res);
block_deinit(block);
}
// TEST(block, assert1)
// {
// PikaObj *block = block_init();
// block_setAssert(block, (char *)"1");
// int res = block_checkAssert(block);
// ASSERT_EQ(1, res);
// block_deinit(block);
// }
void block_pushLine(PikaObj *self, char *line);