Compare commits
	
		
			2 Commits
		
	
	
		
			17c5486551
			...
			7ee084385c
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 7ee084385c | |||
| d32d92e241 | 
							
								
								
									
										19
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | |||||||
|  | CPPFLAGS := -std=c++11 `llvm-config-7.0-64 --cppflags --ldflags --libs --system-libs all` | ||||||
|  | CC := g++ | ||||||
|  | TARGET := lily | ||||||
|  | 
 | ||||||
|  | # $(wildcard *.cpp /xxx/xxx/*.cpp): get all .cpp files from the current directory and dir "/xxx/xxx/"
 | ||||||
|  | SRCS := $(wildcard src/*.cpp) | ||||||
|  | # # $(patsubst %.cpp,%.o,$(SRCS)): substitute all ".cpp" file name strings to ".o" file name strings
 | ||||||
|  | OBJS := $(patsubst src/%.cpp,%.o,$(SRCS)) | ||||||
|  | 
 | ||||||
|  | all: $(TARGET) | ||||||
|  | $(TARGET): $(OBJS) parser-c.o | ||||||
|  | 	$(CC) $(CPPFLAGS) -o $@ $^ | ||||||
|  | %.o: src/%.cpp | ||||||
|  | 	$(CC) $(CPPFLAGS) -c $< | ||||||
|  | clean: | ||||||
|  | 	rm -rf $(TARGET) *.o | ||||||
|  | parser-c.o: | ||||||
|  | 	gcc -c -o parser-c.o src/parser.c | ||||||
|  | .PHONY: all clean | ||||||
| @ -15,12 +15,12 @@ namespace lily { | |||||||
| 
 | 
 | ||||||
|     struct instruction_slide : instruction { |     struct instruction_slide : instruction { | ||||||
|         int amount; |         int amount; | ||||||
|          | 
 | ||||||
|         instruction_slide(int a) : amount(a) {} |         instruction_slide(int a) : amount(a) {} | ||||||
|         std::ostream& to_stream(std::ostream& os); |         std::ostream& to_stream(std::ostream& os); | ||||||
|         void gen_llvm(llvm_context& ctx); |         void gen_llvm(llvm_context& ctx); | ||||||
|     }; |     }; | ||||||
|      | 
 | ||||||
|     struct instruction_alloc : instruction { |     struct instruction_alloc : instruction { | ||||||
|         int amount; |         int amount; | ||||||
| 
 | 
 | ||||||
| @ -44,7 +44,7 @@ namespace lily { | |||||||
| 
 | 
 | ||||||
|     struct instruction_push_global : instruction { |     struct instruction_push_global : instruction { | ||||||
|         std::string name; |         std::string name; | ||||||
|          | 
 | ||||||
|         instruction_push_global(std::string n) : name(std::move(n)) {} |         instruction_push_global(std::string n) : name(std::move(n)) {} | ||||||
|         std::ostream& to_stream(std::ostream& os); |         std::ostream& to_stream(std::ostream& os); | ||||||
|         void gen_llvm(llvm_context& ctx); |         void gen_llvm(llvm_context& ctx); | ||||||
| @ -145,7 +145,7 @@ namespace lily { | |||||||
|         public: |         public: | ||||||
|             template <typename T, typename ... Ts> |             template <typename T, typename ... Ts> | ||||||
|             T* add_instruction(Ts ... ts) { |             T* add_instruction(Ts ... ts) { | ||||||
|                 auto new_inst = std::make_unique<T>(ts...); |                 auto new_inst = std::unique_ptr<T>(new T(ts...)); | ||||||
|                 T* raw = new_inst.get(); |                 T* raw = new_inst.get(); | ||||||
|                 instructions.push_back(std::move(new_inst)); |                 instructions.push_back(std::move(new_inst)); | ||||||
|                 return raw; |                 return raw; | ||||||
|  | |||||||
| @ -117,7 +117,7 @@ namespace lily { | |||||||
|         ast_case* new_case = new ast_case(); |         ast_case* new_case = new ast_case(); | ||||||
|         ast_ptr case_ptr = ast_ptr(new_case); |         ast_ptr case_ptr = ast_ptr(new_case); | ||||||
|         new_case->of = expr_tree(PGS_TREE_NT_CHILD(*c, 1), source); |         new_case->of = expr_tree(PGS_TREE_NT_CHILD(*c, 1), source); | ||||||
|          | 
 | ||||||
|         pgs_tree* branches = PGS_TREE_NT_CHILD(*c, 4); |         pgs_tree* branches = PGS_TREE_NT_CHILD(*c, 4); | ||||||
|         while(PGS_TREE_NT_COUNT(*branches) == 2) { |         while(PGS_TREE_NT_COUNT(*branches) == 2) { | ||||||
|             pgs_tree* branch = PGS_TREE_NT_CHILD(*branches, 0); |             pgs_tree* branch = PGS_TREE_NT_CHILD(*branches, 0); | ||||||
| @ -216,7 +216,7 @@ namespace lily { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     static program_ptr build_program(pgs_tree* tree, const char* source) { |     static program_ptr build_program(pgs_tree* tree, const char* source) { | ||||||
|         program_ptr prog = std::make_unique<program>(); |         program_ptr prog = std::unique_ptr<program>(new program); | ||||||
|         pgs_tree* program = PGS_TREE_NT_CHILD(*tree, 0); |         pgs_tree* program = PGS_TREE_NT_CHILD(*tree, 0); | ||||||
| 
 | 
 | ||||||
|         do { |         do { | ||||||
| @ -239,7 +239,7 @@ namespace lily { | |||||||
|         if((err = pgs_do_all(&state, &into, s.c_str())) != PGS_NONE) { |         if((err = pgs_do_all(&state, &into, s.c_str())) != PGS_NONE) { | ||||||
|             throw error("failed to parse input string"); |             throw error("failed to parse input string"); | ||||||
|         } |         } | ||||||
|          | 
 | ||||||
|         program_ptr prog = build_program(into, s.c_str()); |         program_ptr prog = build_program(into, s.c_str()); | ||||||
|         prog->check(); |         prog->check(); | ||||||
|         pgs_free_tree(into); |         pgs_free_tree(into); | ||||||
|  | |||||||
| @ -4,7 +4,7 @@ | |||||||
| namespace lily { | namespace lily { | ||||||
|     type_data::constructor* type_data::create_constructor(const std::string& name, |     type_data::constructor* type_data::create_constructor(const std::string& name, | ||||||
|             std::vector<type*>&& params) { |             std::vector<type*>&& params) { | ||||||
|         auto new_constructor = std::make_unique<constructor>(); |         auto new_constructor = std::unique_ptr<constructor>(new constructor()); | ||||||
|         new_constructor->id = constructors.size(); |         new_constructor->id = constructors.size(); | ||||||
|         new_constructor->parent = this; |         new_constructor->parent = this; | ||||||
|         new_constructor->params = std::move(params); |         new_constructor->params = std::move(params); | ||||||
|  | |||||||
| @ -2,6 +2,7 @@ | |||||||
| #include <string> | #include <string> | ||||||
| #include <vector> | #include <vector> | ||||||
| #include <map> | #include <map> | ||||||
|  | #include <memory> | ||||||
| 
 | 
 | ||||||
| namespace lily { | namespace lily { | ||||||
|     enum reserved_types { |     enum reserved_types { | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| #pragma once | #pragma once | ||||||
| #include <map> | #include <map> | ||||||
|  | #include <memory> | ||||||
| #include "type.hpp" | #include "type.hpp" | ||||||
| #include "ast.hpp" | #include "ast.hpp" | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -12,7 +12,7 @@ namespace lily { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     type_internal* type_manager::create_int_type() { |     type_internal* type_manager::create_int_type() { | ||||||
|         auto new_type = std::make_unique<type_internal>(next_id++); |         auto new_type = std::unique_ptr<type_internal>(new type_internal(next_id++)); | ||||||
|         type_internal* raw_ptr = new_type.get(); |         type_internal* raw_ptr = new_type.get(); | ||||||
|         types.push_back(std::move(new_type)); |         types.push_back(std::move(new_type)); | ||||||
|         type_names["Int"] = raw_ptr; |         type_names["Int"] = raw_ptr; | ||||||
| @ -20,7 +20,7 @@ namespace lily { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     type_internal* type_manager::create_str_type() { |     type_internal* type_manager::create_str_type() { | ||||||
|         auto new_type = std::make_unique<type_internal>(next_id++); |         auto new_type = std::unique_ptr<type_internal>(new type_internal(next_id++)); | ||||||
|         type_internal* raw_ptr = new_type.get(); |         type_internal* raw_ptr = new_type.get(); | ||||||
|         types.push_back(std::move(new_type)); |         types.push_back(std::move(new_type)); | ||||||
|         type_names["Str"] = raw_ptr; |         type_names["Str"] = raw_ptr; | ||||||
| @ -29,7 +29,7 @@ namespace lily { | |||||||
| 
 | 
 | ||||||
|     type_data* type_manager::create_data_type(const std::string& name) { |     type_data* type_manager::create_data_type(const std::string& name) { | ||||||
|         if(type_names.count(name)) throw error("redefinition of type"); |         if(type_names.count(name)) throw error("redefinition of type"); | ||||||
|         auto new_type = std::make_unique<type_data>(next_id++); |         auto new_type = std::unique_ptr<type_data>(new type_data(next_id++)); | ||||||
|         type_data* raw_ptr = new_type.get(); |         type_data* raw_ptr = new_type.get(); | ||||||
|         types.push_back(std::move(new_type)); |         types.push_back(std::move(new_type)); | ||||||
|         type_names[name] = raw_ptr; |         type_names[name] = raw_ptr; | ||||||
|  | |||||||
| @ -21,7 +21,7 @@ namespace lily { | |||||||
|             type_data* create_data_type(const std::string& name); |             type_data* create_data_type(const std::string& name); | ||||||
|             template <typename T, typename ... Args> |             template <typename T, typename ... Args> | ||||||
|             T* create_type(Args...as) { |             T* create_type(Args...as) { | ||||||
|                 auto new_type = std::make_unique<T>(as...); |                 auto new_type = std::unique_ptr<T>(new T(as...)); | ||||||
|                 T* raw_ptr = new_type.get(); |                 T* raw_ptr = new_type.get(); | ||||||
|                 types.push_back(std::move(new_type)); |                 types.push_back(std::move(new_type)); | ||||||
|                 return raw_ptr; |                 return raw_ptr; | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user