Annotation of parser3/src/main/compile.C, revision 1.76
1.32 paf 1: /** @file
1.33 paf 2: Parser: compiler part of request class.
3:
1.72 paf 4: Copyright (c) 2001-2004 ArtLebedev Group (http://www.artlebedev.com)
1.58 paf 5: Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
1.64 paf 6: */
1.33 paf 7:
1.76 ! paf 8: static const char * const IDENT_COMPILE_C="$Date: 2004/04/06 09:01:20 $";
1.1 paf 9:
1.36 paf 10: #include "pa_opcode.h"
1.10 paf 11: #include "pa_request.h"
1.1 paf 12: #include "compile_tools.h"
1.76 ! paf 13: #include "pa_vclass.h"
1.1 paf 14:
15: extern int yydebug;
16: extern int yyparse (void *);
17:
1.70 paf 18: VStateless_class& Request::compile(VStateless_class* aclass,
19: const char* source, const String* main_alias,
1.73 paf 20: uint file_no,
21: int line_no_offset) {
1.7 paf 22: // prepare to parse
1.73 paf 23: Parse_control pc(*this, aclass, source, main_alias, file_no, line_no_offset);
1.10 paf 24:
1.12 paf 25: // parse=compile!
1.60 paf 26: //yydebug=1;
1.10 paf 27: if(yyparse(&pc)) { // error?
1.70 paf 28: pc.pos_prev_c();
1.75 paf 29: if(!pc.explicit_result)
30: if(pc.pos.col==0) // expecting something after EOL means they've expected it BEFORE
31: pc.pos_prev_c();
1.70 paf 32:
1.63 paf 33: throw Exception("parser.compile",
1.6 paf 34: 0,
1.74 paf 35: "%s(%d:%d): %s", file_list[file_no].cstr(), 1+pc.pos.line, 1+pc.pos.col, pc.error);
1.8 paf 36: }
1.76 ! paf 37:
! 38: // fill properties
! 39: static_cast<VClass*>(pc.cclass)->fill_properties();
1.7 paf 40:
41: // result
1.27 paf 42: return *pc.cclass;
1.1 paf 43: }
E-mail: