linux fixes

This commit is contained in:
Felix Brendel
2018-10-29 12:54:23 +01:00
parent f91a69c69e
commit 716b72ff0f
4 changed files with 174 additions and 169 deletions
+3 -1
View File
@@ -2,5 +2,7 @@ clang src/main.c -g -o ./bin/slime --std=c99 || exit 1
echo "" echo ""
echo "--- Output Start ---" echo "--- Output Start ---"
./bin/slime pushd bin
./slime
popd
echo "--- Output End ---" echo "--- Output End ---"
+1
View File
@@ -18,6 +18,7 @@ bool ast_node_equal(Ast_Node* n1, Ast_Node* n2) {
return string_equal( return string_equal(
n1->value.keyword->identifier, n1->value.keyword->identifier,
n2->value.keyword->identifier); n2->value.keyword->identifier);
case Ast_Node_Type_T:
case Ast_Node_Type_Nil: case Ast_Node_Type_Nil:
return true; return true;
case Ast_Node_Type_Number: case Ast_Node_Type_Number:
+1 -1
View File
@@ -63,7 +63,7 @@ void define_symbol(Ast_Node* symbol, Ast_Node* value, Environment* env) {
} }
void define_macro_symbol(Ast_Node* symbol, Ast_Node* value, Environment* env) { void define_macro_symbol(Ast_Node* symbol, Ast_Node* value, Environment* env) {
if (!env->type == Environment_Type_Macro) { if (env->type != Environment_Type_Macro) {
create_error(Error_Type_Unknown_Error, symbol); create_error(Error_Type_Unknown_Error, symbol);
return; return;
} }
+5 -3
View File
@@ -139,7 +139,7 @@ Ast_Node* apply_arguments_to_function(Ast_Node* arguments, Function* function, E
} }
} }
eval_time: eval_time: {
Ast_Node* result; Ast_Node* result;
// don't have to check every time if it is macro environment or // don't have to check every time if it is macro environment or
@@ -154,6 +154,7 @@ Ast_Node* apply_arguments_to_function(Ast_Node* arguments, Function* function, E
free(new_env); free(new_env);
return result; return result;
} }
}
/* /*
(prog (prog
@@ -433,8 +434,8 @@ Ast_Node* eval_expr(Ast_Node* node, Environment* env) {
// just make sure type was not redefined and // just make sure type was not redefined and
// returns something that is not a keyword // returns something that is not a keyword
if (type->type == Ast_Node_Type_Keyword && if (type->type == Ast_Node_Type_Keyword &&
string_equal(type->value.keyword->identifier, "dynamic-function") || (string_equal(type->value.keyword->identifier, "dynamic-function") ||
string_equal(type->value.keyword->identifier, "dynamic-macro")) string_equal(type->value.keyword->identifier, "dynamic-macro")))
{ {
Ast_Node* fun = eval_expr(arguments->value.pair->first, env); Ast_Node* fun = eval_expr(arguments->value.pair->first, env);
printf("\nMacro? %s\n", (fun->value.function->is_macro) ? "yes" : "no"); printf("\nMacro? %s\n", (fun->value.function->is_macro) ? "yes" : "no");
@@ -866,6 +867,7 @@ Ast_Node* eval_expr(Ast_Node* node, Environment* env) {
} }
case Ast_Node_Type_Keyword: return create_ast_node_keyword("keyword"); case Ast_Node_Type_Keyword: return create_ast_node_keyword("keyword");
case Ast_Node_Type_Nil: return create_ast_node_keyword("nil"); case Ast_Node_Type_Nil: return create_ast_node_keyword("nil");
case Ast_Node_Type_T: return create_ast_node_keyword("t");
case Ast_Node_Type_Number: return create_ast_node_keyword("number"); case Ast_Node_Type_Number: return create_ast_node_keyword("number");
case Ast_Node_Type_Pair: return create_ast_node_keyword("pair"); case Ast_Node_Type_Pair: return create_ast_node_keyword("pair");
case Ast_Node_Type_String: return create_ast_node_keyword("string"); case Ast_Node_Type_String: return create_ast_node_keyword("string");