00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050 #ifndef NARU_H
00051 #define NARU_H
00052 #ifdef __cplusplus
00053 extern "C" {
00054 #endif
00055 #include <stdint.h>
00056
00060 typedef int nu_Scope;
00061
00065 #define nu_Scope_NULL -1
00066
00070 typedef struct nu_TypeSystemStruct* nu_TypeSystem;
00071
00075 typedef int nu_TypeId;
00076
00080 #define nu_TypeId_NULL -1
00081
00085 typedef enum {
00086 NU_OK=0,
00087 NU_ERROR_NOMEM=1,
00088 NU_ERROR_CONFLICT_RULE=2,
00089 NU_ERROR_CONFLICT_DECISION=3,
00090 NU_ERROR_CONFLICT_DUPLICATE_DEF=4,
00091 NU_ERROR_SYNTAX=5
00092 } nu_ErrorCode;
00093
00097 nu_TypeSystem nu_createTypeSystem(void);
00098
00102 void nu_destroyTypeSystem( nu_TypeSystem ts);
00103
00104
00112 nu_Scope nu_beginScope( nu_TypeSystem ts);
00113
00124 nu_Scope nu_declareScope( nu_TypeSystem ts);
00125
00132 int nu_endScope( nu_TypeSystem ts);
00133
00144 int nu_cmpScope( nu_TypeSystem ts, nu_Scope A, nu_Scope B);
00145
00156 int nu_sameScope( nu_TypeSystem ts, nu_Scope A, nu_Scope B);
00157
00165 int nu_scopeId( nu_TypeSystem ts, nu_Scope scope);
00166
00167
00181 nu_TypeId nu_declareType( nu_TypeSystem ts, nu_Scope scope, const char* id, uintptr_t tc, uintptr_t tcarg, nu_ErrorCode* errcode);
00182
00193 nu_TypeId nu_getType( nu_TypeSystem ts, nu_Scope scope, const char* id);
00194
00202 char* nu_getTypeName( nu_TypeSystem ts, nu_TypeId type);
00203
00212 uintptr_t nu_getTypeConstructor( nu_TypeSystem ts, nu_TypeId type, uintptr_t* tcarg);
00213
00232 int nu_declareRule( nu_TypeSystem ts, nu_Scope scope, nu_TypeId src, nu_TypeId dest, unsigned int cstord, unsigned int cst, uintptr_t tc, uintptr_t tcarg, nu_ErrorCode* errcode);
00233
00249 int nu_declareExpression( nu_TypeSystem ts, nu_Scope scope, unsigned int nof_tps, nu_TypeId* tps, nu_TypeId restype, uintptr_t tc, uintptr_t tcarg, nu_ErrorCode* errcode);
00250
00268 nu_TypeId nu_getExpressionType( nu_TypeSystem ts, nu_Scope scope, unsigned int nof_tps, nu_TypeId* tps, uintptr_t* tc, uintptr_t* tcarg);
00269
00294 int nu_resolveExpression( nu_TypeSystem ts, nu_Scope scope, unsigned int nof_tps, nu_TypeId* tps, nu_TypeId* resulttype, nu_ErrorCode* errcode);
00295
00308 int nu_getRuleConflict( nu_TypeSystem ts, nu_TypeId** path1, nu_TypeId** path2);
00309
00320 int nu_getDecisionConflict( nu_TypeSystem ts, nu_TypeId** expr1, nu_TypeId** expr2);
00321
00339 int nu_getElementConstructor( nu_TypeSystem ts, int result_handle, unsigned int tps_idx, int iter, uintptr_t* tc, uintptr_t* tcarg);
00340
00354 int nu_getResultConstructor( nu_TypeSystem ts, int result_handle, uintptr_t* tc, uintptr_t* tcarg);
00355
00361 void nu_clearResultBuffer( nu_TypeSystem ts);
00362
00363 #ifdef __cplusplus
00364 }
00365 #endif
00366 #endif
00367