Add make_fn_prototype function
This commit is contained in:
parent
13b067f803
commit
b00f3c222d
@ -19,6 +19,11 @@ Type type_type_to_type(TypeType type_type);
|
|||||||
*/
|
*/
|
||||||
Type string_to_type(string type_name);
|
Type string_to_type(string type_name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Turns a FunctionPrototype or FunctionDeclaration node into a FunctionPrototype object
|
||||||
|
*/
|
||||||
|
FunctionPrototype make_fn_prototype(InnerNode node);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Splits a string using the provided delimiter
|
* Splits a string using the provided delimiter
|
||||||
*/
|
*/
|
||||||
|
@ -140,22 +140,9 @@ EvalResult eval(Node &ast, Memory &memory) {
|
|||||||
case NodeType::FunctionPrototype: {
|
case NodeType::FunctionPrototype: {
|
||||||
Token retTypeTok = get<Token>(node.children[0]);
|
Token retTypeTok = get<Token>(node.children[0]);
|
||||||
Token fnIdentifierTok = get<Token>(node.children[1]);
|
Token fnIdentifierTok = get<Token>(node.children[1]);
|
||||||
string retTypeName = get<string>(retTypeTok.data);
|
|
||||||
string fnIdentifier = get<string>(fnIdentifierTok.data);
|
string fnIdentifier = get<string>(fnIdentifierTok.data);
|
||||||
|
|
||||||
Type retType = string_to_type(retTypeName);
|
FunctionPrototype prototype = make_fn_prototype(node);
|
||||||
vector<Node> args = get<InnerNode>(node.children[2]).children;
|
|
||||||
FunctionPrototype prototype = { { retType, "" } };
|
|
||||||
|
|
||||||
for (Node arg : args) {
|
|
||||||
InnerNode argInner = get<InnerNode>(arg);
|
|
||||||
Token typeTok = get<Token>(argInner.children[0]);
|
|
||||||
Token identifierTok = get<Token>(argInner.children[1]);
|
|
||||||
string typeName = get<string>(typeTok.data);
|
|
||||||
string identifier = get<string>(identifierTok.data);
|
|
||||||
Type type = string_to_type(typeName);
|
|
||||||
prototype.push_back({ type, identifier });
|
|
||||||
}
|
|
||||||
|
|
||||||
memory.declare(fnIdentifier, {
|
memory.declare(fnIdentifier, {
|
||||||
.type = TypeType::Function,
|
.type = TypeType::Function,
|
||||||
@ -167,22 +154,9 @@ EvalResult eval(Node &ast, Memory &memory) {
|
|||||||
case NodeType::FunctionDeclaration: {
|
case NodeType::FunctionDeclaration: {
|
||||||
Token retTypeTok = get<Token>(node.children[0]);
|
Token retTypeTok = get<Token>(node.children[0]);
|
||||||
Token fnIdentifierTok = get<Token>(node.children[1]);
|
Token fnIdentifierTok = get<Token>(node.children[1]);
|
||||||
string retTypeName = get<string>(retTypeTok.data);
|
|
||||||
string fnIdentifier = get<string>(fnIdentifierTok.data);
|
string fnIdentifier = get<string>(fnIdentifierTok.data);
|
||||||
|
|
||||||
Type retType = string_to_type(retTypeName);
|
FunctionPrototype prototype = make_fn_prototype(node);
|
||||||
vector<Node> args = get<InnerNode>(node.children[2]).children;
|
|
||||||
FunctionPrototype prototype = { { retType, "" } };
|
|
||||||
|
|
||||||
for (Node arg : args) {
|
|
||||||
InnerNode argInner = get<InnerNode>(arg);
|
|
||||||
Token typeTok = get<Token>(argInner.children[0]);
|
|
||||||
Token identifierTok = get<Token>(argInner.children[1]);
|
|
||||||
string typeName = get<string>(typeTok.data);
|
|
||||||
string identifier = get<string>(identifierTok.data);
|
|
||||||
Type type = string_to_type(typeName);
|
|
||||||
prototype.push_back({ type, identifier });
|
|
||||||
}
|
|
||||||
|
|
||||||
memory.declare(fnIdentifier, {
|
memory.declare(fnIdentifier, {
|
||||||
.type = TypeType::Function,
|
.type = TypeType::Function,
|
||||||
|
@ -35,6 +35,27 @@ Type string_to_type(string type_name) {
|
|||||||
throw exception();
|
throw exception();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FunctionPrototype make_fn_prototype(InnerNode node) {
|
||||||
|
Token retTypeTok = get<Token>(node.children[0]);
|
||||||
|
string retTypeName = get<string>(retTypeTok.data);
|
||||||
|
Type retType = string_to_type(retTypeName);
|
||||||
|
|
||||||
|
vector<Node> args = get<InnerNode>(node.children[2]).children;
|
||||||
|
FunctionPrototype prototype = { { retType, "" } };
|
||||||
|
|
||||||
|
for (Node arg : args) {
|
||||||
|
InnerNode argInner = get<InnerNode>(arg);
|
||||||
|
Token typeTok = get<Token>(argInner.children[0]);
|
||||||
|
Token identifierTok = get<Token>(argInner.children[1]);
|
||||||
|
string typeName = get<string>(typeTok.data);
|
||||||
|
string identifier = get<string>(identifierTok.data);
|
||||||
|
Type type = string_to_type(typeName);
|
||||||
|
prototype.push_back({ type, identifier });
|
||||||
|
}
|
||||||
|
|
||||||
|
return prototype;
|
||||||
|
}
|
||||||
|
|
||||||
vector<string> split_string(const string& input, char delimiter) {
|
vector<string> split_string(const string& input, char delimiter) {
|
||||||
vector<string> tokens;
|
vector<string> tokens;
|
||||||
string token;
|
string token;
|
||||||
|
Loading…
Reference in New Issue
Block a user