--- parser3/src/main/compile.C 2001/02/21 15:26:54 1.9 +++ parser3/src/main/compile.C 2001/02/22 14:14:07 1.15 @@ -1,12 +1,12 @@ /* - $Id: compile.C,v 1.9 2001/02/21 15:26:54 paf Exp $ + $Id: compile.C,v 1.15 2001/02/22 14:14:07 paf Exp $ */ +#include "pa_request.h" #include "pa_string.h" #include "pa_array.h" #include "code.h" #include "compile_tools.h" -#include "compile.h" #include "pa_exception.h" #include @@ -14,18 +14,16 @@ extern int yydebug; extern int yyparse (void *); -Array& real_compile(COMPILE_PARAMS) { - Pool& pool=request.pool(); - +Array& Request::real_compile(COMPILE_PARAMS) { // prepare to parse struct parse_control pc; + // input - pc.pool=&pool; - pc.methods=new(pool) Array(pool); + pc.pool=&pool(); + pc.methods=NEW Array(pool()); if(!source) return *pc.methods; - // create new 'name' vclass, add it to request's classes pc.source=source; #ifndef NO_STRING_ORIGIN pc.file=file; @@ -33,21 +31,21 @@ Array& real_compile(COMPILE_PARAMS) { #endif // initialise state pc.pending_state=0; - pc.string=new(pool) String(pool); + pc.string=NEW String(pool()); pc.ls=LS_USER; pc.sp=0; - // parse! + // parse=compile! yydebug=1; - if(yyparse(&pc)) {// error? - if(pc.col==1) { - // step back from last char. -1 col means EOL + if(yyparse(&pc)) { // error? + if(pc.col==0) { // expecting something after EOL means they've expected it BEFORE + // step back. -1 col means EOL pc.line--; - pc.col=-1; + pc.col=-2; } - request.exception().raise(0,0, + THROW(0,0, 0, - "%s [%s:%d:%d]", pc.error, file, 1+pc.line, pc.col); + "%s [%s:%d:%d]", pc.error, file, 1+pc.line, 1+pc.col); } // result