You can subscribe to this list here.
2004 |
Jan
|
Feb
|
Mar
(180) |
Apr
(20) |
May
|
Jun
(91) |
Jul
(78) |
Aug
(18) |
Sep
|
Oct
|
Nov
|
Dec
|
---|
From: Peep P. <so...@us...> - 2004-03-16 20:22:19
|
Update of /cvsroot/agd/server/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27662 Modified Files: compile_options.h Log Message: Added DEFAULT_FUNCTION_TYPE for functions with implicit return type. Index: compile_options.h =================================================================== RCS file: /cvsroot/agd/server/src/compile_options.h,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- compile_options.h 16 Mar 2004 14:07:37 -0000 1.9 +++ compile_options.h 16 Mar 2004 20:12:59 -0000 1.10 @@ -47,4 +47,8 @@ /* Define this if you want to enable debugging for the driver. */ #define DEBUG +/* The type a function has if one isn't specified (e.g. create() { } ) + * Must be one of T_VOID, T_STRING, T_OBJECT or T_INT. */ +#define DEFAULT_FUNCTION_TYPE T_VOID + #endif |
From: Peep P. <so...@us...> - 2004-03-16 20:21:59
|
Update of /cvsroot/agd/server/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27598 Modified Files: dfuns.c dfdecl.in Log Message: Added random() dfun. Index: dfuns.c =================================================================== RCS file: /cvsroot/agd/server/src/dfuns.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- dfuns.c 15 Mar 2004 18:44:09 -0000 1.11 +++ dfuns.c 16 Mar 2004 20:12:37 -0000 1.12 @@ -241,6 +241,15 @@ push_int(ret); } +void df_random(void) +{ + int i, j; + i = fp->u.i; + pop_stack(); + j = ((float)i * rand() / (RAND_MAX + 1.0)); + push_int(j); +} + void df_print_objs(void) { print_objs(); Index: dfdecl.in =================================================================== RCS file: /cvsroot/agd/server/src/dfdecl.in,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- dfdecl.in 12 Mar 2004 08:40:10 -0000 1.4 +++ dfdecl.in 16 Mar 2004 20:12:37 -0000 1.5 @@ -30,6 +30,7 @@ string platform() int uptime() string asctime(int) +int random(int) # objects void destruct(object) |
From: Peep P. <so...@us...> - 2004-03-16 20:21:41
|
Update of /cvsroot/agd/server/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27524 Modified Files: lang.y Log Message: Added trinary ?: operator; fixed implicit function return type Index: lang.y =================================================================== RCS file: /cvsroot/agd/server/src/lang.y,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- lang.y 16 Mar 2004 14:12:43 -0000 1.4 +++ lang.y 16 Mar 2004 20:12:21 -0000 1.5 @@ -6,8 +6,8 @@ YYLTYPE yylloc; /* Lexical tie-ins. */ -static int global_type - /*num_locals*/; /* So F_RETURN knows how much locals to pop. */ +static int global_type, + curr_f_type; extern int scope_level; void add_function(def_id_t *idp, int lineno, array_t *code); @@ -50,6 +50,7 @@ %left L_EQ L_NE %left L_PLUS L_MINUS %left L_MUL L_DIV L_MOD +%right '?' ':' %left L_DEREF /* L_DEREF _is_ a valid lval for call_other. i.e: ob->get_another_ob()->call(), as long as ob->get_another_ob() returns T_OBJECT. */ @@ -87,7 +88,6 @@ | type name_list ';' { add_variable(&$2, ID_GVAR); -/* free_array(&$2, (void (*)(void *))free_var);*/ global_type = 0; } ; @@ -114,6 +114,8 @@ $<id>$ = find_id($2); $<i>3 = 1; /* Means we just defined the prototype. */ } + + curr_f_type = $1; } '(' arguments ')' { @@ -145,21 +147,41 @@ char buf[256]; sprintf(buf, "definition doesn't match declaration for %s", $2); comp_error(buf); - /*goto out;*/ } idp->type = ID_FUN; - + if((int)$9.data[$9.length-1] != F_RETURN) { - if($1 != T_VOID) { + int warn = 0; + + switch(DEFAULT_FUNCTION_TYPE) { + case T_INT: + warn = 1; + array_push(&$9, (void *) F_PUSH_INT); + array_push(&$9, (void *) 0); + break; + case T_STRING: + warn = 1; + array_push(&$9, (void *) F_PUSH_STRING); + array_push(&$9, (void *) 0); + break; + case T_OBJECT: + warn = 1; + array_push(&$9, (void *) F_PUSH_NULL_OBJECT); + break; + case T_VOID: + array_push(&$9, (void *) F_PUSH_VOID); + break; + } + array_push(&$9, (void *) F_RETURN); + if(warn) { comp_error("control reaches end of non-void function"); - } else { - array_push(&$9, (void *) F_PUSH_VOID); - array_push(&$9, (void *) F_RETURN); } } add_function(idp, $<i>8, &$9); + + curr_f_type = 0; } else { def_id_t *idp = $<id>4; if(idp->type == ID_FUN_PROT && !$<i>3) { @@ -172,29 +194,120 @@ } } pop_scope(); -/* free_array(&$5, (void (*)(void *))free_var);*/ } - | L_IDENTIFIER + | L_IDENTIFIER { - comp_warning("return type defaults to int"); -/* $<i>$ = define_name(TYPE_FUN | SCOPE_LOCAL, $1, T_INT, NULL, 1);*/ + char buf[256]; + char *s; + switch(DEFAULT_FUNCTION_TYPE) { + case T_INT: s = "int"; break; + case T_STRING: s = "string"; break; + case T_VOID: s = "void"; break; + case T_OBJECT: s = "object"; break; + } + sprintf(buf, "warning: return type defaults to %s", s); + display_error(buf); + compile_warnings++; + /* Mid-rule action used only to store a value. + Feels hacky, but I don't want a global variable. + + 1 if the function declaration was just added; + 0 if it already existed. + Makes sense only in regard to the next action. */ + } + { + def_id_t *idp; + $<id>$ = idp = find_id($1); + if(idp) { + $<i>2 = 0; /* Means it already existed. */ + if(idp->type != ID_FUN_PROT) + redeclaration_error(idp, ID_FUN); + } else { + define_id($1, ID_FUN_PROT, DEFAULT_FUNCTION_TYPE, NULL); /* define_id could return id_t*. */ + $<id>$ = find_id($1); + $<i>2 = 1; /* Means we just defined the prototype. */ + } + + curr_f_type = DEFAULT_FUNCTION_TYPE; } '(' arguments ')' { -/* predeclare_function(T_INT, $1, &$4);*/ + def_id_t *idp; + int i; + idp = $<id>2; + idp->args = copy_array(&$5, NULL); + + scope_level++; + for(i=0;i<$5.length;i++) { + variable_t *v; + def_id_t *id; + v = $5.data[i]; + id = find_id(v->name); + if(id && id->base_scope >= scope_level) { + redeclaration_error(id, ID_ARG); + } else { + define_id(v->name, ID_ARG, v->type, NULL); + } + } + /*scope_level--;*/ $<i>$ = yylloc.line; } - block_or_semi + block_or_semi { -/* if($7.length) { - add_code(&$7); - add_function(T_INT, $1, $4, $<i>6); - } else if($<i>2 == 3) { - redefinition_error($1); - nametable_remove_cob(TYPE_FUN|SCOPE_LOCAL, $1); - }*/ -/* free_array(&$4, (void (*)(void *))free_var);*/ + if($8.length) { + def_id_t *idp = $<id>3; + if(idp->lpc_type != DEFAULT_FUNCTION_TYPE || compare_args(idp->args, &$5)) { + char buf[256]; + sprintf(buf, "definition doesn't match declaration for %s", $1); + comp_error(buf); + } + + idp->type = ID_FUN; + + if((int)$8.data[$8.length-1] != F_RETURN) { + int warn = 0; + + switch(DEFAULT_FUNCTION_TYPE) { + case T_INT: + warn = 1; + array_push(&$8, (void *) F_PUSH_INT); + array_push(&$8, (void *) 0); + break; + case T_STRING: + warn = 1; + array_push(&$8, (void *) F_PUSH_STRING); + array_push(&$8, (void *) 0); + break; + case T_OBJECT: + warn = 1; + array_push(&$8, (void *) F_PUSH_NULL_OBJECT); + break; + case T_VOID: + array_push(&$8, (void *) F_PUSH_VOID); + break; + array_push(&$8, (void *) F_RETURN); + if(warn) + comp_error("control reaches end of non-void function"); + } + } + + add_function(idp, $<i>7, &$8); + + curr_f_type = 0; + } else { + def_id_t *idp = $<id>3; + if(idp->type == ID_FUN_PROT && !$<i>2) { + char buf[256]; + sprintf(buf, "warning: repeated prototype for %s; using existing prototype", $1); + display_error(buf); + compile_warnings++; + } else { + add_function(idp, $<i>8, NULL); + } + } + pop_scope(); } + ; block_or_semi: @@ -214,21 +327,16 @@ { new_block_level(); } - local_vars - { -/* num_locals = $3.length;*/ - } - statements '}' + local_vars statements '}' { int i; - $$ = add_block(&$5); + $$ = add_block(&$4); if((int)$$.data[$$.length-1] != F_RETURN) { for(i=0;i<$3.length;i++) { /* Pop each local off the stack. */ array_push(&$$, (void *) F_POP); } } -/* num_locals = 0;*/ end_block_level(); } ; @@ -406,8 +514,7 @@ sprintf(buf, "warning: declaration of %s shadows function argument", $1); display_error(buf); compile_warnings++; - } else if(id->type == ID_DFUN - || id->base_scope >= scope_level) { + } else if(id->type == ID_DFUN || id->base_scope >= scope_level) { redeclaration_error(id, ID_LVAR); } } @@ -800,6 +907,24 @@ array_push(&$$.arr, (void *) F_PUSH_INT); array_push(&$$.arr, (void *) 0); } + | expr '?' expr ':' expr + { + $$.lval = $3.lval && $5.lval; + $$.side_effect = $3.side_effect || $5.side_effect; + $$.direct_type = 0; + $$.type = $3.type; + if($3.type != $5.type) { + comp_error("type mismatch"); + } + init_array(&$$.arr); + array_concat(&$$.arr, &$1.arr); + array_push(&$$.arr, (void *) F_JMPF); + array_push(&$$.arr, (void *) $3.arr.length + 3); + array_concat(&$$.arr, &$3.arr); + array_push(&$$.arr, (void *) F_JMP); + array_push(&$$.arr, (void *) $5.arr.length + 1); + array_concat(&$$.arr, &$5.arr); + } | string { $$.lval = $$.side_effect = 0; @@ -1193,13 +1318,16 @@ return: L_RETURN optional_expr { -/* int i;*/ + if(curr_f_type == T_VOID) { + if($2.arr.length) { + comp_error("return from a void function with a value"); + } + } else if($2.type != curr_f_type) { + comp_error("improper return type"); + } init_array(&$$); -/* for(i=0;i<num_locals;i++) { - array_push(&$$, (void *) F_POP); - }*/ - if(!$2.arr.length) { + if(!$2.arr.length) { array_push(&$$, (void *) F_PUSH_VOID); } else { array_concat(&$$, &$2.arr); |
From: Peep P. <so...@us...> - 2004-03-16 20:21:15
|
Update of /cvsroot/agd/server/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27426 Modified Files: main.c Log Message: Added call to srand(). Index: main.c =================================================================== RCS file: /cvsroot/agd/server/src/main.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- main.c 16 Mar 2004 14:13:03 -0000 1.10 +++ main.c 16 Mar 2004 20:11:46 -0000 1.11 @@ -168,7 +168,10 @@ atexit(mstats_summary); net_listen(conf.port); printf("Started at %s.\n", do_time()); + time(&startup_time); + srand(startup_time); + printf("Accepting connections on port %d.\n", conf.port); net_loop(); |
From: Peep P. <so...@us...> - 2004-03-16 20:19:07
|
Update of /cvsroot/agd/server/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26964 Removed Files: dfparse.output lang.output Log Message: Removed. --- dfparse.output DELETED --- --- lang.output DELETED --- |
From: Peep P. <so...@us...> - 2004-03-16 14:52:05
|
Update of /cvsroot/agd/server In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14998 Modified Files: TODO Log Message: Update. Index: TODO =================================================================== RCS file: /cvsroot/agd/server/TODO,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- TODO 16 Mar 2004 14:19:43 -0000 1.3 +++ TODO 16 Mar 2004 14:42:44 -0000 1.4 @@ -50,9 +50,10 @@ - more user-friendly error messages (yyerrors) - check for lib root and folder of debug log with access() and exit gracefully if it fails. - set string_type of all new string variables - default values for arguments + - default values for arguments int foo(int i, int j = 1); - string table for each program, and F_PUSH_STRING takes index into the table - clean up includes, not everything needs everything in std.h and lpc_incl.h, etc. - for div, mul and mod - if both sides are direct_type, calculate result at compile-time - compile-time eval for < > <= >= == != ! + - make maintainer-clean should also remove src/dfparse.output and src/lang.output |
From: Peep P. <so...@us...> - 2004-03-16 14:44:44
|
Update of /cvsroot/agd/server/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13005/src Modified Files: Makefile.in Log Message: Regenerated build scripts. Index: Makefile.in =================================================================== RCS file: /cvsroot/agd/server/src/Makefile.in,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- Makefile.in 12 Mar 2004 16:12:58 -0000 1.5 +++ Makefile.in 16 Mar 2004 14:35:26 -0000 1.6 @@ -127,7 +127,7 @@ bin_PROGRAMS = agd agd_SOURCES = arch.h array.c array.h compile.c compile.h compile_options.h \ debug.c debug.h dfdecl.h dfuns.c dfuns.h interpret.c interpret.h lex.l lex.h \ -list.c list.h log.c log.h lpc.h lpc_incl.h lang.y main.c net.c net.h std.h \ +list.c list.h log.c lpc.h lpc_incl.h lang.y main.c net.c net.h std.h \ sys.c sys.h vars.c vars.h dfdecl.in dfdecl.h object.c object.h agd_LDADD = @LEXLIB@ |
From: Peep P. <so...@us...> - 2004-03-16 14:44:44
|
Update of /cvsroot/agd/server In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13005 Modified Files: configure Log Message: Regenerated build scripts. Index: configure =================================================================== RCS file: /cvsroot/agd/server/configure,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- configure 12 Mar 2004 16:05:04 -0000 1.2 +++ configure 16 Mar 2004 14:35:26 -0000 1.3 @@ -1,7 +1,7 @@ #! /bin/sh -# From configure.ac revision 0.05. +# From configure.ac revision 0.06. # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59 for AGD 0.0.2. +# Generated by GNU Autoconf 2.59 for AGD 0.0.2-1. # # Report bugs to <so...@es...>. # @@ -270,8 +270,8 @@ # Identity of this package. PACKAGE_NAME='AGD' PACKAGE_TARNAME='agd' -PACKAGE_VERSION='0.0.2' -PACKAGE_STRING='AGD 0.0.2' +PACKAGE_VERSION='0.0.2-1' +PACKAGE_STRING='AGD 0.0.2-1' PACKAGE_BUGREPORT='so...@es...' ac_unique_file="src/dfparse.y" @@ -782,7 +782,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures AGD 0.0.2 to adapt to many kinds of systems. +\`configure' configures AGD 0.0.2-1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -844,7 +844,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of AGD 0.0.2:";; + short | recursive ) echo "Configuration of AGD 0.0.2-1:";; esac cat <<\_ACEOF @@ -964,7 +964,7 @@ test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF -AGD configure 0.0.2 +AGD configure 0.0.2-1 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. @@ -978,7 +978,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by AGD $as_me 0.0.2, which was +It was created by AGD $as_me 0.0.2-1, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ @@ -1589,7 +1589,7 @@ # Define the identity of the package. PACKAGE='agd' - VERSION='0.0.2' + VERSION='0.0.2-1' cat >>confdefs.h <<_ACEOF @@ -6278,7 +6278,7 @@ } >&5 cat >&5 <<_CSEOF -This file was extended by AGD $as_me 0.0.2, which was +This file was extended by AGD $as_me 0.0.2-1, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -6341,7 +6341,7 @@ cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -AGD config.status 0.0.2 +AGD config.status 0.0.2-1 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" |
From: Peep P. <so...@us...> - 2004-03-16 14:41:45
|
Update of /cvsroot/agd/server/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12466 Modified Files: Makefile.am Log Message: Added log.c, removed log.h Index: Makefile.am =================================================================== RCS file: /cvsroot/agd/server/src/Makefile.am,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- Makefile.am 16 Mar 2004 14:19:43 -0000 1.5 +++ Makefile.am 16 Mar 2004 14:32:27 -0000 1.6 @@ -24,7 +24,7 @@ bin_PROGRAMS = agd agd_SOURCES = arch.h array.c array.h compile.c compile.h compile_options.h \ debug.c debug.h dfdecl.h dfuns.c dfuns.h interpret.c interpret.h lex.l lex.h \ -list.c list.h log.h lpc.h lpc_incl.h lang.y main.c net.c net.h std.h \ +list.c list.h log.c lpc.h lpc_incl.h lang.y main.c net.c net.h std.h \ sys.c sys.h vars.c vars.h dfdecl.in dfdecl.h object.c object.h agd_LDADD = @LEXLIB@ |
From: Peep P. <so...@us...> - 2004-03-16 14:29:02
|
Update of /cvsroot/agd/server/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8956/src Modified Files: Makefile.am Log Message: New version - agd-0.0.2-1. Index: Makefile.am =================================================================== RCS file: /cvsroot/agd/server/src/Makefile.am,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- Makefile.am 12 Mar 2004 16:12:58 -0000 1.4 +++ Makefile.am 16 Mar 2004 14:19:43 -0000 1.5 @@ -24,7 +24,7 @@ bin_PROGRAMS = agd agd_SOURCES = arch.h array.c array.h compile.c compile.h compile_options.h \ debug.c debug.h dfdecl.h dfuns.c dfuns.h interpret.c interpret.h lex.l lex.h \ -list.c list.h log.c log.h lpc.h lpc_incl.h lang.y main.c net.c net.h std.h \ +list.c list.h log.h lpc.h lpc_incl.h lang.y main.c net.c net.h std.h \ sys.c sys.h vars.c vars.h dfdecl.in dfdecl.h object.c object.h agd_LDADD = @LEXLIB@ |
From: Peep P. <so...@us...> - 2004-03-16 14:29:01
|
Update of /cvsroot/agd/server In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8956 Modified Files: BUGS ChangeLog README TODO configure.ac Log Message: New version - agd-0.0.2-1. Index: README =================================================================== RCS file: /cvsroot/agd/server/README,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- README 12 Mar 2004 08:32:10 -0000 1.1 +++ README 16 Mar 2004 14:19:43 -0000 1.2 @@ -1,6 +1,6 @@ -------------------------------------- Adventure Game Driver - 0.0.2, March 11, 2004 + 0.0.2-1, March 16, 2004 http://agd.sf.net Peep Pullerits <so...@es...> -------------------------------------- Index: configure.ac =================================================================== RCS file: /cvsroot/agd/server/configure.ac,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- configure.ac 12 Mar 2004 16:02:05 -0000 1.2 +++ configure.ac 16 Mar 2004 14:19:43 -0000 1.3 @@ -1,11 +1,11 @@ # Process this file with autoconf to produce a configure script. -AC_INIT(AGD, 0.0.2, [so...@es...]) +AC_INIT(AGD, 0.0.2-1, [so...@es...]) AM_INIT_AUTOMAKE AC_CONFIG_SRCDIR(src/dfparse.y) AM_CONFIG_HEADER(src/config.h) AC_CONFIG_FILES([Makefile src/Makefile]) AC_PREFIX_DEFAULT(/usr) -AC_REVISION($revision 0.05$) +AC_REVISION($revision 0.06$) ## Disable lex, yacc, Makefile.in rebuilds by default. AM_MAINTAINER_MODE Index: ChangeLog =================================================================== RCS file: /cvsroot/agd/server/ChangeLog,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- ChangeLog 15 Mar 2004 18:53:35 -0000 1.3 +++ ChangeLog 16 Mar 2004 14:19:43 -0000 1.4 @@ -1,4 +1,17 @@ +0.0.2-1: ---------------------------------------------------------------------------- +2004-03-16 + * rearranged dfparse.y's includes - less headers included now. + * A bit more efficient eval_instruction (read: a couple of + microseconds faster) - not checking if jumped too far + at every loop cycle, only when doing F_JMP or F_JMPF. + * F_{POST,PRE}{DEC,INC} now call free_value() on it's argument. + * Disabled redefining of dfuns + * Fixed crash: unref_prog checks for NULL. + * Fixed compilation of do..while. :) + * Now while and do..while generate code even with empty bodies. + Completely forgot the 'while(1);' usage. + 0.0.2: ---------------------------------------------------------------------------- 2004-03-15 @@ -130,7 +143,6 @@ * init_var(): strings are inited to "0" instead of \0 now, for easier debugging. ----------------------------------------------------------------------------- 0.0.1: ---------------------------------------------------------------------------- 2004-02-08 Index: TODO =================================================================== RCS file: /cvsroot/agd/server/TODO,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- TODO 15 Mar 2004 18:53:35 -0000 1.2 +++ TODO 16 Mar 2004 14:19:43 -0000 1.3 @@ -50,16 +50,7 @@ - more user-friendly error messages (yyerrors) - check for lib root and folder of debug log with access() and exit gracefully if it fails. - set string_type of all new string variables - - more graceful sharing of clones' bytecode - the programs and objects should be separate - the master object has a reference to a program, and all of its clones reference the same program - if the master is destroyed, it's program's reference count is just lowered. while the clones - stay in memory, the code will have references and will stay in memory. once all the clones are destroyed, - the program's reference count will be zero and it will then be destroyed. - - also, when updating a master object, it's clones' code could easily be changed to the new one, - but i guess it's better not to do this - if someone messes up the master object and updates it, - all of the clones would be broken too. - - default values for arguments + default values for arguments int foo(int i, int j = 1); - string table for each program, and F_PUSH_STRING takes index into the table - clean up includes, not everything needs everything in std.h and lpc_incl.h, etc. Index: BUGS =================================================================== RCS file: /cvsroot/agd/server/BUGS,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- BUGS 12 Mar 2004 08:32:10 -0000 1.1 +++ BUGS 16 Mar 2004 14:19:43 -0000 1.2 @@ -2,7 +2,6 @@ - the future_pos system in lex.l is acting up. - src/options and src/compile_options.h don't honor $prefix. Could use a shell script and sed to do substitutions. - - void foo() { int write; } is valid to the driver, should give an error - - repeating the same prototype gives invalid errors + - int i; void foo(int i); should be valid with a warning - continue from here.. |
From: Peep P. <so...@us...> - 2004-03-16 14:23:43
|
Update of /cvsroot/agd/server/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7968 Modified Files: sys.h Log Message: Moved check_logfile() and debug() from log.h to sys.h Index: sys.h =================================================================== RCS file: /cvsroot/agd/server/src/sys.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- sys.h 12 Mar 2004 08:40:10 -0000 1.4 +++ sys.h 16 Mar 2004 14:14:26 -0000 1.5 @@ -36,4 +36,8 @@ #define max(i, j) i > j ? i : j +/* Defined in log.c */ +int check_logfile(void); +void debug(char *prefix, char *fmt, ...); + #endif |
From: Peep P. <so...@us...> - 2004-03-16 14:23:21
|
Update of /cvsroot/agd/server/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7923 Modified Files: sys.c Log Message: Removed unnecessary code. Index: sys.c =================================================================== RCS file: /cvsroot/agd/server/src/sys.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- sys.c 12 Mar 2004 16:02:05 -0000 1.8 +++ sys.c 16 Mar 2004 14:14:04 -0000 1.9 @@ -163,92 +163,9 @@ free(p); } -/* Unnecessary. But lets keep it for a couple of versions, just in case. */ -#if 0 -static char *cwd; - -char *get_working_dir(void) -{ -#ifdef __linux - cwd = getcwd(NULL, 0); /* This uses malloc(), so we don't get stats for this. */ - if(!cwd) { - debug("something bad happened.\n"); - return NULL; - } -#else - int size = 256; - char *buf = xmalloc(sizeof(char) * size); - while(1) { - cwd = getcwd(buf, size); - if(!cwd) { - if(errno == ERANGE) { - buf = realloc(buf, sizeof(char) * (size*=2)); - continue; - } else { - debug("something bad happened.\n"); - xfree(buf); - return NULL; - } - } - break; - } - cwd = buf; -#endif - return cwd; -} - -char *remove_file_name(char *path) -{ - int len; - char *name; - - len = strlen(path); - name = xmalloc(sizeof(char) * (len + 1)); - strcpy(name, path); - - if(path[len-1] == 'c' && path[len - 2] == '.') { - char *p = &name[len]; - while(p && *p != '/' && p >= name) p--; - p[1] = '\0'; - - } - - if(strlen(name) != len) - name = realloc(name, sizeof(char) * (strlen(name) + 1)); - return name; -} - -int dir_exists(char *name, int verbose) -{ - int doesit; - char *cwd; - char *_name; - - if(!name) - return; - _name = remove_file_name(name); - - cwd = get_working_dir(); - if(chdir(_name) == -1) { - doesit = 0; - if(verbose) - printf("Directory \"%s\" does not exist (or isn't accessable).\n", _name); - } else - doesit = 1; - - chdir(cwd); - xfree(cwd); - xfree(_name); - - return doesit; -} -#endif - int legal_path(char *fn) { char *p; -/* if(fn[0] == '/') - return 0;*/ p = fn; if(p = strstr(p, "..")) return 0; /* found it */ @@ -259,7 +176,7 @@ /* stringdup() isn't ANSI, so we need this replacement. */ char *stringdup(char *s) { - char *p = xmalloc(strlen(s) + 1); /* legit */ + char *p = xmalloc(strlen(s) + 1); strcpy(p, s); return p; } |
From: Peep P. <so...@us...> - 2004-03-16 14:23:11
|
Update of /cvsroot/agd/server/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7845 Modified Files: std.h Log Message: Removed log.h Index: std.h =================================================================== RCS file: /cvsroot/agd/server/src/std.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- std.h 12 Mar 2004 08:40:10 -0000 1.5 +++ std.h 16 Mar 2004 14:13:54 -0000 1.6 @@ -10,7 +10,6 @@ #include "arch.h" #include "sys.h" -#include "log.h" #include "compile_options.h" |
From: Peep P. <so...@us...> - 2004-03-16 14:22:52
|
Update of /cvsroot/agd/server/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7758 Modified Files: object.c Log Message: Check for NULL in unref_prog. Index: object.c =================================================================== RCS file: /cvsroot/agd/server/src/object.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- object.c 15 Mar 2004 18:52:39 -0000 1.6 +++ object.c 16 Mar 2004 14:13:24 -0000 1.7 @@ -108,6 +108,9 @@ /* Returns 1 if program was freed. */ int unref_prog(program_t *prog) { + if(!prog) + return 0; + prog->ref--; if(prog->ref <= 0) { free_array(&prog->functions, free_fun); |
From: Peep P. <so...@us...> - 2004-03-16 14:22:21
|
Update of /cvsroot/agd/server/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7695 Modified Files: main.c Log Message: Changed two strings not to include too much whitespace. Index: main.c =================================================================== RCS file: /cvsroot/agd/server/src/main.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- main.c 15 Mar 2004 18:50:28 -0000 1.9 +++ main.c 16 Mar 2004 14:13:03 -0000 1.10 @@ -70,8 +70,8 @@ void usage(char *s) { printf("Usage: %s [options] [configuration file]\n", s); - printf("\tOptions:\n\t\t-d:\n\t\t Increase debug level\n\ - \t\t-?\n\t\t-v:\n\t\t Show version and quit\n"); + printf("\tOptions:\n\t\t-d:\n\t\t Increase debug level\n" + "\t\t-?\n\t\t-v:\n\t\t Show version and quit\n"); exit(0); } @@ -84,8 +84,8 @@ printf("Bug reports, suggestions, ideas etc to %s\n", PACKAGE_BUGREPORT); #ifdef ARCH_README - printf("Your computer architecture is not fully supported.\ - Please read README.ARCH in the source directory.\n"); + printf("Your computer architecture is not fully supported. " + "Please read README.ARCH in the source directory.\n"); #endif } |
From: Peep P. <so...@us...> - 2004-03-16 14:22:01
|
Update of /cvsroot/agd/server/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7626 Modified Files: lang.y Log Message: Small changes regarding identifier redefining. Index: lang.y =================================================================== RCS file: /cvsroot/agd/server/src/lang.y,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- lang.y 15 Mar 2004 18:48:13 -0000 1.3 +++ lang.y 16 Mar 2004 14:12:43 -0000 1.4 @@ -128,7 +128,7 @@ def_id_t *id; v = $6.data[i]; id = find_id(v->name); - if(id) { + if(id && id->base_scope >= scope_level) { redeclaration_error(id, ID_ARG); } else { define_id(v->name, ID_ARG, v->type, NULL); @@ -406,7 +406,8 @@ sprintf(buf, "warning: declaration of %s shadows function argument", $1); display_error(buf); compile_warnings++; - } else if(id->base_scope >= scope_level) { + } else if(id->type == ID_DFUN + || id->base_scope >= scope_level) { redeclaration_error(id, ID_LVAR); } } @@ -982,35 +983,29 @@ L_DO statement L_WHILE '(' expr ')' { init_array(&$$); - if($2.length) { +/* if($2.length) {*/ array_push(&$$, (void *) F_JMP); - /* Jump past F_JMP argument, expr, F_JMPF and it's argument, - plus past it. */ - array_push(&$$, (void *) ($5.arr.length + 5)); + array_push(&$$, (void *) ($5.arr.length + 3)); array_concat(&$$, &$5.arr); array_push(&$$, (void *) F_JMPF); array_push(&$$, (void *) ($2.length + 3)); array_concat(&$$, &$2); array_push(&$$, (void *) F_JMP); array_push(&$$, (void *) -($2.length + $5.arr.length + 3)); - } else { - comp_warning("empty do-body"); - } +/* }*/ } while: L_WHILE '(' expr ')' statement { init_array(&$$); - if($5.length) { +/* if($5.length) {*/ array_concat(&$$, &$3.arr); array_push(&$$, (void *) F_JMPF); array_push(&$$, (void *) ($5.length + 3)); array_concat(&$$, &$5); array_push(&$$, (void *) F_JMP); array_push(&$$, (void *) -($5.length + $3.arr.length + 3)); - } else { - comp_warning("empty while-body"); - } +/* }*/ } ; |
From: Peep P. <so...@us...> - 2004-03-16 14:21:25
|
Update of /cvsroot/agd/server/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7466 Modified Files: interpret.c Log Message: Removed comments; index overrun checking only done inside F_JMP and F_JMPF. Index: interpret.c =================================================================== RCS file: /cvsroot/agd/server/src/interpret.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- interpret.c 15 Mar 2004 18:44:53 -0000 1.10 +++ interpret.c 16 Mar 2004 14:12:07 -0000 1.11 @@ -70,7 +70,6 @@ out: stop_execution = 1; /* longjmp(error_context, 1);*/ -/* csp = &control_stack[0]; */ } int get_fun_index(object_t *ob, char *fun) @@ -148,19 +147,8 @@ } } -/*#define pop_locals() if(sp - 1 >= fp) \ - while(1) { if(sp == fp) break; free_value(sp); sp--; }*/ #define pop_locals() while(sp > fp) { sp--; free_value(sp); } -/*void pop_arguments(void) -{ - int i; - for(i=0;i<csp->num_arg;i++) { - pop_stack(); - } -}*/ - - void do_assign(variable_t *lval, variable_t *rval) { *lval = *rval; @@ -178,11 +166,6 @@ void do_assign_free(variable_t *lval, variable_t *rval) { -/* if(lval->type == T_LVALUE) - lval = lval->u.v; - if(rval->type == T_LVALUE) - rval = rval->u.v;*/ - free_value(lval); do_assign(lval, rval); } @@ -268,6 +251,10 @@ } } +/* Used by F_JMP and F_JMPF to check if they jumped too far. */ +#define CHECK_OVERRUN() if((int *) cp >= (int *) code->data + code->length) {\ + debug("interpret", "Ran over end of array: returning\n"); return; } + #define GET_ARGS() tmpi = 0; while(tmpi < 2) { \ tmp = --sp; if(tmp->type == T_LVALUE) tmp = tmp->u.v;\ arg[tmpi] = tmp->u.i; tmpi++; free_value(sp); } @@ -300,10 +287,6 @@ case F_PUSH_NULL_OBJECT: push_object(NULL); break; -/* case F_PUSH: - cp++; - push_var((variable_t*)*cp); - break;*/ case F_POP: pop_stack(); break; @@ -324,12 +307,12 @@ break; case F_PUSH_GVAR: cp++; - push_var(this_ob/*->prog*/->variables.data[*cp]); + push_var(this_ob->variables.data[*cp]); break; case F_PUSH_GVAR_LVALUE: cp++; sp->type = T_LVALUE; - sp->u.v = this_ob/*->prog*/->variables.data[*cp]; + sp->u.v = this_ob->variables.data[*cp]; sp++; CHECK_SP() break; @@ -364,28 +347,26 @@ } break; case F_POSTINC: - sp--; - tmp = sp->u.v; - push_int(tmp->u.i); - tmp->u.i++; + tmp = sp[-1].u.v; + tmpi = tmp->u.i++; + pop_stack(); + push_int(tmpi); break; case F_PREINC: - sp--; - tmp = sp->u.v; - tmp->u.i++; - push_int(tmp->u.i); + tmp = sp[-1].u.v; + tmpi = ++tmp->u.i; + pop_stack(); + push_int(tmpi); break; case F_POSTDEC: - sp--; - tmp = sp->u.v; - push_int(tmp->u.i); - tmp->u.i--; + tmp = sp[-1].u.v; + tmpi = tmp->u.i--; + push_int(tmpi); break; case F_PREDEC: - sp--; - tmp = sp->u.v; - tmp->u.i--; - push_int(tmp->u.i); + tmp = sp[-1].u.v; + tmpi = --tmp->u.i; + push_int(tmpi); break; case F_JMPF: sp--; @@ -396,10 +377,12 @@ cp++; } free_value(sp); + CHECK_OVERRUN() break; case F_JMP: tmpi = cp[1]; cp += tmpi; + CHECK_OVERRUN() break; case F_NEG: sp--; @@ -423,18 +406,6 @@ push_int(0); } break; -#if 0 - case F_AND: - tmpi = test_var(sp-2) && test_var(sp-1); - pop_stack(); pop_stack(); - push_int(tmpi); - break; - case F_OR: - tmpi = test_var(sp-2) || test_var(sp-1); - pop_stack(); pop_stack(); - push_int(tmpi); - break; -#endif case F_NOT: sp--; tmpi = test_var(sp); @@ -532,11 +503,7 @@ pop_locals(); return; } - /* Should only check this with F_JMP. */ - if((int *) ++cp >= (int *) code->data + code->length) { - debug("interpret", "Ran over end of array: returning\n"); - return; - } + cp++; goto again; } @@ -573,9 +540,7 @@ cp = (int *) &f->code.data[0]; code = &f->code; -/* eval_instruction(); - - funcno = 0;*/ +/* funcno = 0;*/ } void init_interpreter(void) @@ -606,7 +571,6 @@ struct timeval tm, tm2; #endif -/* index = nametable_find(TYPE_FUN|SCOPE_LOCAL, fun, &ob->prog->nametable);*/ index = get_fun_index(ob, fun); if(index == -1) return NULL; @@ -615,13 +579,9 @@ gettimeofday(&tm, NULL); #endif -/* init_interpreter();*/ push_control_stack(); -/* fp = ++sp;*/ va_start(va, argfmt); - -/* sp = fp;*/ for(p=argfmt;p && *p;p++) { switch(*p) { case 'o': |
From: Peep P. <so...@us...> - 2004-03-16 14:20:43
|
Update of /cvsroot/agd/server/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7289 Modified Files: dfparse.h dfparse.y Log Message: Cleaned up headers. Index: dfparse.h =================================================================== RCS file: /cvsroot/agd/server/src/dfparse.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- dfparse.h 12 Mar 2004 11:51:44 -0000 1.1 +++ dfparse.h 16 Mar 2004 14:11:26 -0000 1.2 @@ -40,7 +40,7 @@ #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 51 "dfparse.y" +#line 55 "dfparse.y" typedef union YYSTYPE { char *s; int i; Index: dfparse.y =================================================================== RCS file: /cvsroot/agd/server/src/dfparse.y,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- dfparse.y 12 Mar 2004 08:40:10 -0000 1.4 +++ dfparse.y 16 Mar 2004 14:11:26 -0000 1.5 @@ -24,13 +24,17 @@ Changes prior to 0.03 are undocumented. */ %{ -#include "std.h" -#include "lpc_incl.h" -#include "lex.h" +#include <stdlib.h> /* realloc */ +#include <stdio.h> /* FILE* */ #include <errno.h> + #include <time.h> -#define DFVERSION "0.07" +#include "sys.h" /* xmalloc */ +#include "array.h" +#include "lpc.h" +#include "lex.h" +#define DFVERSION "0.07" #define DFDECL_T "typedef struct {\n\tint ret;\n\tchar *name;\n\tvoid (*fun)(void);\n\t"\ "int arglen;\n\tint args[%d];\n} dfdecl_t;\n" typedef struct { |
From: Peep P. <so...@us...> - 2004-03-16 14:16:56
|
Update of /cvsroot/agd/server/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6340 Modified Files: array.c compile_options.h Log Message: Removed MAX_LIST_LENGTH. Index: compile_options.h =================================================================== RCS file: /cvsroot/agd/server/src/compile_options.h,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** compile_options.h 15 Mar 2004 18:43:30 -0000 1.8 --- compile_options.h 16 Mar 2004 14:07:37 -0000 1.9 *************** *** 9,17 **** #define MAX_STRING_LENGTH 1024 - /* The maximum length a list or an array can have. - This is mainly used to debug infinite-recursion bugs, - probably will be removed later. */ - #define MAX_LIST_LENGTH 500 - /* The default length an array has. If an item is added to the array and it doesn't have enough --- 9,12 ---- Index: array.c =================================================================== RCS file: /cvsroot/agd/server/src/array.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** array.c 12 Mar 2004 08:40:10 -0000 1.8 --- array.c 16 Mar 2004 14:07:37 -0000 1.9 *************** *** 56,64 **** return; - if(a->length > MAX_LIST_LENGTH) { - printf("WARNING: array is longer than MAX_LIST_LENGTH (%d)\n", MAX_LIST_LENGTH); - return; - } - a->length++; alloc_array(a); --- 56,59 ---- |
From: Peep P. <so...@us...> - 2004-03-16 14:13:54
|
Update of /cvsroot/agd/server/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5568 Removed Files: log.h Log Message: Moved prototypes of check_logfile() and debug() to sys.h. --- log.h DELETED --- |
From: Peep P. <so...@us...> - 2004-03-16 14:12:52
|
Update of /cvsroot/agd/server/lib/sys In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5202/sys Modified Files: player.c Log Message: Initial import. Index: player.c =================================================================== RCS file: /cvsroot/agd/server/lib/sys/player.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** player.c 12 Mar 2004 08:50:10 -0000 1.5 --- player.c 16 Mar 2004 14:02:55 -0000 1.6 *************** *** 24,27 **** --- 24,29 ---- } else if(cmd == "/uptime") { write("The driver has been running for " + asctime(uptime()) + "\n"); + } else if(cmd == "/print_objs") { + print_objs(); } else { shout(time() + ": " + _name + " said: " + cmd + "\n", this_object()); |
From: Peep P. <so...@us...> - 2004-03-16 14:12:11
|
Update of /cvsroot/agd/server/lib In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5202 Added Files: beer.c Log Message: Initial import. --- NEW FILE: beer.c --- void one_bottle(int i) { if(i==10) write("Ten "); if(i==9) write("Nine "); if(i==8) write("Eight "); if(i==7) write("Seven "); if(i==6) write("Six "); if(i==5) write("Five "); if(i==4) write("Four "); if(i==3) write("Three "); if(i==2) write("Two "); if(i==1) write("One "); if(!i) { write("No bottles of beer on the wall.\n"); return; } if(i != 1) write("bottles "); else write("bottle "); } void bottle(int i) { one_bottle(i); if(!i) return; write("of beer on the wall.\n"); one_bottle(i); write("of beer,\n"); write("You take one down and pass it around,\n"); bottle(i-1); } void create() { bottle(10); write("Beeeer.\n"); } |
From: Peep P. <so...@us...> - 2004-03-15 21:11:34
|
Update of /cvsroot/agd/www In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2423 Modified Files: index.php Log Message: Information about mailing lists. Index: index.php =================================================================== RCS file: /cvsroot/agd/www/index.php,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** index.php 12 Mar 2004 16:19:29 -0000 1.2 --- index.php 15 Mar 2004 21:02:23 -0000 1.3 *************** *** 29,33 **** <br>No graphics yet. <br>AGD needs all the help it can get - there's documentation to be written, bugs to be found, features to be requested, and most importantly - bugs to be fixed. ! <br>If you feel like helping, e-mail to solicit[@]estprog.ee (use the normal @). If a lot of people show up I'll open up a mailing list. </p> <h2>Acquiring sources.</h2> --- 29,38 ---- <br>No graphics yet. <br>AGD needs all the help it can get - there's documentation to be written, bugs to be found, features to be requested, and most importantly - bugs to be fixed. ! <br>If you feel like helping, e-mail to solicit[@]estprog.ee (use the normal @). ! <h2>Mailing lists</h2> ! <p>There are two mailing lists at this time: ! <br><b>agd-cvs</b> - notification about CVS commits ! <br><b>agd-devel</b> - discussion about AGD development ! <br>See <a href="http://sourceforge.net/mail/?group_id=98589">http://sourceforge.net/mail/?group_id=98589</a> for information on subscribing and posting. </p> <h2>Acquiring sources.</h2> |
From: Peep P. <so...@us...> - 2004-03-15 19:06:54
|
Update of /cvsroot/agd/server/doc/lpc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5487 Added Files: datatypes operators Log Message: Initial import. --- NEW FILE: operators --- Operators of the LPC language. Star (*) marks that it's implemented in AGD. with side effects: = binary assign * (F_ASSIGN) -- unary decrement * (F_POSTDEC, F_PREDEC) ++ unary increment * (F_POSTINC, F_PREINC) ('a x= b' is equal to 'a = a x b') += binary self-increment -= binary self-decrement /= binary self-division *= binary self-multiplication %= binary self-modulo comparison: == binary equal * (F_EQ) > binary greater than * (F_GT) < binary less than * (F_LT) <= binary less or equal than * (F_LE) >= binary greater or equal than * (F_GE) != binary not equal * (F_NE) logic: && binary AND * || binary OR * ! unary NOT * (F_NOT) misc: -> binary call_other * (F_CALL_OTHER) note: This is different from C's ->. in LPC it calls a function in an object other than the current object; i.e. ob->call() would execute the function call() in object ob. ?: trinary conditional (if-then-else) , binary comma - left and right side are evaluated, then right side discarded. arithmetic: + binary addition * (F_ADD) - binary substraction *(F_SUB) - unary negation *(F_NEG) / binary division *(F_DIV) * binary multiplication *(F_MUL) % binary modulo * (F_MOD) ** power binary: & | ~ ^ << >> &= |= ~= ^= <<= >>= --- NEW FILE: datatypes --- Data types currently implemented in AGD are int, string, object, void. These should be fully functional everywhere. Valid, but not implemented types are mixed and type* (array type). In fact, using arrays can cause severe bugs, as they are not handled properly yet. Data types that should be working in future versions are status (memory-optimized boolean type), mapping, function, enum, struct/class and char. |