fixes (debugging)

This commit is contained in:
ProgramSnail 2023-05-21 17:00:59 +03:00
parent e6a03ef9bf
commit f2192b5331
6 changed files with 85 additions and 16 deletions

View file

@ -8,6 +8,7 @@
#include <unordered_map> #include <unordered_map>
// for clangd // for clangd
#include "error_handling.hpp"
#include "utils.hpp" #include "utils.hpp"
namespace info::type { namespace info::type {
@ -49,6 +50,11 @@ public:
} }
bool HasTypeclass(utils::IdType graph_id) { bool HasTypeclass(utils::IdType graph_id) {
error_handling::DebugPrint(name_);
error_handling::DebugPrint(requirement_graph_ids_.size());
for (auto& requirement_graph_id : requirement_graph_ids_) {
error_handling::DebugPrint(requirement_graph_id);
}
return requirement_graph_ids_.count(graph_id) != 0; return requirement_graph_ids_.count(graph_id) != 0;
} }

View file

@ -69,21 +69,21 @@ inline bool IsBuiltinFunction(const std::string& name) { // optimize ??
builtin_functions.insert("+="); builtin_functions.insert("+=");
builtin_functions.insert("-="); builtin_functions.insert("-=");
builtin_functions.insert("*="); builtin_functions.insert("*=");
builtin_functions.insert("//="); builtin_functions.insert("div");
builtin_functions.insert("%="); builtin_functions.insert("mod");
builtin_functions.insert("/="); builtin_functions.insert("/=");
builtin_functions.insert("+"); // builtin_functions.insert("+");
builtin_functions.insert("-"); // builtin_functions.insert("-");
builtin_functions.insert("*"); // builtin_functions.insert("*");
builtin_functions.insert("//"); // builtin_functions.insert("/");
builtin_functions.insert("%");
builtin_functions.insert("/");
builtin_functions.insert("&&"); builtin_functions.insert("&&");
builtin_functions.insert("||"); builtin_functions.insert("||");
builtin_functions.insert("size"); builtin_functions.insert("size");
builtin_functions.insert("random"); builtin_functions.insert("random");
builtin_functions.insert("print"); builtin_functions.insert("print");
builtin_functions.insert("scan"); builtin_functions.insert("scan");
builtin_functions.insert("zero");
builtin_functions.insert("one");
return builtin_functions.count(name) != 0; return builtin_functions.count(name) != 0;
} }

View file

@ -902,7 +902,7 @@ void BuildVisitor::VisitBinaryOperatorExpression(FunctionCallExpression* node) {
FunctionCallExpression* argument_node = std::get<std::unique_ptr<FunctionCallExpression>>(node->arguments[i]).get(); FunctionCallExpression* argument_node = std::get<std::unique_ptr<FunctionCallExpression>>(node->arguments[i]).get();
if (argument_node->is_binary_operator_expression if (argument_node->is_binary_operator_expression
&& argument_node->precedence.has_value() && argument_node->precedence.has_value()
&& argument_node->precedence.value() >= node->precedence.value()) { && argument_node->precedence.value() == node->precedence.value()) {
error_handling::HandleParsingError("Operators can't be chained (left argument)", node->base.start_position, node->base.end_position); error_handling::HandleParsingError("Operators can't be chained (left argument)", node->base.start_position, node->base.end_position);
} }
} }

Binary file not shown.

0
tests/stdlib.lang Normal file
View file

View file

@ -1,7 +1,7 @@
basic (Float : #Ord) basic (Float : #Ord #Div)
basic (Int : #Ord) basic (Int : #Ord #IDiv)
basic (String : #Ord) basic (String : #Ord)
basic (Char : #Ord) basic (Char : #Ord #Enum)
basic (Bool : #Ord) basic (Bool : #Ord)
basic Unit basic Unit
@ -33,7 +33,70 @@ def ( || ) : x y =
| false -> false | false -> false
) )
// Eq typeclass //
typeclass Move =
& var ( <- ) : Move -> Unit // TODO
typeclass Copy =
& var ( = ) : Copy -> Unit
//
typeclass (Sum : #Copy) =
& var ( += ) : Sum -> Unit
& var ( -= ) : Sum -> Unit
& var ( + ) : Sum -> Sum
& var ( - ) : Sum -> Sum
& zero : -> Sum
namespace var Sum {
def ( + ) : x = {
var ans = self
; ans += x
return ans
}
def ( - ) : x = {
var ans = self
; ans -= x
return ans
}
}
typeclass (Mult : #Sum) =
& var ( *= ) : Mult -> Unit
& var ( * ) : Mult -> Mult
namespace var Mult {
def ( * ) : x = {
var ans = self
; ans *= x
return ans
}
}
typeclass (IDiv : #Mult) =
& var div : IDiv -> Unit
& var mod : IDiv -> Unit
namespace var IDiv {
def mod : x = self -. x * self.div: x
}
typeclass (Div : #Mult) =
& var ( /= ) : Div -> Unit
& var ( / ) : Div -> Div
namespace var Div {
def ( / ) : x = {
var ans = self
; ans /= x
return ans
}
}
//
typeclass Eq = typeclass Eq =
& var ( == ) : Eq -> Bool & var ( == ) : Eq -> Bool
@ -82,8 +145,8 @@ typeclass Show =
typeclass Read = typeclass Read =
& var read : String -> Read & var read : String -> Read
typeclass Debug = typeclass DebugShow =
& debug : -> String & debug_show : -> String
// //
@ -141,7 +204,7 @@ def func : s = {
} }
exec main { exec main {
for i in (,0 ,1 ,2 ,3) do func: "abacaba" for i in 0--9 do func: "abacaba"
; print: ({ ; print: ({
if true then bring scan: else { ; print: "aaa" } if true then bring scan: else { ; print: "aaa" }
bring "nothing" bring "nothing"