tomo/typecheck.h

34 lines
1.3 KiB
C
Raw Normal View History

2024-02-17 14:00:21 -08:00
#pragma once
2024-03-18 09:49:38 -07:00
// Type-checking functions
2024-02-17 14:00:21 -08:00
#include <gc.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include "ast.h"
#include "environment.h"
#include "stdlib/datatypes.h"
2024-02-17 14:00:21 -08:00
#include "types.h"
type_t *parse_type_ast(env_t *env, type_ast_t *ast);
type_t *get_type(env_t *env, ast_t *ast);
2024-05-14 10:30:46 -07:00
void prebind_statement(env_t *env, ast_t *statement);
2024-02-17 14:00:21 -08:00
void bind_statement(env_t *env, ast_t *statement);
PUREFUNC type_t *get_math_type(env_t *env, ast_t *ast, type_t *lhs_t, type_t *rhs_t);
PUREFUNC bool is_discardable(env_t *env, ast_t *ast);
2024-02-22 10:35:28 -08:00
type_t *get_function_def_type(env_t *env, ast_t *ast);
2024-02-24 11:29:40 -08:00
type_t *get_arg_type(env_t *env, arg_t *arg);
type_t *get_arg_ast_type(env_t *env, arg_ast_t *arg);
env_t *when_clause_scope(env_t *env, type_t *subject_t, when_clause_t *clause);
type_t *get_clause_type(env_t *env, type_t *subject_t, when_clause_t *clause);
PUREFUNC bool can_be_mutated(env_t *env, ast_t *ast);
2024-02-29 10:28:39 -08:00
type_t *parse_type_string(env_t *env, const char *str);
2024-02-29 10:49:24 -08:00
type_t *get_method_type(env_t *env, ast_t *self, const char *name);
PUREFUNC bool is_constant(env_t *env, ast_t *ast);
Table_t *get_arg_bindings(env_t *env, arg_t *spec_args, arg_ast_t *call_args, bool promotion_allowed);
bool is_valid_call(env_t *env, arg_t *spec_args, arg_ast_t *call_args, bool promotion_allowed);
2024-02-17 14:00:21 -08:00
// vim: ts=4 sw=0 et cino=L2,l1,(0,W4,m1,\:0