Commit ef874766 authored by Victor Yacovlev's avatar Victor Yacovlev

Files implementation

parent 803cdd40
......@@ -63,6 +63,10 @@ def name_to_cpp(name, firstUpper = False):
return "OperatorGREATER"
elif ascii.startswith(":="):
return "OperatorASSIGN"
elif ascii=="input":
return "OperatorINPUT"
elif ascii=="output":
return "OperatorOUTPUT"
for c in ascii:
if c==' ':
nextIsCap = True
......@@ -89,13 +93,7 @@ def basetype_to_qtype(baseType):
if type(name)==dict:
name = name["ascii"]
if name==baseType:
typename = tp["cppdecl"]
if typename.startswith("struct "):
p = typename.index("{")
typename = typename[7:p]
if typename.startswith("class "):
p = typename.index("{")
typename = typename[6:p]
typename = name_to_cpp(name, True)
return typename
return baseType
......@@ -127,51 +125,6 @@ actorCPPModuleName = name_to_cpp(actor["name"], firstUpper=True)+"Module"
hName = actorCPPModuleName.lower()+"base.h"
cppName = actorCPPModuleName.lower()+"base.cpp"
handlesCustomTypeConstant = "false"
if "types" in actor.keys():
for tp in actor["types"]:
if "constants" in tp and (tp["constants"]==True or tp["constants"]==1):
handlesCustomTypeConstant = "true"
break
parseCustomTypeConstantBody = " Q_UNUSED(typeName); Q_UNUSED(literal);\n"
parseCustomConstantH = ""
parseCustomConstantHB = ""
parseCustomConstantCPP = ""
if handlesCustomTypeConstant:
firstIf = True
parseCustomTypeConstantBody = ""
for tp in actor["types"]:
typename = tp["cppdecl"]
if typename.startswith("struct "):
p = typename.index("{")
typename = typename[7:p]
if typename.startswith("class "):
p = typename.index("{")
typename = typename[6:p]
typename = typename.strip()
if "constants" in tp.keys() and (tp["constants"]==True or tp["constants"]==1):
methodName = "parseConstantOfType_"+typename
if firstIf:
firstIf = False
parseCustomTypeConstantBody += "if "
else:
parseCustomTypeConstantBody += " else if "
parseCustomTypeConstantBody += "( literal==QString::fromAscii(\"%s\") ) {\n" % typename
parseCustomTypeConstantBody += " %s value;\n" % typename
parseCustomTypeConstantBody += " if ( m_module->%s(literal, value) ) {\n" % methodName
parseCustomTypeConstantBody += " char data[sizeof(%s)];\n" % typename
parseCustomTypeConstantBody += " memcpy(data, &value, sizeof(value));\n"
parseCustomTypeConstantBody += " result = QByteArray(data);\n"
parseCustomTypeConstantBody += " }\n"
parseCustomTypeConstantBody += " }\n"
parseCustomConstantH += " bool "+methodName+"(const QString & literal, "+typename+" &value);\n"
parseCustomConstantHB += " virtual bool "+methodName+"(const QString & literal, "+typename+" &value) = 0;\n"
parseCustomConstantCPP += "bool "+actorCPPModuleName+"::"+methodName+"(const QString & literal, "+typename+" &value) {\n //TODO implement me\n return false;\n}\n"
DO_NOT_EDIT = """/*
DO NOT EDIT THIS FILE!
......@@ -194,14 +147,24 @@ if update:
if "types" in actor.keys():
for tp in actor["types"]:
if tp["cppdecl"].startswith("struct") or tp["cppdecl"].startswith("class"):
h.write(tp["cppdecl"]+";\n\n")
name = name_to_cpp(tp["name"], True)
meta = ""
for field in tp["fields"]:
letter = field["baseType"][0]
meta += letter
h.write("struct %s {\n" % name)
h.write(" inline static const char * _() { return \"%s\"; }\n" % meta)
for field in tp["fields"]:
fieldName = name_to_cpp(field["name"])
fieldType = basetype_to_qtype(field["baseType"])
h.write(" %s %s;\n" % (fieldType, fieldName))
h.write("};\n\n")
h.write("class %sBase\n : public QObject\n{\n" % actorCPPModuleName)
h.write(" Q_OBJECT\n")
h.write("public:\n")
h.write(" %sBase(ExtensionSystem::KPlugin * parent);\n" % actorCPPModuleName)
h.write(parseCustomConstantHB)
h.write("public slots:\n")
h.write(" // Reset actor state before program starts\n")
h.write(" virtual void reset() = 0;\n")
......@@ -476,9 +439,6 @@ public:
QString name() const;
inline QString mainIconName() const { return "$mainIconName"; }
inline QString pultIconName() const { return "$pultIconName"; }
inline virtual bool handlesCustomTypeConstant() const { return $handlesCustomTypeConstant; }
virtual QByteArray parseCustomTypeConstant(const QString & /*asciiTypeName*/,
const QString & /*literal*/) const;
// Actor GUI access
QWidget* mainWidget();
QWidget* pultWidget();
......@@ -566,7 +526,6 @@ signals:
.replace("$mainIconName", mainIconName)
.replace("$pultIconName", pultIconName)
.replace("$asyncClassDecl", asyncClassDecl)
.replace("$handlesCustomTypeConstant", handlesCustomTypeConstant)
.encode("utf8")
)
......@@ -656,6 +615,9 @@ def make_method_call(method, fromThread=False):
}
"""
else:
comment = method["name"]
if type(comment)==dict:
comment = comment["ascii"]
call = "m_module->run"+name_to_cpp(method["name"], True)+"("
arglines = []
optresults = ""
......@@ -681,14 +643,14 @@ def make_method_call(method, fromThread=False):
argline += "customTypeFromQVariant<%s>(%s)" % (bt, argvar)
if arg.has_key("access") and "out" in arg["access"]:
optresults += " l_optResults << x"+str(index+1)+";\n"
optresults += " l_optResults << x"+str(index+1)+";\n"
argline += ";"
arglines += [argline]
if index: call += ", "
call += "x"+str(index+1)
call += ")"
if optresults:
optresults = " l_optResults.clear();\n"+optresults
optresults = " l_optResults.clear();\n"+optresults
if method.has_key("returnType") and method["returnType"]!="void":
if method["returnType"] in ["int", "double", "string", "bool", "char"]:
call = "v_result = QVariant::fromValue(%s)" % call
......@@ -707,6 +669,7 @@ def make_method_call(method, fromThread=False):
ret = "Shared::ES_NoResult"
if not fromThread:
return """ {
/* $comment */
$vardecl
$call
$optresults
......@@ -718,9 +681,11 @@ def make_method_call(method, fromThread=False):
replace("$vardecl", string.join(arglines, "\n ")). \
replace("$call", call+";"). \
replace("$ret", ret). \
replace("$optresults", optresults)
replace("$optresults", optresults). \
replace("$comment", comment)
else:
return """ {
/* $comment */
$vardecl
$call
break;
......@@ -728,7 +693,8 @@ def make_method_call(method, fromThread=False):
""". \
replace("$vardecl", string.join(arglines, "\n ")). \
replace("$call", call+";"). \
replace("$ret", ret)
replace("$ret", ret).\
replace("$comment", comment)
evaluateMethods = map(make_method_call, actor["methods"])
evaluateMethods = map(lambda x: (" case %#06x:"%x[0])+x[1], enumerate(evaluateMethods))
......@@ -795,22 +761,33 @@ if "settings" in actor:
.replace("$pluginName", actorCPPName+"Plugin") \
.replace("$actorLocalizedName", actor["name"]["ru_RU"])
def baseType_to_kumActorTypeEnum(baseType):
if baseType=="double":
return "Real"
elif baseType=="int":
return "Int"
elif baseType=="bool":
return "Bool"
elif baseType=="char":
return "Char"
elif baseType=="string":
return "String"
makeTypes = ""
if "types" in actor.keys():
makeTypes += "Shared::ActorInterface::CustomType tp;\n"
makeTypes += " Shared::ActorInterface::Record rec;\n"
for tp in actor["types"]:
name = tp["name"]
if type(name)==dict:
name = name["ascii"]
typename = tp["cppdecl"]
if typename.startswith("struct "):
p = typename.index("{")
typename = typename[7:p]
if typename.startswith("class "):
p = typename.index("{")
typename = typename[6:p]
kum_name = kumir_custom_typename(name)
makeTypes += " tp = Shared::ActorInterface::CustomType(QString::fromUtf8(\""+kum_name+"\"), sizeof("+typename+"));\n"
makeTypes += " rec.clear();\n";
for field in tp["fields"]:
fieldName = name_to_cpp(field["name"])
fieldType = baseType_to_kumActorTypeEnum(field["baseType"])
makeTypes += " rec << Field(QString::fromUtf8(\"%s\"), %s);\n" % (fieldName, fieldType)
makeTypes += " tp = Shared::ActorInterface::CustomType(QString::fromUtf8(\""+kum_name+"\"), rec);\n"
makeTypes += " result << tp;\n"
......@@ -895,13 +872,6 @@ Shared::ActorInterface::TypeList $className::typeList() const
return result;
}
QByteArray $className::parseCustomTypeConstant(const QString & typeName, const QString & literal) const
{
QByteArray result;
$parseCustomTypeConstantBody
return result;
}
QString $className::name() const
{
return QString::fromUtf8(\"$actorName\");
......@@ -960,10 +930,52 @@ T customTypeFromQVariant(const QVariant & value)
template <typename T>
QVariant customTypeToQVariant(const T & value)
{
char data[sizeof(T)];
memcpy(&data, &value, sizeof(T));
QByteArray valData(data);
return QVariant(valData);
QVariantList result;
const void * ptr = & value;
size_t offset = 0;
const size_t N = strlen(value._());
for (size_t i=0; i<N; i++) {
switch (value._()[i]) {
case 'i': {
const int * pval = reinterpret_cast<const int*>(ptr+offset);
int val = * pval;
result << QVariant(val);
ptr += sizeof(val);
break;
}
case 'd': {
const qreal * pval = reinterpret_cast<const qreal*>(ptr+offset);
qreal val = * pval;
result << QVariant(val);
ptr += sizeof(val);
break;
}
case 'b': {
const bool * pval = reinterpret_cast<const bool*>(ptr+offset);
bool val = * pval;
result << QVariant(val);
ptr += sizeof(val);
break;
}
case 'c': {
const QChar * pval = reinterpret_cast<const QChar*>(ptr+offset);
QChar val = * pval;
result << QVariant(val);
ptr += sizeof(val);
break;
}
case 's': {
const QString * pval = reinterpret_cast<const QString*>(ptr+offset);
QString val = * pval;
result << QVariant(val);
ptr += sizeof(val);
break;
}
default:
break;
}
}
return QVariant(result);
}
Shared::EvaluationStatus $className::evaluate(quint32 index, const QVariantList & args)
......@@ -1028,7 +1040,6 @@ Q_EXPORT_PLUGIN($namespace::$className)
.replace("$actorName", actor["name"]["ru_RU"])
.replace("$settingsPageCreation", settingsPageCreation)
.replace("$makeTypes", makeTypes)
.replace("$parseCustomTypeConstantBody", parseCustomTypeConstantBody)
.encode("utf-8")
)
cpp.close()
......@@ -1104,7 +1115,7 @@ public:
// Constructor
$className(ExtensionSystem::KPlugin * parent);
$constantParser
public slots:
// Reset actor state before program starts
void reset();
......@@ -1128,7 +1139,6 @@ $settingsIfNeed
.replace("$guiIfNeed", guiIfNeed)
.replace("$methods", actorMethodsForHeader)
.replace("$settingsIfNeed", settingsIfNeed)
.replace("$constantParser", parseCustomConstantH)
)
h.close()
......@@ -1169,13 +1179,10 @@ void $className::setAnimationEnabled(bool enabled)
*/
}
$constantsParsers
"""
.replace("$classHeader", className.lower()+".h")
.replace("$namespace", actorCPPNameSpace)
.replace("$className", className)
.replace("$constantsParsers", parseCustomConstantCPP)
)
if windows.has_key("main"):
......
......@@ -3,22 +3,22 @@
"No one 'case'";"Нет ни одного “при”";"";"";"";"";
"Broken if statement";"Нет “все” для этой конструкции";"";"";"";"";
"Can't %1 %2 %3";"Нельзя “%1 %2 %3”";"";"";"";"";
"The name is used by other algorithm";"Имя занято другим алгоритмом";"";"";"";"";
"Too many ':=' operators";"Много “:=” в одной строке";"";"";"";"";
"Can't input string slice";"Нельзя ввести в вырезку";"";"";"";"";
"Use of 'not' for non-boolean value";"“не” вне логического выражения";"";"";"";"";
"Can't pass in-argument as in/out-argument";"Нельзя арг передать в рез или аргрез";"";"";"";"";
"Extra statement";"Строка не на месте";"";"";"";"";
"Wrong table constant";"";"";"";"";"";
"Unpaired ']'";"Нет парной “]”";"";"";"";"";
"Return valus is not a string";"Возвращаемая величина не строка";"";"";"";"";
"What to output?";"Что выводить?";"";"";"";"";
"Garbage in algorithm";"Лишние строки алгоритма";"";"";"";"";
"Assignment to array";"Присваивание массиву";"";"";"";"";
"Garbage between if..then";"Мусор между “если”..”то”";"";"";"";"";
"Extra open brace";"";"";"";"";"";
"Program structure error";"Ошибка структуры программы";"";"";"";"";
"No module name";"Нет имени исполнителя";"";"";"";"";
"Array dimension mismatch";"Несоответствие размерностей таблиц";"";"";"";"";
"No pairing 'begin module'";"Нет парной “исп”";"";"";"";"";
"No condition after 'if'";"Нет условия для “если”";"";"";"";"";
"No 'end' after 'then'";"Нет “все” после “то”";"";"";"";"";
"The name is used by global variable";"Имя занято глобальной величиной";"";"";"";"";
"Extra variable group specifier: %1";"Лишнее описание группы величин";"";"";"";"";
"Array bounds no specified";"Нет границ";"";"";"";"";
......@@ -31,12 +31,13 @@
"Can't integer:=charect";"Нельзя “цел := сим”";"";"";"";"";
"Can't charect:=integer";"Нельзя “сим := цел”";"";"";"";"";
"Can't boolean:=real";"Нельзя “лог := вещ”";"";"";"";"";
"Too many ':=' operators";"Много “:=” в одной строке";"";"";"";"";
"The name is used by other algorithm";"Имя занято другим алгоритмом";"";"";"";"";
"Variable already declared";"Величина уже описана";"";"";"";"";
"Can't boolean:=integer";"Нельзя “лог := цел”";"";"";"";"";
"Algorhitms can't return array";"Нельзя вернуть таблицу";"";"";"";"";
"'to' earler then 'from'";"“до” раньше чем “от”";"";"";"";"";
"Extra operator";"Лишний оператор";"";"";"";"";
"Can't input value of type %1";"";"";"";"";"";
"File already specified";"";"";"";"";"";
"Garbage after algorhitm header";"Мусор после “нач”";"";"";"";"";
"Extra 'endloop'";"Непарный “кц”";"";"";"";"";
......@@ -76,7 +77,7 @@
"Can't input algorithm in- argument";"Нельзя ввести в аргумент";"";"";"";"";
"Then-value not specified";"Нет значения после “до”";"";"";"";"";
"Extra 'module'";"Для “исп” нет “кон_исп”";"";"";"";"";
"Array dimension must not be > 3";"Таблицы не бывают размерности > 3";"";"";"";"";
"No 'loop' before 'times'";"Перед “раз” нет “нц”";"";"";"";"";
"Extra ','";"Лишняя запятая";"";"";"";"";
"Garbage after 'switch' statement";"Мусор после “выбор”";"";"";"";"";
"Not enought indeces";"Не все индексы";"";"";"";"";
......@@ -102,12 +103,12 @@
"No 'then' after 'if'";"Где “то” после условия?";"";"";"";"";
"Assignment to complex expression";"Нельзя присвоить выражению";"";"";"";"";
"Can't real:=string";"Нельзя “вещ := лит”";"";"";"";"";
"Wrong hex constant";"Плохая 16-ричная константа";"";"";"";"";
"Constant instead of name";"Здесь должно быть имя";"";"";"";"";
"':=' or '=' ?";"“:=” или “=” ?";"";"";"";"";
"Unpaired quote";"Непарная кавычка";"";"";"";"";
"Array name not specified before '['";"Перед “[“ должно быть имя таблицы";"";"";"";"";
"No algorithm name";"Не указано имя алгоритма";"";"";"";"";
"Algorhitm not found";"Нет такого алгоритма";"";"";"";"";
"Can't input complex expression";"Нельзя ввести в выражение";"";"";"";"";
"Not a constant value";"Это не константа";"";"";"";"";
"Can't input function";"Нельзя ввести в алгоритм";"";"";"";"";
"Can't integer:=string";"Нельзя “цел := лит”";"";"";"";"";
......@@ -117,36 +118,35 @@
"Extra docstring";"Здесь не должно быть строк описания";"";"";"";"";
"Extra brackets for algorithm without arguments";"Нет аргументов – не нужны скобки";"";"";"";"";
"Assignment to function";"Нельзя присвоить алгоритму";"";"";"";"";
"Constant instead of name";"Здесь должно быть имя";"";"";"";"";
"Index is not integer";"Индекс – не целое число";"";"";"";"";
"Wrong hex constant";"Плохая 16-ричная константа";"";"";"";"";
"Unmatched array dimensions";"Несоответствие размерностей таблиц";"";"";"";"";
"Operator in name";"Имя содержит оператор";"";"";"";"";
"Garbage afrer module name";"Мусор после имени исполнителя";"";"";"";"";
"Table dimension > 3";"";"";"";"";"";
"Times value not specified";"Сколько раз?";"";"";"";"";
"No for-loop variable";"Нет величины цикла";"";"";"";"";
"Left array bound is not integer";"Левая граница – не целое";"";"";"";"";
"No condition after 'case'";"Нет условия после “при”";"";"";"";"";
"Incompatible types";"Плохой тип параметра";"";"";"";"";
"'end_module' instead of 'end'";"“кон_исп” вместо “кон”";"";"";"";"";
"Unpaired ')'";"Непарная скобка";"";"";"";"";
"Initial value is empty";"Начальное значение не задано";"";"";"";"";
"'%1' in algorithm";"“%1” внутри алгоритма";"";"";"";"";
"Extra statement";"Строка не на месте";"";"";"";"";
"Extra open brace";"";"";"";"";"";
"Can't pass in-argument as in/out-argument";"Нельзя арг передать в рез или аргрез";"";"";"";"";
"Garbage between if..then";"Мусор между “если”..”то”";"";"";"";"";
"No loop 'to' value";"Нет “до” после “от”";"";"";"";"";
"Extra format";"";"";"";"";"";
"Can't charect:=string";"Нельзя “сим := лит”";"";"";"";"";
"Extra '['";"Лишняя “[“";"";"";"";"";
"Constant can not be a name";"Константа – это не имя";"";"";"";"";
"It is a garbage";"Это лишнее";"";"";"";"";
"Extra format parameter";"Лишний параметр вывода";"";"";"";"";
"No 'end' after 'then'";"Нет “все” после “то”";"";"";"";"";
"Not integer for-loop variable";"Величина не целая";"";"";"";"";
"No condition after 'if'";"Нет условия для “если”";"";"";"";"";
"Slice of string array, but not string";"Вырезка не из строки, а из таблицы";"";"";"";"";
"Void argument";"Пустой аргумент";"";"";"";"";
"What to input?";"Куда вводить?";"";"";"";"";
"Can't input complex expression";"Нельзя ввести в выражение";"";"";"";"";
"Algorhitm not found";"Нет такого алгоритма";"";"";"";"";
"Left array bound not specified";"Не указана левая граница таблицы";"";"";"";"";
"Array input must not be in a list";"";"";"";"";"";
"Unmatched array dimensions";"Несоответствие размерностей таблиц";"";"";"";"";
"Unpaired ')'";"Непарная скобка";"";"";"";"";
"Index is not integer";"Индекс – не целое число";"";"";"";"";
"Table dimension > 3";"";"";"";"";"";
"Extra variable group out-specifier";"Лишний “рез”";"";"";"";"";
"No 'loop' before 'while'";"Перед “пока” нет “нц”";"";"";"";"";
"Extra 'case'";"“при” не на месте";"";"";"";"";
......@@ -161,11 +161,12 @@
"Extra 'else'";"Лишнее “иначе”";"";"";"";"";
"Extra 'begin'";"Нет “кон” после “нач”";"";"";"";"";
"Extra variable group inout-specifier";"Лишний “аргрез”";"";"";"";"";
"Can't -%1";"Нельзя -%1";"";"";"";"";
"Extra indeces in slice";"Лишние индексы в вырезке";"";"";"";"";
"Unpaired '['";"Не парная “[“";"";"";"";"";
"Can't pass this expression as in/out-argumeny";"Не величина в аргрез-параметре";"";"";"";"";
"Must be a scalar constant";"";"";"";"";"";
"Wrong E-real number";"Ошибка в E-записи числа";"";"";"";"";
"'end_module' instead of 'end'";"“кон_исп” вместо “кон”";"";"";"";"";
"Extra 'end'";"Лишний “кон”";"";"";"";"";
"Algorhitm header in algorhitm body";"Вложенное описание алгоритма";"";"";"";"";
"Not a simple index";"Индекс – не число";"";"";"";"";
......@@ -173,8 +174,8 @@
"Name contains quotation symbol";"Имя содержит кавычку";"";"";"";"";
"Not enought algorithm arguments";"Мало аргументов";"";"";"";"";
"Can't charect:=boolean";"Нельзя “сим := лог”";"";"";"";"";
"No 'loop' before 'times'";"Перед “раз” нет “нц”";"";"";"";"";
"No 'loop' before 'for'";"Перед “для” нет “нц”";"";"";"";"";
"Array dimension must not be > 3";"Таблицы не бывают размерности > 3";"";"";"";"";
"Wrong E-real number";"Ошибка в E-записи числа";"";"";"";"";
"Extra 'if'";"Нет “то..все” после “если”";"";"";"";"";
"No condition between 'case' and colon";"Нет условия между “при” и “:”";"";"";"";"";
"No then before else";"Нет “то” перед “иначе”";"";"";"";"";
......@@ -183,12 +184,12 @@
"'end' instead of 'endloop'";"“кон” вместо “кц”";"";"";"";"";
"Keyword in name";"Ключевое слово в имени";"";"";"";"";
"No 'case' after 'switch'";"Нет “при:” после “выбор”";"";"";"";"";
"Assignment of non-returning algorithm";"У этого алгоритма нет значения";"";"";"";"";
"Times value not specified";"Сколько раз?";"";"";"";"";
"Garbage between alg..begin";"Мусор между “алг”..”нач”";"";"";"";"";
"Garbage afrer module name";"Мусор после имени исполнителя";"";"";"";"";
"Array element in array bound";"Элемент таблицы в границе";"";"";"";"";
"First unnamed algorithm should not return anything";"Алгоритм без имени ничего не возвращает";"";"";"";"";
"Not integer for-loop variable";"Величина не целая";"";"";"";"";
"Condition after '%1' not boolean";"Условие после “%1” не логическое";"";"";"";"";
"Extra format parameter";"Лишний параметр вывода";"";"";"";"";
"No left array bound";"Нет левой границы таблицы";"";"";"";"";
"Integer constant too big";"Слишком большое целое число";"";"";"";"";
"Literal can't be part of name";"Константа в имени";"";"";"";"";
"Access to return value outside of algorithm";"Вне алгоритмов не бывает “знач”";"";"";"";"";
......@@ -198,9 +199,9 @@
"Can't string:=real";"Нельзя “лит := вещ”";"";"";"";"";
"No 'from'..'to'.. after variable";"Нет “от”..”до”.. после величины";"";"";"";"";
"Forgotten operator after bracket";"Перед выражением пропущен оператор";"";"";"";"";
"Can't -%1";"Нельзя -%1";"";"";"";"";
"No 'loop' before 'for'";"Перед “для” нет “нц”";"";"";"";"";
"Can't pass in-argument as out-argument";"Нельзя арг передать в рез или аргрез";"";"";"";"";
"No left array bound";"Нет левой границы таблицы";"";"";"";"";
"Condition after '%1' not boolean";"Условие после “%1” не логическое";"";"";"";"";
"Can't integer:=real";"Нельзя “цел := вещ”";"";"";"";"";
"Array required here";"Индексы не нужны";"";"";"";"";
"No condition after 'end if'";"Нет условия для “кц при”";"";"";"";"";
......@@ -248,7 +249,7 @@
"No expressions after '%1'";"Нет величин после “%1”";"";"";"";"";
"Not integer times-value";"Величина не целая";"";"";"";"";
"No pairing '('";"Нет парной “(“";"";"";"";"";
"Garbage between alg..begin";"Мусор между “алг”..”нач”";"";"";"";"";
"Assignment of non-returning algorithm";"У этого алгоритма нет значения";"";"";"";"";
"Bad symbol in name";"Имя содержит недопустимый символ";"";"";"";"";
"What to assign?";"Что назначать?";"";"";"";"";
"No condition after 'loop while'";"Нет условия после “нц пока”";"";"";"";"";
......
CMakeLists.txt
*base.*
*plugin.*
......@@ -3,8 +3,10 @@
"types": [
{
"name": { "ascii": "complex", "ru_RU": "компл" },
"cppdecl": "struct Complex { double re; double im; }",
"constants": true
"fields": [
{ "name": "re", "baseType": "double" },
{ "name": "im", "baseType": "double" }
]
}
],
"methods": [
......@@ -67,6 +69,21 @@
"arguments": [
{ "name": "x", "baseType": "double" }
]
},
{
"name": { "ascii": "input", "ru_RU": "ввод" },
"returnType": "complex",
"arguments": [
{ "name": "x", "baseType": "string" },
{ "name": "ok", "baseType": "bool", "access": "out"}
]
},
{
"name": { "ascii": "output", "ru_RU": "вывод" },
"returnType": "string",
"arguments": [
{ "name": "x", "baseType": "complex" }
]
}
]
}
......@@ -34,66 +34,105 @@ void ComplexNumbersModule::setAnimationEnabled(bool enabled)
*/
}
bool ComplexNumbersModule::parseConstantOfType_Complex(const QString & literal, Complex &value) {
//TODO implement me
return false;
}
qreal ComplexNumbersModule::runRe(const Complex& x)
{
/* TODO implement me */
return 0.0;
}
qreal ComplexNumbersModule::runRe(const Complex & x)
qreal ComplexNumbersModule::runIm(const Complex& x)
{
/* TODO implement me */
return 0.0;
}
qreal ComplexNumbersModule::runIm(const Complex & x)
Complex ComplexNumbersModule::runOperatorPLUS(const Complex& x, const Complex& y)
{
/* TODO implement me */
return 0.0;
return Complex();
}
Complex ComplexNumbersModule::runOperatorPLUS(const Complex & x, const Complex & y)
Complex ComplexNumbersModule::runOperatorMINUS(const Complex& x, const Complex& y)
{
/* TODO implement me */
return Complex ();
return Complex();
}
Complex ComplexNumbersModule::runOperatorMINUS(const Complex & x, const Complex & y)
Complex ComplexNumbersModule::runOperatorASTERISK(const Complex& x, const Complex& y)
{
/* TODO implement me */
return Complex ();
return Complex();
}
Complex ComplexNumbersModule::runOperatorASTERISK(const Complex & x, const Complex & y)
Complex ComplexNumbersModule::runOperatorSLASH(const Complex& x, const Complex& y)
{
/* TODO implement me */
return Complex ();
return Complex();
}
Complex ComplexNumbersModule::runOperatorSLASH(const Complex & x, const Complex & y)
Complex ComplexNumbersModule::runOperatorASSIGN(const int x)
{
/* TODO implement me */
return Complex ();
return Complex();
}
Complex ComplexNumbersModule::runOperatorASSIGN(const int x)
Complex ComplexNumbersModule::runOperatorASSIGN(const qreal x)