diff options
Diffstat (limited to 'linden/indra/lscript/lscript_compile/indra.l')
-rw-r--r-- | linden/indra/lscript/lscript_compile/indra.l | 42 |
1 files changed, 18 insertions, 24 deletions
diff --git a/linden/indra/lscript/lscript_compile/indra.l b/linden/indra/lscript/lscript_compile/indra.l index 74e32fd..49ed6fc 100644 --- a/linden/indra/lscript/lscript_compile/indra.l +++ b/linden/indra/lscript/lscript_compile/indra.l | |||
@@ -19,11 +19,7 @@ FS (f|F) | |||
19 | #include "lscript_tree.h" | 19 | #include "lscript_tree.h" |
20 | #include "lscript_typecheck.h" | 20 | #include "lscript_typecheck.h" |
21 | #include "lscript_resource.h" | 21 | #include "lscript_resource.h" |
22 | #if LL_WINDOWS | 22 | #include "indra.y.hpp" |
23 | #include "ytab.h" | ||
24 | #else | ||
25 | #include "indra.y.h" | ||
26 | #endif | ||
27 | #include "lltimer.h" | 23 | #include "lltimer.h" |
28 | #include "indra_constants.h" | 24 | #include "indra_constants.h" |
29 | #include "llagentconstants.h" | 25 | #include "llagentconstants.h" |
@@ -505,6 +501,9 @@ extern "C" { int yyerror(const char *fmt, ...); } | |||
505 | "PRIM_SCULPT_TYPE_TORUS" { count(); yylval.ival = LSL_PRIM_SCULPT_TYPE_TORUS; return(INTEGER_CONSTANT); } | 501 | "PRIM_SCULPT_TYPE_TORUS" { count(); yylval.ival = LSL_PRIM_SCULPT_TYPE_TORUS; return(INTEGER_CONSTANT); } |
506 | "PRIM_SCULPT_TYPE_PLANE" { count(); yylval.ival = LSL_PRIM_SCULPT_TYPE_PLANE; return(INTEGER_CONSTANT); } | 502 | "PRIM_SCULPT_TYPE_PLANE" { count(); yylval.ival = LSL_PRIM_SCULPT_TYPE_PLANE; return(INTEGER_CONSTANT); } |
507 | "PRIM_SCULPT_TYPE_CYLINDER" { count(); yylval.ival = LSL_PRIM_SCULPT_TYPE_CYLINDER; return(INTEGER_CONSTANT); } | 503 | "PRIM_SCULPT_TYPE_CYLINDER" { count(); yylval.ival = LSL_PRIM_SCULPT_TYPE_CYLINDER; return(INTEGER_CONSTANT); } |
504 | "PRIM_SCULPT_TYPE_MASK" { count(); yylval.ival = LSL_PRIM_SCULPT_TYPE_MASK; return(INTEGER_CONSTANT); } | ||
505 | "PRIM_SCULPT_FLAG_MIRROR" { count(); yylval.ival = LSL_PRIM_SCULPT_FLAG_MIRROR; return(INTEGER_CONSTANT); } | ||
506 | "PRIM_SCULPT_FLAG_INVERT" { count(); yylval.ival = LSL_PRIM_SCULPT_FLAG_INVERT; return(INTEGER_CONSTANT); } | ||
508 | 507 | ||
509 | "MASK_BASE" { count(); yylval.ival = 0; return(INTEGER_CONSTANT); } | 508 | "MASK_BASE" { count(); yylval.ival = 0; return(INTEGER_CONSTANT); } |
510 | "MASK_OWNER" { count(); yylval.ival = 1; return(INTEGER_CONSTANT); } | 509 | "MASK_OWNER" { count(); yylval.ival = 1; return(INTEGER_CONSTANT); } |
@@ -680,7 +679,7 @@ int yyerror(const char *fmt, ...) | |||
680 | //#define EMIT_CIL_ASSEMBLER | 679 | //#define EMIT_CIL_ASSEMBLER |
681 | 680 | ||
682 | BOOL lscript_compile(const char* src_filename, const char* dst_filename, | 681 | BOOL lscript_compile(const char* src_filename, const char* dst_filename, |
683 | const char* err_filename, BOOL is_god_like) | 682 | const char* err_filename, BOOL compile_to_mono, const char* class_name, BOOL is_god_like) |
684 | { | 683 | { |
685 | BOOL b_parse_ok = FALSE; | 684 | BOOL b_parse_ok = FALSE; |
686 | BOOL b_dummy = FALSE; | 685 | BOOL b_dummy = FALSE; |
@@ -696,10 +695,10 @@ BOOL lscript_compile(const char* src_filename, const char* dst_filename, | |||
696 | init_temp_jumps(); | 695 | init_temp_jumps(); |
697 | gAllocationManager = new LLScriptAllocationManager(); | 696 | gAllocationManager = new LLScriptAllocationManager(); |
698 | 697 | ||
699 | yyin = LLFile::fopen(src_filename, "r"); | 698 | yyin = LLFile::fopen(std::string(src_filename), "r"); |
700 | if (yyin) | 699 | if (yyin) |
701 | { | 700 | { |
702 | yyout = LLFile::fopen(err_filename, "w"); | 701 | yyout = LLFile::fopen(std::string(err_filename), "w"); |
703 | 702 | ||
704 | // Reset the lexer's internal buffering. | 703 | // Reset the lexer's internal buffering. |
705 | 704 | ||
@@ -722,6 +721,8 @@ BOOL lscript_compile(const char* src_filename, const char* dst_filename, | |||
722 | } | 721 | } |
723 | 722 | ||
724 | gScriptp->mGodLike = is_god_like; | 723 | gScriptp->mGodLike = is_god_like; |
724 | |||
725 | gScriptp->setClassName(class_name); | ||
725 | 726 | ||
726 | gScopeStringTable = new LLStringTable(16384); | 727 | gScopeStringTable = new LLStringTable(16384); |
727 | #ifdef EMERGENCY_DEBUG_PRINTOUTS | 728 | #ifdef EMERGENCY_DEBUG_PRINTOUTS |
@@ -737,34 +738,25 @@ BOOL lscript_compile(const char* src_filename, const char* dst_filename, | |||
737 | #ifdef EMERGENCY_DEBUG_PRINTOUTS | 738 | #ifdef EMERGENCY_DEBUG_PRINTOUTS |
738 | gScriptp->recurse(yyout, 0, 0, LSCP_EMIT_ASSEMBLY, LSPRUNE_INVALID, b_dummy, NULL, type, type, b_dummy_count, NULL, NULL, 0, NULL, 0, NULL); | 739 | gScriptp->recurse(yyout, 0, 0, LSCP_EMIT_ASSEMBLY, LSPRUNE_INVALID, b_dummy, NULL, type, type, b_dummy_count, NULL, NULL, 0, NULL, 0, NULL); |
739 | #endif | 740 | #endif |
740 | #ifdef EMIT_CIL_ASSEMBLER | 741 | if(TRUE == compile_to_mono) |
741 | const char* cil_output_file_name = dst_filename? dst_filename : "lscript.cil"; | ||
742 | LLFILE* cilout = LLFile::fopen(cil_output_file_name, "w"); | ||
743 | if(NULL == cilout) | ||
744 | { | 742 | { |
745 | fprintf(yyout, "Error opening cil output file %s\n", cil_output_file_name); | 743 | gScriptp->recurse(yyout, 0, 0, LSCP_EMIT_CIL_ASSEMBLY, LSPRUNE_INVALID, b_dummy, NULL, type, type, b_dummy_count, NULL, NULL, 0, NULL, 0, NULL); |
746 | } | 744 | } |
747 | else | 745 | else |
748 | { | 746 | { |
749 | gScriptp->recurse(cilout, 0, 0, LSCP_EMIT_CIL_ASSEMBLY, LSPRUNE_INVALID, b_dummy, NULL, type, type, b_dummy_count, NULL, NULL, 0, NULL, 0, NULL); | 747 | gScriptp->recurse(yyout, 0, 0, LSCP_EMIT_BYTE_CODE, LSPRUNE_INVALID, b_dummy, NULL, type, type, b_dummy_count, NULL, NULL, 0, NULL, 0, NULL); |
750 | if(fclose(cilout) == EOF) | ||
751 | { | ||
752 | fprintf(yyout, "Error closing cil output file %s\n", cil_output_file_name); | ||
753 | } | ||
754 | } | 748 | } |
755 | #endif | ||
756 | gScriptp->recurse(yyout, 0, 0, LSCP_EMIT_BYTE_CODE, LSPRUNE_INVALID, b_dummy, NULL, type, type, b_dummy_count, NULL, NULL, 0, NULL, 0, NULL); | ||
757 | } | 749 | } |
758 | delete gScopeStringTable; | 750 | delete gScopeStringTable; |
759 | gScopeStringTable = NULL; | 751 | gScopeStringTable = NULL; |
760 | #ifdef EMERGENCY_DEBUG_PRINTOUTS | 752 | #ifdef EMERGENCY_DEBUG_PRINTOUTS |
761 | fclose(compfile); | 753 | fclose(compfile); |
762 | #endif | 754 | #endif |
755 | fclose(yyout); | ||
763 | } | 756 | } |
764 | fclose(yyout); | 757 | fclose(yyin); |
765 | } | 758 | } |
766 | 759 | ||
767 | fclose(yyin); | ||
768 | delete gAllocationManager; | 760 | delete gAllocationManager; |
769 | delete gScopeStringTable; | 761 | delete gScopeStringTable; |
770 | 762 | ||
@@ -772,13 +764,15 @@ BOOL lscript_compile(const char* src_filename, const char* dst_filename, | |||
772 | } | 764 | } |
773 | 765 | ||
774 | 766 | ||
775 | BOOL lscript_compile(char *filename, BOOL is_god_like = FALSE) | 767 | BOOL lscript_compile(char *filename, BOOL compile_to_mono, BOOL is_god_like = FALSE) |
776 | { | 768 | { |
777 | char src_filename[MAX_STRING]; | 769 | char src_filename[MAX_STRING]; |
778 | sprintf(src_filename, "%s.lsl", filename); | 770 | sprintf(src_filename, "%s.lsl", filename); |
779 | char err_filename[MAX_STRING]; | 771 | char err_filename[MAX_STRING]; |
780 | sprintf(err_filename, "%s.out", filename); | 772 | sprintf(err_filename, "%s.out", filename); |
781 | return lscript_compile(src_filename, NULL, err_filename, is_god_like); | 773 | char class_name[MAX_STRING]; |
774 | sprintf(class_name, "%s", filename); | ||
775 | return lscript_compile(src_filename, NULL, err_filename, compile_to_mono, class_name, is_god_like); | ||
782 | } | 776 | } |
783 | 777 | ||
784 | 778 | ||