Added default pin connection rule
This commit is contained in:
parent
dfc7bf48dc
commit
7fcfb8c977
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE QtCreatorProject>
|
||||
<!-- Written by QtCreator 6.0.2, 2022-04-08T00:30:41. -->
|
||||
<!-- Written by QtCreator 6.0.2, 2022-04-08T23:43:55. -->
|
||||
<qtcreator>
|
||||
<data>
|
||||
<variable>EnvironmentId</variable>
|
||||
|
|
|
@ -402,7 +402,23 @@ optional<Pin> ComdelGenerator::loadPin(PinNode node)
|
|||
}
|
||||
auto connection = loadPinConnection(*node.connection);
|
||||
|
||||
return Pin(name, type, tooltip, connection, *display);
|
||||
std::optional<std::vector<Value>> wiresOpt = std::nullopt;
|
||||
if(node.wires.has_value()) {
|
||||
auto nodeWires = node.wires.value();
|
||||
std::vector<Value> wires;
|
||||
for(auto &nodeWire : nodeWires) {
|
||||
if(nodeWire.is(ValueNode::NIL)) {
|
||||
wires.push_back(Value::fromNull());
|
||||
} else if(nodeWire.is(ValueNode::INT)) {
|
||||
wires.push_back(Value::fromInt(nodeWire.asInt()));
|
||||
} else {
|
||||
errors.emplace_back(node.span, "unknown value type");
|
||||
}
|
||||
}
|
||||
wiresOpt = wires;
|
||||
}
|
||||
|
||||
return Pin(name, type, tooltip, connection, *display, wiresOpt);
|
||||
}
|
||||
|
||||
int getIntProperty(DisplayItemNode &node, std::string property) {
|
||||
|
|
|
@ -14,8 +14,8 @@ std::string PinConnection::getMessage() {
|
|||
}
|
||||
|
||||
|
||||
Pin::Pin(std::string name, PinType type, std::string tooltip, PinConnection connection, Display display)
|
||||
: name(name), type(type), tooltip(tooltip), connection(connection), display(display)
|
||||
Pin::Pin(std::string name, PinType type, std::string tooltip, PinConnection connection, Display display, std::optional<std::vector<Value>> wires)
|
||||
: name(name), type(type), tooltip(tooltip), connection(connection), display(display), wires(wires)
|
||||
{}
|
||||
|
||||
std::string Pin::getName() {
|
||||
|
@ -33,6 +33,9 @@ Display &Pin::getDisplay() {
|
|||
PinConnection &Pin::getConnection() {
|
||||
return connection;
|
||||
}
|
||||
std::optional<std::vector<Value>> &Pin::getWires() {
|
||||
return wires;
|
||||
}
|
||||
|
||||
|
||||
} // namespace domain
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#define DOMAIN_PIN_H
|
||||
|
||||
#include "display.h"
|
||||
#include "value.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
|
@ -44,14 +45,17 @@ private:
|
|||
PinConnection connection;
|
||||
Display display;
|
||||
|
||||
std::optional<std::vector<Value>> wires;
|
||||
|
||||
public:
|
||||
Pin(std::string name, PinType type, std::string tooltip, PinConnection connection, Display display);
|
||||
Pin(std::string name, PinType type, std::string tooltip, PinConnection connection, Display display, std::optional<std::vector<Value>> wires);
|
||||
|
||||
std::string getName();
|
||||
PinType getType();
|
||||
std::string getTooltip();
|
||||
Display &getDisplay();
|
||||
PinConnection &getConnection();
|
||||
std::optional<std::vector<Value>> &getWires();
|
||||
};
|
||||
|
||||
} // namespace domain
|
||||
|
|
|
@ -264,6 +264,7 @@ struct PinNode: AstNode
|
|||
std::optional<StringNode> tooltip;
|
||||
std::optional<PinConnectionNode> connection;
|
||||
std::optional<DisplayNode> display;
|
||||
std::optional<std::vector<ValueNode>> wires;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -634,6 +634,12 @@ PResult<PinNode> ComdelParser::parsePin() {
|
|||
ASSIGN_OR_RETURN_IF_ERR(pin.display, parseDisplay());
|
||||
} else if (check(TokenType::KW_CONNECTION)) {
|
||||
ASSIGN_OR_RETURN_IF_ERR(pin.connection, parsePinConnection());
|
||||
} else if (check(TokenType::KW_WIRES)){
|
||||
bump();
|
||||
auto wires = parseList<ValueNode>(std::optional<TokenType>(TokenType::LBRACE), TokenType::RBRACE, std::optional<TokenType>(TokenType::COMMA), false,
|
||||
[this] { return parseConnectionWire(); });
|
||||
RETURN_IF_ERR(wires);
|
||||
pin.wires = *wires;
|
||||
} else {
|
||||
return unexpected();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue