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 ""
|
||||||
echo "--- Output Start ---"
|
echo "--- Output Start ---"
|
||||||
./bin/slime
|
pushd bin
|
||||||
|
./slime
|
||||||
|
popd
|
||||||
echo "--- Output End ---"
|
echo "--- Output End ---"
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
@@ -153,6 +153,7 @@ Ast_Node* apply_arguments_to_function(Ast_Node* arguments, Function* function, E
|
|||||||
|
|
||||||
free(new_env);
|
free(new_env);
|
||||||
return result;
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -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");
|
||||||
|
|||||||
Reference in New Issue
Block a user