sdk: const correctness
[sdk] / compiler / libec / src / ecdefs.ec
index e101b9f..909efc8 100644 (file)
@@ -21,6 +21,129 @@ import "dbpass"
 
 #include <stdio.h>
 
+#define yylloc _yylloc
+#include "grammar.h"
+#undef yylloc
+
+public enum TokenType
+{
+  identifier = IDENTIFIER,
+  constant = CONSTANT,
+  stringLiteral = STRING_LITERAL,
+  sizeOf = SIZEOF,
+  ptrOp = PTR_OP,
+  incOp = INC_OP,
+  decOp = DEC_OP,
+  leftOp = LEFT_OP,
+  rightOp = RIGHT_OP,
+  leOp = LE_OP,
+  geOp = GE_OP,
+  eqOp = EQ_OP,
+  neOp = NE_OP,
+  andOp = AND_OP,
+  orOp = OR_OP,
+  mulAssign = MUL_ASSIGN,
+  divAssign = DIV_ASSIGN,
+  modAssign = MOD_ASSIGN,
+  addAssign = ADD_ASSIGN,
+  subAssign = SUB_ASSIGN,
+  leftAssign = LEFT_ASSIGN,
+  rightAssign = RIGHT_ASSIGN,
+  andAssign = AND_ASSIGN,
+  xorAssign = XOR_ASSIGN,
+  orAssign = OR_ASSIGN,
+  typeName = TYPE_NAME,
+  _typedef = TYPEDEF,
+  _extern = EXTERN,
+  _static = STATIC,
+  _auto = AUTO,
+  _register = REGISTER,
+  _char = CHAR,
+  _short = SHORT,
+  _int = INT,
+  _uint = UINT,
+  _int64 = INT64,
+  _long = LONG,
+  _signed = SIGNED,
+  _unsigned = UNSIGNED,
+  _float = FLOAT,
+  _double = DOUBLE,
+  _const = CONST,
+  _volatile = VOLATILE,
+  _void = VOID,
+  _valist = VALIST,
+  _struct = STRUCT,
+  _union = UNION,
+  _enum = ENUM,
+  ellipsis = ELLIPSIS,
+  _case = CASE,
+  _default = DEFAULT,
+  _if = IF,
+  _switch = SWITCH,
+  _whilte = WHILE,
+  _do = DO,
+  _for = FOR,
+  _goto = GOTO,
+  _continue = CONTINUE,
+  _break = BREAK,
+  _return = RETURN,
+  ifx = IFX,
+  _else = ELSE,
+  _class = CLASS,
+  thisClass = THISCLASS,
+  className = CLASS_NAME,
+  _property = PROPERTY,
+  setProp = SETPROP,
+  getProp = GETPROP,
+  newOp = NEWOP,
+  _renew = RENEW,
+  _delete = DELETE,
+  _extDecl = EXT_DECL,
+  _extStorage = EXT_STORAGE,
+  _import = IMPORT,
+  _define = DEFINE,
+  _virtual = VIRTUAL,
+  attrib = ATTRIB,
+  _public = PUBLIC,
+  _priate = PRIVATE,
+  typedObject = TYPED_OBJECT,
+  anyObject = ANY_OBJECT,
+  _incref = _INCREF,
+  extension = EXTENSION,
+  ___asm = ASM,
+  _typeof = TYPEOF,
+  _watch = WATCH,
+  stopWatching = STOPWATCHING,
+  fireWatchers = FIREWATCHERS,
+  _watchable = WATCHABLE,
+  classDesigner = CLASS_DESIGNER,
+  classNoExpansion = CLASS_NO_EXPANSION,
+  classFixed = CLASS_FIXED,
+  isPropSet = ISPROPSET,
+  classDefaultProperty = CLASS_DEFAULT_PROPERTY,
+  propertyCategory = PROPERTY_CATEGORY,
+  classData = CLASS_DATA,
+  classProperty = CLASS_PROPERTY,
+  subClass = SUBCLASS,
+  nameSpace = NAMESPACE,
+  new0Op = NEW0OP,
+  renew0Op = RENEW0,
+  vaArg = VAARG,
+  dbTable = DBTABLE,
+  dbField = DBFIELD,
+  dbIndex = DBINDEX,
+  databaseOpen = DATABASE_OPEN,
+  alignOf = ALIGNOF,
+  attribDep = ATTRIB_DEP,
+  _attrib = __ATTRIB,
+  BOOL = BOOL,
+  _BOOL = _BOOL,
+  complex = _COMPLEX,
+  imaginary = _IMAGINARY,
+  _restrict = RESTRICT,
+  _thread = THREAD
+};
+
 enum Order { ascending, descending };
 
 public class DBTableDef : struct
@@ -74,14 +197,16 @@ public void SetMainModule(ModuleImport moduleImport) { mainModule = moduleImport
 File fileInput;
 public void SetFileInput(File file) { fileInput = file; }
 char * symbolsDir = null;
-public void SetSymbolsDir(char * s) {
+public void SetSymbolsDir(const char * s) {
    delete symbolsDir;
    symbolsDir = CopyString(s);
-} public char * GetSymbolsDir() { return symbolsDir ? symbolsDir : ""; }
-char * outputFile;
-public void SetOutputFile(char * s) { outputFile = s; } public char * GetOutputFile() { return outputFile; }
-char * sourceFile;
-public void SetSourceFile(char * s) { sourceFile = s; } public char * GetSourceFile() { return sourceFile; }
+} public const char * GetSymbolsDir() { return symbolsDir ? symbolsDir : ""; }
+const char * outputFile;
+public void SetOutputFile(const char * s) { outputFile = s; } public const char * GetOutputFile() { return outputFile; }
+const char * sourceFile;
+public void SetSourceFile(const char * s) { sourceFile = s; } public const char * GetSourceFile() { return sourceFile; }
+const char * i18nModuleName;
+public void SetI18nModuleName(const char * s) { i18nModuleName = s; } public const char * GetI18nModuleName() { return i18nModuleName; }
 
 public void SetGlobalContext(Context context) { globalContext = context; } public Context GetGlobalContext() { return globalContext; }
 public void SetTopContext(Context context) { topContext = context; } public Context GetTopContext() { return topContext; }
@@ -114,7 +239,8 @@ public char * PassArg(char * output, const char * input)
    const char * escCharsQuoted = "\"()$";
 #endif
    bool quoting = false;
-   char *o = output, *i = input, *l = input;
+   char *o = output;
+   const char *i = input, *l = input;
 #ifdef __WIN32__
    while(*l && !strchr(escChars, *l)) l++;
    if(*l) quoting = true;
@@ -280,12 +406,13 @@ public enum ExpressionType
    identifierExp, instanceExp, constantExp, stringExp, opExp,
    bracketsExp, indexExp, callExp, memberExp, pointerExp, typeSizeExp,
    castExp, conditionExp, newExp, renewExp, classSizeExp,
-   dummyExp, dereferenceErrorExp, symbolErrorExp, classMemberSymbolErrorExp,
-   structMemberSymbolErrorExp, memoryErrorExp, unknownErrorExp,
-   noDebuggerErrorExp, debugStateErrorExp,
+   dummyExp, dereferenceErrorExp, symbolErrorExp,
+   memberSymbolErrorExp, memoryErrorExp, unknownErrorExp,
+   noDebuggerErrorExp,
    extensionCompoundExp, classExp, classDataExp, new0Exp, renew0Exp,
    dbopenExp, dbfieldExp, dbtableExp, dbindexExp, extensionExpressionExp, extensionInitializerExp,
-   vaArgExp, arrayExp, typeAlignExp
+   vaArgExp, arrayExp, typeAlignExp,
+   memberPropertyErrorExp, functionCallErrorExp, divideBy0ErrorExp
 };
 
 public enum MemberType
@@ -315,7 +442,7 @@ public:
    TemplateArgument defaultArgument;
 
    // For type parameters
-   char * dataTypeString;
+   const char * dataTypeString;
    Type baseType;
 }
 
@@ -369,7 +496,7 @@ public:
          Identifier id;
          OldList * list;
          OldList * baseSpecs;
-         OldList * definitions;
+         OldList/*<ClassDef>*/ * definitions;
          bool addNameSpace;
          Context ctx;
          ExtDecl extDeclStruct;
@@ -429,7 +556,11 @@ public:
       };
       Statement compound;
       Instantiation instance;
-      char * string;
+      struct
+      {
+         char * string;
+         bool intlString;
+      };
       OldList * list;
       struct
       {
@@ -528,6 +659,7 @@ public:
    bool addedThis;
    bool needCast;
    bool thisPtr;
+   bool opDestType;
 
    void Clear()
    {
@@ -546,6 +678,7 @@ public:
       addedThis = false;
       needCast = false;
       thisPtr = false;
+      opDestType = false;
    }
 };
 
@@ -623,6 +756,7 @@ public:
       OldList * list;
    };
    bool isConstant;
+   Identifier id;
 };
 
 public class InitDeclarator : struct
@@ -661,6 +795,7 @@ class AsmField : struct
    Location loc;
    char * command;
    Expression expression;
+   Identifier symbolic;
 };
 
 public enum StmtType { labeledStmt, caseStmt, compoundStmt,
@@ -916,9 +1051,13 @@ public:
    Statement setStmt;
    Statement issetStmt;
    Symbol symbol;
-   bool conversion;
-   bool isWatchable;
    Expression category;
+   struct
+   {
+      bool conversion:1;
+      bool isWatchable:1;
+      bool isDBProp:1;
+   };
 };
 
 public class ClassDef : struct
@@ -1057,7 +1196,7 @@ public:
    OldList methods;
    OldList properties;
    bool itself;
-   bool isRemote;
+   int isRemote;
 };
 
 public class FunctionImport : struct
@@ -1101,7 +1240,7 @@ public enum TypeKind
    voidType, charType, shortType, intType, int64Type, longType, floatType,
    doubleType, classType, structType, unionType, functionType, arrayType, pointerType,
    ellipsisType, enumType, methodType, vaListType, /*typedObjectType, anyObjectType, classPointerType, */ dummyType,
-   subClassType, templateType, thisClassType, intPtrType, intSizeType
+   subClassType, templateType, thisClassType, intPtrType, intSizeType, _BoolType
 };
 
 public class Type : struct
@@ -1171,8 +1310,11 @@ public:
    bool attrStdcall:1;
    bool declaredWithStruct:1;
    bool typedByReference:1;      // Originally typed by reference, regardless of class type
+   bool casted:1;
+   // TODO: Add _Complex & _Imaginary support
+   // bool complex:1, imaginary:1;
 
-   char * OnGetString(char * tempString, void * fieldData, bool * needClass)
+   const char * OnGetString(char * tempString, void * fieldData, bool * needClass)
    {
       Type type = (Type)this;
       tempString[0] = '\0';
@@ -1276,7 +1418,7 @@ define MAX_INCLUDE_DEPTH = 30;
 
 #include <stdarg.h>
 
-void Compiler_Error(char * format, ...)
+void Compiler_Error(const char * format, ...)
 {
    if(inCompiler)
    {
@@ -1304,7 +1446,7 @@ void Compiler_Error(char * format, ...)
          */
 #ifdef _DEBUG
          if(!yylloc.start.line)
-            printf("");
+            printf("no line");
 #endif
 
          //printf("(%d, %d) : error: ", yylloc.start.line, yylloc.start.charPos);
@@ -1328,17 +1470,19 @@ void Compiler_Error(char * format, ...)
 int numWarnings;
 public int GetNumWarnings() { return numWarnings; }
 
-void Compiler_Warning(char * format, ...)
+void Compiler_Warning(const char * format, ...)
 {
    if(inCompiler)
    {
       va_list args;
       char string[10000];
+      char fileName[MAX_FILENAME];
 
       if(yylloc.start.included)
       {
+         String include = GetIncludeFileFromID(yylloc.start.included);
          GetWorkingDir(string, sizeof(string));
-         PathCat(string, GetIncludeFileFromID(yylloc.start.included));
+         PathCat(string, include);
       }
       else
       {
@@ -1346,6 +1490,10 @@ void Compiler_Warning(char * format, ...)
          PathCat(string, sourceFile);
       }
 
+      // Skip these warnings from MinGW-w64 GCC 4.8 in intrin-impl.h
+      GetLastDirectory(string, fileName);
+      if(!strcmp(fileName, "intrin-impl.h")) return;
+
       printf(string);
 
       //printf("(%d, %d) : warning: ", yylloc.start.line, yylloc.start.charPos);
@@ -1362,7 +1510,7 @@ void Compiler_Warning(char * format, ...)
 bool parseError;
 bool skipErrors;
 
-int yyerror(char * s)
+int yyerror()
 {
    if(!skipErrors)
    {