aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/lscript/lscript_compile/indra.l
diff options
context:
space:
mode:
Diffstat (limited to 'linden/indra/lscript/lscript_compile/indra.l')
-rw-r--r--linden/indra/lscript/lscript_compile/indra.l42
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
682BOOL lscript_compile(const char* src_filename, const char* dst_filename, 681BOOL 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
775BOOL lscript_compile(char *filename, BOOL is_god_like = FALSE) 767BOOL 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