Skip to content

Commit 79ea293

Browse files
committed
Integrated symbol table into language + retired LinkedListSetOrAddValue
1 parent df09b97 commit 79ea293

File tree

4 files changed

+12
-75
lines changed

4 files changed

+12
-75
lines changed

linkedlist.h

Lines changed: 0 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -123,43 +123,6 @@ struct LinkedListSetValue<A<OldID, OldValue, T>, LookupID, NewValue> {
123123

124124
};
125125

126-
// template<string_literal LookupID, auto NewValue>
127-
// struct LinkedListSetValue<LinkedListEmptyNode, LookupID, NewValue> {
128-
// using newList = LinkedListNode<OldID, OldValue>;
129-
130-
// };
131-
132-
/*
133-
Either sets value if it exists or adds new one
134-
Helper function that combines set and add functionality into one
135-
136-
*/
137-
138-
template<typename T, string_literal LookupID, auto NewValue>
139-
struct LinkedListSetOrAddValue {
140-
using newList = T;
141-
};
142-
143-
144-
//end case couldn't find a value
145-
template<string_literal LookupID, auto NewValue>
146-
struct LinkedListSetOrAddValue<LinkedListEmptyNode, LookupID, NewValue> {
147-
using newList = LinkedListNode<LookupID, NewValue>;
148-
};
149-
150-
151-
//match case
152-
template<template <string_literal, auto, typename> typename A, string_literal OldID, auto OldValue, typename T, auto NewValue>
153-
struct LinkedListSetOrAddValue<A<OldID, OldValue, T>, OldID, NewValue> {
154-
using newList = LinkedListNode<OldID, NewValue, T>;
155-
};
156-
157-
template<template <string_literal, auto, typename> typename A, string_literal OldID, auto OldValue, typename T, string_literal LookupID, auto NewValue>
158-
struct LinkedListSetOrAddValue<A<OldID, OldValue, T>, LookupID, NewValue> {
159-
using extract = LinkedListSetOrAddValue<T, LookupID, NewValue>::newList;
160-
using newList = LinkedListNode<OldID, OldValue, extract>;
161-
162-
};
163126

164127

165128
void runLinkedListTests() {
@@ -211,20 +174,4 @@ void runLinkedListTests() {
211174
//n cases
212175
static_assert(std::is_same_v<LinkedListNode<"a", 3, LinkedListNode<"b", 4, LinkedListNode<"c", 9, LinkedListNode<"d", 12>>>>, LinkedListAddValue<storageN, "d", 12>::newList>);
213176

214-
215-
// set or add tests
216-
217-
//0 cases
218-
static_assert(std::is_same_v<LinkedListNode<"a", 40>, LinkedListSetOrAddValue<storage0, "a", 40>::newList>);
219-
220-
//1 cases
221-
static_assert(std::is_same_v<LinkedListNode<"a", 40>, LinkedListSetOrAddValue<storage1, "a", 40>::newList>);
222-
static_assert(std::is_same_v<LinkedListNode<"a", 3, LinkedListNode<"b", 40>>, LinkedListSetOrAddValue<storage1, "b", 40>::newList>); //add case
223-
224-
//n cases
225-
static_assert(std::is_same_v<LinkedListNode<"a", 40, LinkedListNode<"b", 4, LinkedListNode<"c", 9>>>, LinkedListSetOrAddValue<storageN, "a", 40>::newList>);
226-
static_assert(std::is_same_v<LinkedListNode<"a", 3, LinkedListNode<"b", 40, LinkedListNode<"c", 9>>>, LinkedListSetOrAddValue<storageN, "b", 40>::newList>);
227-
static_assert(std::is_same_v<LinkedListNode<"a", 3, LinkedListNode<"b", 4, LinkedListNode<"c", 40>>>, LinkedListSetOrAddValue<storageN, "c", 40>::newList>);
228-
static_assert(std::is_same_v<LinkedListNode<"a", 3, LinkedListNode<"b", 4, LinkedListNode<"c", 9, LinkedListNode<"d", 40>>>>, LinkedListSetOrAddValue<storageN, "d", 40>::newList>); //invalid case
229-
230177
}

main

0 Bytes
Binary file not shown.

main.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ int main(int argc, char* argv[])
3939
bool = !true
4040
*/
4141

42-
using code = Execute<LinkedListEmptyNode,
42+
using code = Execute<TypeStackEmptyNode,
4343
Assign<"x", Val<6>>,
4444
Assign<"y", Apply<std::plus<>, Val<2>, Var<"x">>>,
4545
Assign<"z", Apply<std::plus<>, Apply<std::multiplies<>, Var<"y">, Val<10>>, Val<7>>>,
@@ -49,12 +49,12 @@ int main(int argc, char* argv[])
4949
//If<Val<true>,
5050
//Assign<"g", Val<5>>>>;
5151

52-
static_assert(LinkedListGetValue<code::values, "x">::value == 6);
53-
static_assert(LinkedListGetValue<code::values, "y">::value == 8);
54-
static_assert(LinkedListGetValue<code::values, "z">::value == 87);
52+
static_assert(SymbolTableGetValue<NONE, code::values, "x">::value == 6);
53+
static_assert(SymbolTableGetValue<NONE, code::values, "y">::value == 8);
54+
static_assert(SymbolTableGetValue<NONE, code::values, "z">::value == 87);
5555
constexpr string_literal teststring = "Hello World!";
56-
static_assert(LinkedListGetValue<code::values, "text2">::value == teststring);
57-
static_assert(!LinkedListGetValue<code::values, "bool">::value);
56+
static_assert(SymbolTableGetValue<NONE, code::values, "text2">::value == teststring);
57+
static_assert(!SymbolTableGetValue<NONE, code::values, "bool">::value);
5858

5959

6060

node.h

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
#include "symboltable.h"
22

3-
4-
5-
63
/*
74
Contains all the valid AST nodes for our language.
85
*/
@@ -41,7 +38,7 @@ struct Var {
4138

4239
template<typename SymbolTable>
4340
static const constexpr auto getValue() {
44-
return LinkedListGetValue<SymbolTable, VarName>::value;
41+
return SymbolTableGetValue<NONE, SymbolTable, VarName>::value;
4542
}
4643
};
4744

@@ -67,9 +64,9 @@ struct If {
6764

6865

6966

70-
template<string_literal VarName, typename Value, typename SymbolTable = LinkedListEmptyNode>
67+
template<string_literal VarName, typename Value, typename SymbolTable = TypeStackEmptyNode>
7168
struct Assign {
72-
using UpdatedSymbolTable = LinkedListSetOrAddValue<SymbolTable, VarName, Value::template getValue<SymbolTable>()>::newList;
69+
using UpdatedSymbolTable = SymbolTableDeclareOrAssignVariable<SymbolTable, VarName, Value::template getValue<SymbolTable>()>::newStack;
7370
};
7471

7572

@@ -84,19 +81,12 @@ struct Execute {
8481

8582

8683
// match assign node
87-
template <typename SymbolTable, template <string_literal, typename> typename AssignNode, string_literal VarName, typename Value, typename... Statements>
84+
template <typename SymbolTable,
85+
template <string_literal, typename> typename AssignNode, string_literal VarName, typename Value,
86+
typename... Statements>
8887
struct Execute<SymbolTable, AssignNode<VarName, Value>, Statements...> {
8988

9089
using TempTable = Assign<VarName, Value, SymbolTable>::UpdatedSymbolTable;
9190
using values = Execute<TempTable, Statements...>::values;
9291
};
9392

94-
// match assign node
95-
// template <typename SymbolTable, template <string_literal, typename> typename AssignNode, string_literal VarName, typename Value, typename... Statements>
96-
// struct Execute<SymbolTable, AssignNode<VarName, Value>, Statements...> {
97-
98-
// using TempTable = Assign<VarName, Value, SymbolTable>::UpdatedSymbolTable;
99-
// using values = Execute<TempTable, Statements...>::values;
100-
// };
101-
102-

0 commit comments

Comments
 (0)