linux fixes
This commit is contained in:
@@ -2,5 +2,7 @@ clang src/main.c -g -o ./bin/slime --std=c99 || exit 1
|
||||
|
||||
echo ""
|
||||
echo "--- Output Start ---"
|
||||
./bin/slime
|
||||
pushd bin
|
||||
./slime
|
||||
popd
|
||||
echo "--- Output End ---"
|
||||
|
||||
@@ -18,6 +18,7 @@ bool ast_node_equal(Ast_Node* n1, Ast_Node* n2) {
|
||||
return string_equal(
|
||||
n1->value.keyword->identifier,
|
||||
n2->value.keyword->identifier);
|
||||
case Ast_Node_Type_T:
|
||||
case Ast_Node_Type_Nil:
|
||||
return true;
|
||||
case Ast_Node_Type_Number:
|
||||
|
||||
@@ -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) {
|
||||
if (!env->type == Environment_Type_Macro) {
|
||||
if (env->type != Environment_Type_Macro) {
|
||||
create_error(Error_Type_Unknown_Error, symbol);
|
||||
return;
|
||||
}
|
||||
|
||||
+5
-3
@@ -139,7 +139,7 @@ Ast_Node* apply_arguments_to_function(Ast_Node* arguments, Function* function, E
|
||||
}
|
||||
}
|
||||
|
||||
eval_time:
|
||||
eval_time: {
|
||||
Ast_Node* result;
|
||||
|
||||
// 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);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
(prog
|
||||
@@ -433,8 +434,8 @@ Ast_Node* eval_expr(Ast_Node* node, Environment* env) {
|
||||
// just make sure type was not redefined and
|
||||
// returns something that is not a keyword
|
||||
if (type->type == Ast_Node_Type_Keyword &&
|
||||
string_equal(type->value.keyword->identifier, "dynamic-function") ||
|
||||
string_equal(type->value.keyword->identifier, "dynamic-macro"))
|
||||
(string_equal(type->value.keyword->identifier, "dynamic-function") ||
|
||||
string_equal(type->value.keyword->identifier, "dynamic-macro")))
|
||||
{
|
||||
Ast_Node* fun = eval_expr(arguments->value.pair->first, env);
|
||||
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_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_Pair: return create_ast_node_keyword("pair");
|
||||
case Ast_Node_Type_String: return create_ast_node_keyword("string");
|
||||
|
||||
Reference in New Issue
Block a user