expression_yylloc.start = expression_yylloc.end = *pos;
}
+struct LexerBackup
+{
+struct Location yylloc;
+struct Location type_yylloc;
+struct Location expression_yylloc;
+int declMode;
+int defaultDeclMode;
+struct __ecereNameSpace__ecere__com__Instance * fileInput;
+YY_BUFFER_STATE include_stack[30];
+struct __ecereNameSpace__ecere__com__Instance * fileStack[30];
+char sourceFileStack[30][797];
+struct Location locStack[30];
+int declModeStack[30];
+int include_stack_ptr;
+YY_BUFFER_STATE buffer;
+int yy_n_chars;
+char * yytext;
+char * yy_c_buf_p;
+FILE * yyin;
+char yy_hold_char;
+int yychar;
+int yy_init;
+int yy_start;
+} __attribute__ ((gcc_struct));
+
+static struct __ecereNameSpace__ecere__com__Class * __ecereClass_LexerBackup;
+
+extern void * memcpy(void * , const void * , size_t size);
+
+extern int yychar;
+
+extern void * __ecereNameSpace__ecere__com__eInstance_New(struct __ecereNameSpace__ecere__com__Class * _class);
+
+struct __ecereNameSpace__ecere__com__Instance * pushLexer()
+{
+struct __ecereNameSpace__ecere__com__Instance * backup = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_LexerBackup);
+
+((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->yylloc = yylloc;
+((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->type_yylloc = type_yylloc;
+((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->expression_yylloc = expression_yylloc;
+((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->fileInput = fileInput;
+memcpy(((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->include_stack, include_stack, sizeof include_stack);
+memcpy(((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->fileStack, fileStack, sizeof fileStack);
+memcpy(((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->sourceFileStack, sourceFileStack, sizeof sourceFileStack);
+memcpy(((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->locStack, locStack, sizeof locStack);
+memcpy(((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->declModeStack, declModeStack, sizeof declModeStack);
+((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->include_stack_ptr = include_stack_ptr;
+((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->defaultDeclMode = defaultDeclMode;
+((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->declMode = declMode;
+((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->buffer = yy_current_buffer;
+((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->yy_n_chars = yy_n_chars;
+((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->yytext = yytext;
+((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->yy_c_buf_p = yy_c_buf_p;
+((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->yyin = yyin;
+((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->yy_hold_char = yy_hold_char;
+((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->yychar = yychar;
+((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->yy_init = yy_init;
+((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->yy_start = yy_start;
+yy_init = 1;
+yy_current_buffer = 0;
+yylloc.start.charPos = yylloc.end.charPos = 1;
+yylloc.start.line = yylloc.end.line = 1;
+yylloc.start.pos = yylloc.end.pos = 0;
+yylloc.start.included = yylloc.end.included = 0;
+expression_yylloc.start.charPos = expression_yylloc.end.charPos = 1;
+expression_yylloc.start.line = expression_yylloc.end.line = 1;
+expression_yylloc.start.pos = expression_yylloc.end.pos = 0;
+expression_yylloc.start.included = expression_yylloc.end.included = 0;
+type_yylloc.start.charPos = type_yylloc.end.charPos = 1;
+type_yylloc.start.line = type_yylloc.end.line = 1;
+type_yylloc.start.pos = type_yylloc.end.pos = 0;
+type_yylloc.start.included = type_yylloc.end.included = 0;
+include_stack_ptr = 0;
+return backup;
+}
+
+void popLexer(struct __ecereNameSpace__ecere__com__Instance * backup)
+{
+yylloc = ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->yylloc;
+type_yylloc = ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->type_yylloc;
+expression_yylloc = ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->expression_yylloc;
+fileInput = ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->fileInput;
+memcpy(include_stack, ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->include_stack, sizeof include_stack);
+memcpy(fileStack, ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->fileStack, sizeof fileStack);
+memcpy(sourceFileStack, ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->sourceFileStack, sizeof sourceFileStack);
+memcpy(locStack, ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->locStack, sizeof locStack);
+memcpy(declModeStack, ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->declModeStack, sizeof declModeStack);
+include_stack_ptr = ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->include_stack_ptr;
+defaultDeclMode = ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->defaultDeclMode;
+declMode = ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->declMode;
+yy_current_buffer = ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->buffer;
+yy_n_chars = ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->yy_n_chars;
+yytext = ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->yytext;
+yy_c_buf_p = ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->yy_c_buf_p;
+yyin = ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->yyin;
+yy_hold_char = ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->yy_hold_char;
+yychar = ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->yychar;
+yy_init = ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->yy_init;
+yy_start = ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->yy_start;
+(__ecereNameSpace__ecere__com__eInstance_DecRef(backup), backup = 0);
+}
+
extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_RegisterClass(int type, char * name, char * baseName, int size, int sizeClass, unsigned int (* Constructor)(void * ), void (* Destructor)(void * ), struct __ecereNameSpace__ecere__com__Instance * module, int declMode, int inheritanceAccess);
extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__NameSpace;
__ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetEchoOn", "void SetEchoOn(bool b)", SetEchoOn, module, 1);
__ecereNameSpace__ecere__com__eSystem_RegisterFunction("TESTTTT", "void TESTTTT(void)", TESTTTT, module, 2);
__ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetSomeSourceFileStack", "void SetSomeSourceFileStack(char * fileName, int index)", SetSomeSourceFileStack, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("yywrap", "int yywrap(void)", yywrap, module, 2);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("comment", "int comment(void)", comment, module, 2);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("commentCPP", "int commentCPP(void)", commentCPP, module, 2);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("preprocessor", "int preprocessor(void)", preprocessor, module, 2);
__ecereNameSpace__ecere__com__eSystem_RegisterFunction("resetScanner", "void resetScanner(void)", resetScanner, module, 1);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("resetScannerPos", "void resetScannerPos(CodePosition pos)", resetScannerPos, module, 2);
+class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(0, "LexerBackup", 0, sizeof(struct LexerBackup), 0, 0, 0, module, 2, 1);
+if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + 24)))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + 24)))->application && class)
+__ecereClass_LexerBackup = class;
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("pushLexer", "LexerBackup pushLexer(void)", pushLexer, module, 2);
+__ecereNameSpace__ecere__com__eSystem_RegisterFunction("popLexer", "void popLexer(LexerBackup backup)", popLexer, module, 2);
}
void __ecereUnregisterModule_lexer(struct __ecereNameSpace__ecere__com__Instance * module)
extern char * __ecereNameSpace__ecere__sys__CopyString(char * string);
+extern struct __ecereNameSpace__ecere__com__Instance * pushLexer(void);
+
extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_OpTable;
struct OpTable
struct OpTable ops;
} __attribute__ ((gcc_struct));
-extern struct Location yylloc;
-
-extern struct __ecereNameSpace__ecere__com__Instance * fileInput;
-
-extern int declMode;
-
-extern void resetScanner();
-
extern struct Expression * ParseExpressionString(char * expression);
extern struct Type * ProcessTypeString(char * string, unsigned int staticMethod);
extern void FreeExpression(struct Expression * exp);
-extern void resetScannerPos(struct CodePosition * pos);
+extern void popLexer(struct __ecereNameSpace__ecere__com__Instance * backup);
extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassTemplateParameter;
int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Eof;
-int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek;
-
struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(struct __ecereNameSpace__ecere__sys__BinaryTree * this, char * key);
int __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_CompareString(struct __ecereNameSpace__ecere__sys__BinaryTree * this, char * a, char * b);
__ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
if(regClass && strcmp(line, "[None]"))
{
+struct __ecereNameSpace__ecere__com__Instance * backup = pushLexer();
struct Operand op;
struct Expression * exp;
-struct Location oldLocation = yylloc;
-struct __ecereNameSpace__ecere__com__Instance * backFileInput = fileInput;
-declMode = (int)0;
-resetScanner();
exp = ParseExpressionString(line);
if(info)
exp->destType = ProcessTypeString(info, 0x0);
op = GetOperand(exp);
defaultArg.expression.ui64 = op.ui64;
FreeExpression(exp);
-resetScanner();
-yylloc = oldLocation;
-fileInput = backFileInput;
-if(fileInput)
-{
-((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))fileInput->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(fileInput, yylloc.start.pos, 0);
-resetScannerPos(&yylloc.start);
-yychar = -2;
-}
+popLexer(backup);
}
break;
case 1:
#line 308 "lexer.l"
+private:
+
yywrap()
{
return(1);
type_yylloc.start = type_yylloc.end = pos;
expression_yylloc.start = expression_yylloc.end = pos;
}
+
+class LexerBackup
+{
+ YYLTYPE yylloc;
+ YYLTYPE type_yylloc;
+ YYLTYPE expression_yylloc;
+
+ AccessMode declMode;
+ AccessMode defaultDeclMode;
+
+ File fileInput;
+ YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];
+ File fileStack[MAX_INCLUDE_DEPTH];
+ char sourceFileStack[MAX_INCLUDE_DEPTH][MAX_LOCATION];
+ YYLTYPE locStack[MAX_INCLUDE_DEPTH];
+ AccessMode declModeStack[MAX_INCLUDE_DEPTH];
+ int include_stack_ptr;
+ YY_BUFFER_STATE buffer;
+
+ int yy_n_chars;
+ char * yytext_ptr;
+ char * yy_c_buf_p;
+ FILE * yyin;
+ char yy_hold_char;
+ int yychar;
+ int yy_init;
+ int yy_start;
+
+};
+
+LexerBackup pushLexer()
+{
+ LexerBackup backup { };
+
+ backup.yylloc = yylloc;
+ backup.type_yylloc = type_yylloc;
+ backup.expression_yylloc = expression_yylloc;
+ backup.fileInput = fileInput;
+ memcpy(backup.include_stack, include_stack, sizeof(include_stack));
+ memcpy(backup.fileStack, fileStack, sizeof(fileStack));
+ memcpy(backup.sourceFileStack, sourceFileStack, sizeof(sourceFileStack));
+ memcpy(backup.locStack, locStack, sizeof(locStack));
+ memcpy(backup.declModeStack, declModeStack, sizeof(declModeStack));
+ backup.include_stack_ptr = include_stack_ptr;
+ backup.defaultDeclMode = defaultDeclMode;
+ backup.declMode = declMode;
+ backup.buffer = yy_current_buffer;
+
+ backup.yy_n_chars = yy_n_chars;
+ backup.yytext_ptr = yytext_ptr;
+ backup.yy_c_buf_p = yy_c_buf_p;
+ backup.yyin = yyin;
+ backup.yy_hold_char = yy_hold_char;
+ backup.yychar = yychar;
+ backup.yy_init = yy_init;
+ backup.yy_start = yy_start;
+
+ yy_init = 1;
+
+ yy_current_buffer = 0;
+
+ yylloc.start.charPos = yylloc.end.charPos = 1;
+ yylloc.start.line = yylloc.end.line = 1;
+ yylloc.start.pos = yylloc.end.pos = 0;
+ yylloc.start.included = yylloc.end.included = 0;
+
+ expression_yylloc.start.charPos = expression_yylloc.end.charPos = 1;
+ expression_yylloc.start.line = expression_yylloc.end.line = 1;
+ expression_yylloc.start.pos = expression_yylloc.end.pos = 0;
+ expression_yylloc.start.included = expression_yylloc.end.included = 0;
+
+ type_yylloc.start.charPos = type_yylloc.end.charPos = 1;
+ type_yylloc.start.line = type_yylloc.end.line = 1;
+ type_yylloc.start.pos = type_yylloc.end.pos = 0;
+ type_yylloc.start.included = type_yylloc.end.included = 0;
+
+ include_stack_ptr = 0;
+
+ return backup;
+}
+
+void popLexer(LexerBackup backup)
+{
+ yylloc = backup.yylloc;
+ type_yylloc = backup.type_yylloc;
+ expression_yylloc = backup.expression_yylloc;
+ fileInput = backup.fileInput;
+ memcpy(include_stack, backup.include_stack, sizeof(include_stack));
+ memcpy(fileStack, backup.fileStack, sizeof(fileStack));
+ memcpy(sourceFileStack, backup.sourceFileStack, sizeof(sourceFileStack));
+ memcpy(locStack, backup.locStack, sizeof(locStack));
+ memcpy(declModeStack, backup.declModeStack, sizeof(declModeStack));
+ include_stack_ptr = backup.include_stack_ptr;
+ defaultDeclMode = backup.defaultDeclMode;
+ declMode = backup.declMode;
+
+ // yy_switch_to_buffer(backup.buffer);
+ yy_current_buffer = backup.buffer;
+ yy_n_chars = backup.yy_n_chars;
+ yytext_ptr = backup.yytext_ptr;
+ yy_c_buf_p = backup.yy_c_buf_p;
+ yyin = backup.yyin;
+ yy_hold_char = backup.yy_hold_char;
+ yychar = backup.yychar;
+ yy_init = backup.yy_init;
+ yy_start = backup.yy_start;
+
+ delete backup;
+}
%%
+private:
+
yywrap()
{
return(1);
type_yylloc.start = type_yylloc.end = pos;
expression_yylloc.start = expression_yylloc.end = pos;
}
+
+class LexerBackup
+{
+ YYLTYPE yylloc;
+ YYLTYPE type_yylloc;
+ YYLTYPE expression_yylloc;
+
+ AccessMode declMode;
+ AccessMode defaultDeclMode;
+
+ File fileInput;
+ YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];
+ File fileStack[MAX_INCLUDE_DEPTH];
+ char sourceFileStack[MAX_INCLUDE_DEPTH][MAX_LOCATION];
+ YYLTYPE locStack[MAX_INCLUDE_DEPTH];
+ AccessMode declModeStack[MAX_INCLUDE_DEPTH];
+ int include_stack_ptr;
+ YY_BUFFER_STATE buffer;
+
+ int yy_n_chars;
+ char * yytext_ptr;
+ char * yy_c_buf_p;
+ FILE * yyin;
+ char yy_hold_char;
+ int yychar;
+ int yy_init;
+ int yy_start;
+
+};
+
+LexerBackup pushLexer()
+{
+ LexerBackup backup { };
+
+ backup.yylloc = yylloc;
+ backup.type_yylloc = type_yylloc;
+ backup.expression_yylloc = expression_yylloc;
+ backup.fileInput = fileInput;
+ memcpy(backup.include_stack, include_stack, sizeof(include_stack));
+ memcpy(backup.fileStack, fileStack, sizeof(fileStack));
+ memcpy(backup.sourceFileStack, sourceFileStack, sizeof(sourceFileStack));
+ memcpy(backup.locStack, locStack, sizeof(locStack));
+ memcpy(backup.declModeStack, declModeStack, sizeof(declModeStack));
+ backup.include_stack_ptr = include_stack_ptr;
+ backup.defaultDeclMode = defaultDeclMode;
+ backup.declMode = declMode;
+ backup.buffer = yy_current_buffer;
+
+ backup.yy_n_chars = yy_n_chars;
+ backup.yytext_ptr = yytext_ptr;
+ backup.yy_c_buf_p = yy_c_buf_p;
+ backup.yyin = yyin;
+ backup.yy_hold_char = yy_hold_char;
+ backup.yychar = yychar;
+ backup.yy_init = yy_init;
+ backup.yy_start = yy_start;
+
+ yy_init = 1;
+
+ yy_current_buffer = 0;
+
+ yylloc.start.charPos = yylloc.end.charPos = 1;
+ yylloc.start.line = yylloc.end.line = 1;
+ yylloc.start.pos = yylloc.end.pos = 0;
+ yylloc.start.included = yylloc.end.included = 0;
+
+ expression_yylloc.start.charPos = expression_yylloc.end.charPos = 1;
+ expression_yylloc.start.line = expression_yylloc.end.line = 1;
+ expression_yylloc.start.pos = expression_yylloc.end.pos = 0;
+ expression_yylloc.start.included = expression_yylloc.end.included = 0;
+
+ type_yylloc.start.charPos = type_yylloc.end.charPos = 1;
+ type_yylloc.start.line = type_yylloc.end.line = 1;
+ type_yylloc.start.pos = type_yylloc.end.pos = 0;
+ type_yylloc.start.included = type_yylloc.end.included = 0;
+
+ include_stack_ptr = 0;
+
+ return backup;
+}
+
+void popLexer(LexerBackup backup)
+{
+ yylloc = backup.yylloc;
+ type_yylloc = backup.type_yylloc;
+ expression_yylloc = backup.expression_yylloc;
+ fileInput = backup.fileInput;
+ memcpy(include_stack, backup.include_stack, sizeof(include_stack));
+ memcpy(fileStack, backup.fileStack, sizeof(fileStack));
+ memcpy(sourceFileStack, backup.sourceFileStack, sizeof(sourceFileStack));
+ memcpy(locStack, backup.locStack, sizeof(locStack));
+ memcpy(declModeStack, backup.declModeStack, sizeof(declModeStack));
+ include_stack_ptr = backup.include_stack_ptr;
+ defaultDeclMode = backup.defaultDeclMode;
+ declMode = backup.declMode;
+
+ // yy_switch_to_buffer(backup.buffer);
+ yy_current_buffer = backup.buffer;
+ yy_n_chars = backup.yy_n_chars;
+ yytext_ptr = backup.yytext_ptr;
+ yy_c_buf_p = backup.yy_c_buf_p;
+ yyin = backup.yyin;
+ yy_hold_char = backup.yy_hold_char;
+ yychar = backup.yychar;
+ yy_init = backup.yy_init;
+ yy_start = backup.yy_start;
+
+ delete backup;
+}
import "ecdefs"
+import "lexer"
extern int yychar;
f.GetLine(line, sizeof(line)); TrimLSpaces(line, line);
if(regClass && strcmp(line, "[None]"))
{
+ LexerBackup backup = pushLexer(); // We currently don't have a separate Lexer instance for TU/Type/Expression
Operand op;
Expression exp;
- Location oldLocation = yylloc;
-
- File backFileInput = fileInput;
- declMode = 0;
- resetScanner();
exp = ParseExpressionString(line);
if(info)
defaultArg.expression.ui64 = op.ui64;
FreeExpression(exp);
- // TESTING THIS SCANNER RESUME STUFF
- resetScanner();
- yylloc = oldLocation;
- fileInput = backFileInput;
- if(fileInput)
- {
- fileInput.Seek(yylloc.start.pos, start);
- resetScannerPos(&yylloc.start);
- yychar = -2;
- }
+ popLexer(backup);
}
break;
case identifier:
-import "Display"
-
namespace gfx;
+import "Display"
+
#include <stdarg.h>
public struct ColorKey