--- parser3/src/targets/parser/Attic/parser.C 2001/01/30 13:07:31 1.2 +++ parser3/src/targets/parser/Attic/parser.C 2001/02/21 15:27:00 1.13 @@ -1,5 +1,5 @@ /* - $Id: parser.C,v 1.2 2001/01/30 13:07:31 paf Exp $ + $Id: parser.C,v 1.13 2001/02/21 15:27:00 paf Exp $ */ #include @@ -9,7 +9,10 @@ #include "pa_array.h" #include "pa_table.h" #include "pa_common.h" -#include "pool.h" +#include "pa_pool.h" +#include "compile.h" +#include "execute.h" +#include "pa_vclass.h" char *itoa(int n, char *buf){ snprintf(buf,MAX_STRING,"%d",n); @@ -19,41 +22,41 @@ char *itoa(int n, char *buf){ int main(int argc, char *argv[]) { Exception fatal_exception; if(EXCEPTION_TRY(fatal_exception)) { - parser_Pool pool(fatal_exception); + Pool pool(fatal_exception); char *file="file1"; - String& string=pool.make_string(); - string.APPEND("Hello, ", file, 1); - string.APPEND("w", file, 2); - string.APPEND("o", file, 3); - string.APPEND("r", file, 4); - string.APPEND("l", file, 5); - string.APPEND("d", file, 6); - string.APPEND("!\n ", file, 7); + String& string=*new(pool) String(pool); + string.APPEND("Hello, ", 0,file, 1); + string.APPEND("w", 0,file, 2); + string.APPEND("o", 0,file, 3); + string.APPEND("r", 0,file, 4); + string.APPEND("l", 0,file, 5); + string.APPEND("d", 0,file, 6); + string.APPEND("!\n ", 0,file, 7); printf(string.cstr()); char *key1_file="key1_file"; - Hash& hash=pool.make_hash(); + Hash& hash=*new(pool) Hash(pool); String key1=string; - key1.APPEND("1", key1_file, 1); - String& value1=pool.make_string(); - value1.APPEND("i'm value1\n", file, 1); - String& value2=pool.make_string(); - value2.APPEND("i'm value2\n", file, 1); + key1.APPEND("1", 0,key1_file, 1); + String& value1=*new(pool) String(pool); + value1.APPEND("i'm value1\n", 0,file, 1); + String& value2=*new(pool) String(pool); + value2.APPEND("i'm value2\n", 0,file, 1); hash.put(key1, &value1); char *key2_file="key2_file"; String key2=string; - key2.APPEND("2", key2_file, 1); + key2.APPEND("2", 0,key2_file, 1); hash.put(key2, &value2); String *found_value=(String*)hash.get(key2); printf(found_value?found_value->cstr():"not found\n"); - String& a=pool.make_string(); a.APPEND("fi", file, 1); a.APPEND("rst", file, 2); - String& b=pool.make_string(); b.APPEND("fir", file, 1); b.APPEND("st", file, 2); + String& a=*new(pool) String(pool); a.APPEND("fi", 0,file, 1); a.APPEND("rst", 0,file, 2); + String& b=*new(pool) String(pool); b.APPEND("fir", 0,file, 1); b.APPEND("st", 0,file, 2); printf(a==b?"eq\n":"ne\n"); - Array& array=pool.make_array(2); + Array& array=*new(pool) Array(pool, 2); array+="first"; array+="second"; array+="third"; @@ -62,60 +65,122 @@ int main(int argc, char *argv[]) { array.get_cstr(1), array.get_cstr(2)); - Array& a1=pool.make_array(); + Array& a1=*new(pool) Array(pool); a1+="first"; - Array& a2=pool.make_array(); + Array& a2=*new(pool) Array(pool); a2+="second"; - Array& asum=pool.make_array(); + Array& asum=*new(pool) Array(pool); asum.append_array(a1); asum.append_array(a2); printf("%s-%s\n", asum.get_cstr(0), asum.get_cstr(1)); - parser_Pool request_pool(fatal_exception); + Pool request_pool(fatal_exception); Request request(request_pool); Exception operator_exception; Local_request_exception subst(request, operator_exception); if(EXCEPTION_TRY(request.exception())) { + /* Array acolumns(request.pool()); acolumns+="id"; acolumns+="name"; acolumns+="age"; - Table named_table(request, "_file.cfg", 1, &acolumns); + Table table(request, "_file.cfg", 1, &acolumns); + */ + Table table(request, "_file.cfg", 1, 0); for(int n=1; n<=5; n++) { - Array& row=request.pool().make_array(named_table.columns()->size()); + Array& row=*new(request.pool()) Array(request.pool(), 3/*table.columns()->size()*/); char *buf=static_cast(request.pool().malloc(MAX_STRING)); row+=itoa(n, buf); row+="paf"; row+="99"; - named_table+=&row; + table+=&row; } - - for(int i=0; isize(); i++) - printf("%s\t", named_table.columns()->get_cstr(i)); + /* + for(int i=0; isize(); i++) + printf("%s\t", table.columns()->get_cstr(i)); printf("\n"); - for(named_table.set_current(0); named_table.get_current()size(); i++) { - //String name(request.pool()); - //char *buf=static_cast(request.pool().malloc(MAX_STRING)); - //name.APPEND(itoa(i, buf), "names file", 0); + for(int i=0; i<5/*table.columns()->size()*/; i++) { + /**/ + String name(request.pool()); + char *buf=static_cast(request.pool().malloc(MAX_STRING)); + name.APPEND(itoa(i, buf), 0,"names file", 0); //name.APPEND("id", "names file", 0); - //named_table.read_item(line, name); - const char *cstr_name=named_table.columns()->get_cstr(i); + table.read_item(line, name); + /* + const char *cstr_name=table.columns()->get_cstr(i); String name(request.pool()); name.APPEND(cstr_name, 0, 0); - named_table.read_item(line, name); - line.APPEND("\t", 0, 0); + table.read_item(line, name); + /**/ + line.APPEND("\t", 0,0, 0); } printf("%s\n", line.cstr()); } + +/* + String it(request.pool()); + it.APPEND("ab.cd[zzz]", 0,0); + String_iterator si(it); + / *si++; + si++; + si++; + si++; + si++; + si++; + * / + / *bool found=si.skip_to('.'); + si++; + * / + si++; + Char_types types; + types.set(' ', 1); + types.set('[', 2); + types.set(']', 3); + int type=si.skip_to(types); + si++; +*/ + // compile + char *file="c:\\temp\\test.p"; + char *source=file_read(request.pool(), file); + Array& compiled_methods=COMPILE(request, source, file); + + String name_RUN(request.pool()); name_RUN.APPEND_CONST("RUN"); + // create new 'name' vclass, add it to request's classes + { + Array immediate_parents(pool); + VClass *vclass=new(pool) VClass(pool, &name_RUN, immediate_parents); + request.classes().put(name_RUN, vclass); + + for(int i=0; i(compiled_methods.quick_get(i)); + vclass->add_method(method.name, method); + } + } + + { + VClass *class_RUN=static_cast(request.classes().get(name_RUN)); + String name_main(pool); + name_main.APPEND_CONST(MAIN_METHOD_NAME); + Method *method_main=class_RUN->get_method(name_main); + if(!method_main) + request.exception().raise(0,0, + &class_RUN->name(), + "no 'main' method in class"); + + Array& code=method_main->code; + execute(pool, code); + } + } else { - printf("operator_error occured: \n"); Exception& e=request.exception(); + printf("operator_error occured: %s\n", e.comment()); const String *type=e.type(); if(type) { printf(" type: %s", type->cstr()); @@ -127,11 +192,13 @@ int main(int argc, char *argv[]) { const String *problem_source=e.problem_source(); if(problem_source) { const Origin& origin=problem_source->origin(); - printf(" origin: '%s', file '%s', line %d\n", - problem_source->cstr(), - origin.file, origin.line); + printf(" '%s'\n", + problem_source->cstr()); + if(origin.file) + printf(" [%s:%d]", + origin.file, origin.line); + printf("\n"); } - printf(" comment: %s\n", e.comment()); } } else { printf("fatal exception occured: %s\n", fatal_exception.comment());