Browse Source

More refactoring to improve named symbols

Signed-off-by: Gavin Halliday <gavin.halliday@lexisnexis.com>
Gavin Halliday 13 years ago
parent
commit
3334f894f7
7 changed files with 25 additions and 23 deletions
  1. 9 7
      ecl/hql/hqlexpr.cpp
  2. 2 2
      ecl/hql/hqlexpr.hpp
  3. 3 3
      ecl/hql/hqlexpr.ipp
  4. 4 4
      ecl/hql/hqlgram.y
  5. 4 3
      ecl/hql/hqlgram2.cpp
  6. 2 2
      ecl/hql/hqlrepository.cpp
  7. 1 2
      ecl/hql/hqlutil.cpp

+ 9 - 7
ecl/hql/hqlexpr.cpp

@@ -6835,12 +6835,13 @@ IHqlExpression * createFunctionDefinition(_ATOM name, HqlExprArray & args)
 
 void CHqlScope::defineSymbol(_ATOM _name, _ATOM moduleName, IHqlExpression *value, 
                              bool exported, bool shared, unsigned symbolFlags,
-                             IFileContents *fc, int _bodystart, int lineno, int column)
+                             IFileContents *fc, int lineno, int column,
+                             int _startpos, int _bodypos, int _endpos)
 {
     if (!moduleName)
         moduleName = name;
 
-    IHqlExpression * symbol = createSymbol(_name, moduleName, value, NULL, exported, shared, symbolFlags, fc, _bodystart, lineno, column);
+    IHqlExpression * symbol = createSymbol(_name, moduleName, value, NULL, exported, shared, symbolFlags, fc, lineno, column, _startpos, _bodypos, _endpos);
     defineSymbol(symbol);
 }
 
@@ -8114,7 +8115,7 @@ void addForwardDefinition(IHqlScope * scope, _ATOM symbolName, _ATOM moduleName,
 {
     IHqlExpression * cur = createSymbol(symbolName, moduleName, NULL, NULL,
                             isExported, !isExported, symbolFlags,
-                            contents, 0, startLine, startColumn);
+                            contents, startLine, startColumn, 0, 0, 0);
 
     scope->defineSymbol(cur);
 }
@@ -8157,14 +8158,14 @@ CHqlSyntaxCheckScope::CHqlSyntaxCheckScope(IHqlScope *_parent, IEclRepository *
 
 }
 
-void CHqlSyntaxCheckScope::defineSymbol(_ATOM _name, _ATOM _moduleName, IHqlExpression *value, bool exported, bool shared, unsigned symbolFlags, IFileContents *_fc, int _bodystart, int lineno, int column)
+void CHqlSyntaxCheckScope::defineSymbol(_ATOM _name, _ATOM _moduleName, IHqlExpression *value, bool exported, bool shared, unsigned symbolFlags, IFileContents *_fc, int lineno, int column, int _startpos, int _bodypos, int _endpos)
 {
 #ifdef TRACE_PARTIAL
     DBGLOG("CHqlSyntaxCheckScope::defineSymbol(1) %s", _name->getAtomNamePtr());
 #endif
     redefine.setValue(_name, NULL);
     // MORE: define func/macro etc with parameter?
-    CHqlScope::defineSymbol(_name, _moduleName, value, exported, shared, symbolFlags, _fc, _bodystart, lineno, column);
+    CHqlScope::defineSymbol(_name, _moduleName, value, exported, shared, symbolFlags, _fc, lineno, column, _startpos, _bodypos, _endpos);
 }
 
 void CHqlSyntaxCheckScope::defineSymbol(_ATOM _name, _ATOM _moduleName, IHqlExpression *value, bool exported, bool shared, unsigned symbolFlags)
@@ -9304,11 +9305,12 @@ IHqlExpression * createSymbol(_ATOM name, _ATOM moduleName, IHqlExpression * exp
 
 IHqlExpression * createSymbol(_ATOM _name, _ATOM moduleName, IHqlExpression *expr, IHqlExpression * funcdef,
                              bool exported, bool shared, unsigned symbolFlags,
-                             IFileContents *fc, int _bodystart, int lineno, int column)
+                             IFileContents *fc, int lineno, int column,
+                             int _startpos, int _bodypos, int _endpos)
 {
     return CHqlNamedSymbol::makeSymbol(_name, moduleName, expr, funcdef,
                              exported, shared, symbolFlags,
-                             fc, _bodystart, lineno, column);
+                             fc, _bodypos, lineno, column);
 }
 
 

+ 2 - 2
ecl/hql/hqlexpr.hpp

@@ -1025,7 +1025,7 @@ interface IHqlScope : public IInterface
     virtual bool getProp(_ATOM, StringBuffer &) const = 0;
 
     //IHqlCreateScope
-    virtual void defineSymbol(_ATOM name, _ATOM moduleName, IHqlExpression *value, bool isExported, bool isShared, unsigned flags, IFileContents *fc, int bodystart, int lineno, int column) = 0;
+    virtual void defineSymbol(_ATOM name, _ATOM moduleName, IHqlExpression *value, bool isExported, bool isShared, unsigned flags, IFileContents *fc, int lineno, int column, int _startpos, int _bodypos, int _endpos) = 0;
     virtual void defineSymbol(_ATOM name, _ATOM moduleName, IHqlExpression *value, bool isExported, bool isShared, unsigned flags) = 0;
     virtual void defineSymbol(IHqlExpression * expr) = 0;       // use with great care, expr must be a named symbol.
     virtual void removeSymbol(_ATOM name) = 0;      // use with great care
@@ -1265,7 +1265,7 @@ extern HQL_API IHqlExpression * createSymbol(_ATOM name, IHqlExpression *expr, u
 extern HQL_API IHqlExpression * createSymbol(_ATOM _name, _ATOM _module, IHqlExpression *_expr, bool _exported, bool _shared, unsigned _flags);
 extern HQL_API IHqlExpression * createSymbol(_ATOM _name, _ATOM moduleName, IHqlExpression *expr, IHqlExpression * funcdef,
                                              bool exported, bool shared, unsigned symbolFlags,
-                                             IFileContents *fc, int _bodystart, int lineno, int column);
+                                             IFileContents *fc, int lineno, int column, int _startpos, int _bodypos, int _endpos);
 extern HQL_API IHqlExpression *createAttribute(_ATOM name, IHqlExpression * value = NULL, IHqlExpression * value2 = NULL, IHqlExpression * value3 = NULL);
 extern HQL_API IHqlExpression *createAttribute(_ATOM name, HqlExprArray & args);
 extern HQL_API IHqlExpression *createExprAttribute(_ATOM name, IHqlExpression * value = NULL, IHqlExpression * value2 = NULL, IHqlExpression * value3 = NULL);

+ 3 - 3
ecl/hql/hqlexpr.ipp

@@ -782,7 +782,7 @@ public:
     CHqlDelayedScopeCall(IHqlExpression * _param, ITypeInfo * type, HqlExprArray &parms);
     IMPLEMENT_IINTERFACE_USING(CHqlDelayedCall)
 
-    virtual void defineSymbol(_ATOM name, _ATOM moduleName, IHqlExpression *value, bool isExported, bool isShared, unsigned flags, IFileContents *fc, int bodystart, int lineno, int column) { throwUnexpected(); }
+    virtual void defineSymbol(_ATOM name, _ATOM moduleName, IHqlExpression *value, bool isExported, bool isShared, unsigned flags, IFileContents *fc, int lineno, int column, int _startpos, int _bodypos, int _endpos) { throwUnexpected(); }
     virtual void defineSymbol(_ATOM name, _ATOM moduleName, IHqlExpression *value, bool isExported, bool isShared, unsigned flags) { throwUnexpected(); }
     virtual void defineSymbol(IHqlExpression * expr) { throwUnexpected(); }
     virtual void removeSymbol(_ATOM name) { throwUnexpected(); }
@@ -842,7 +842,7 @@ public:
 
 //interface IHqlScope
     virtual IHqlExpression * queryExpression() { return this; }
-    virtual void defineSymbol(_ATOM name, _ATOM moduleName, IHqlExpression *value, bool isPublic, bool isShared, unsigned symbolFlags, IFileContents *, int bodystart, int lineno, int column);
+    virtual void defineSymbol(_ATOM name, _ATOM moduleName, IHqlExpression *value, bool isPublic, bool isShared, unsigned symbolFlags, IFileContents *, int lineno, int column, int _startpos, int _bodypos, int _endpos);
     virtual void defineSymbol(_ATOM name, _ATOM moduleName, IHqlExpression *value, bool exported, bool shared, unsigned symbolFlags);
     virtual void defineSymbol(IHqlExpression * expr);
     virtual void removeSymbol(_ATOM name);
@@ -1044,7 +1044,7 @@ private:
 public:
     CHqlSyntaxCheckScope(IHqlScope *parent, IEclRepository *_ds, const char *attribute, bool clearImportedModule);
 
-    virtual void defineSymbol(_ATOM name, _ATOM _moduleName, IHqlExpression *value, bool exported, bool shared, unsigned symbolFlags, IFileContents *, int bodystart, int lineno, int column);
+    virtual void defineSymbol(_ATOM name, _ATOM _moduleName, IHqlExpression *value, bool exported, bool shared, unsigned symbolFlags, IFileContents *, int lineno, int column, int _startpos, int _bodypos, int _endpos);
     virtual void defineSymbol(_ATOM name, _ATOM _moduleName, IHqlExpression *value, bool exported, bool shared, unsigned symbolFlags);
     virtual IHqlExpression *lookupSymbol(_ATOM searchName, unsigned lookupFlags, HqlLookupContext & ctx);
 };

+ 4 - 4
ecl/hql/hqlgram.y

@@ -944,8 +944,8 @@ macro
                             //Use a named symbol to associate a line number/column
                             expr = createSymbol(macroAtom, NULL, expr, NULL,
                                                 false, false, (object_type)0,
-                                                NULL, 0,
-                                                yylval.pos.lineno, yylval.pos.column);
+                                                NULL,
+                                                yylval.pos.lineno, yylval.pos.column, 0, 0, 0);
                             $$.setExpr(expr, $1);
                         }
     | COMPLEX_MACRO     {
@@ -960,8 +960,8 @@ macro
                             //Use a named symbol to associate a line number/column
                             expr = createSymbol(macroAtom, NULL, expr, NULL,
                                                 false, false, (object_type)0,
-                                                NULL, 0,
-                                                yylval.pos.lineno, yylval.pos.column);
+                                                NULL,
+                                                yylval.pos.lineno, yylval.pos.column, 0, 0, 0);
 
                             $$.setExpr(expr, $1);
                         }

+ 4 - 3
ecl/hql/hqlgram2.cpp

@@ -1075,7 +1075,7 @@ void HqlGram::processServiceFunction(const attribute & idAttr, _ATOM name, IHqlE
     IHqlExpression * formals = defineScopes.tos().createFormals(oldSetFormat);
     IHqlExpression * defaults = defineScopes.tos().createDefaults();
     IHqlExpression * func = createFunctionDefinition(name, call, formals, defaults, NULL);
-    serviceScope->defineSymbol(name, NULL, func, true, false, 0, NULL, 0, idAttr.pos.lineno, idAttr.pos.column);
+    serviceScope->defineSymbol(name, NULL, func, true, false, 0, NULL, idAttr.pos.lineno, idAttr.pos.column, 0, 0, 0);
     resetParameters();
 }
 
@@ -8710,7 +8710,7 @@ void HqlGram::defineSymbolInScope(IHqlScope * scope, DefineIdSt * defineid, IHql
         expr = createJavadocAnnotation(expr, LINK(doc));
 
     Owned<IFileContents> contents = createFileContentsSubset(lexObject->query_FileContents(), lastpos, semiColonPos+1-lastpos);
-    scope->defineSymbol(defineid->id, moduleName, expr, (defineid->scope & EXPORT_FLAG) != 0, (defineid->scope & SHARED_FLAG) != 0, symbolFlags, contents, assignPos+2-lastpos, idattr.pos.lineno, idattr.pos.column);
+    scope->defineSymbol(defineid->id, moduleName, expr, (defineid->scope & EXPORT_FLAG) != 0, (defineid->scope & SHARED_FLAG) != 0, symbolFlags, contents, idattr.pos.lineno, idattr.pos.column, 0, assignPos+2-lastpos, semiColonPos+1-lastpos);
 }
 
 
@@ -11249,7 +11249,8 @@ IHqlExpression *HqlGram::doParse()
 
     _ATOM moduleName = createIdentifierAtom(globalScope->queryFullName());
     Owned<IFileContents> contents = LINK(lexObject->query_FileContents());
-    containerScope->defineSymbol(expectedAttribute, moduleName, actions.getClear(), true, false, 0, contents, 0, 1, 1);
+    unsigned lengthText = 0;
+    containerScope->defineSymbol(expectedAttribute, moduleName, actions.getClear(), true, false, 0, contents, 1, 1, 0, 0, lengthText);
     return NULL;
 }
 

+ 2 - 2
ecl/hql/hqlrepository.cpp

@@ -221,7 +221,7 @@ public:
         rootScope.setown(createScope());
         IHqlExpression * scope = repository->queryRootScope()->queryExpression();
 
-        rootScope->defineSymbol(name, NULL, LINK(scope), true, false, 0, NULL, 0, 0, 0);
+        rootScope->defineSymbol(name, NULL, LINK(scope), true, false, 0);
     }
 
     IMPLEMENT_IINTERFACE;
@@ -363,7 +363,7 @@ IHqlExpression * CNewEclRepository::createSymbol(IHqlRemoteScope * rScope, IEclS
     default:
         throwUnexpected();
     }
-    return ::createSymbol(eclName, scope->queryName(), body.getClear(), NULL, true, true, symbolFlags, contents, 0, 0, 0);
+    return ::createSymbol(eclName, scope->queryName(), body.getClear(), NULL, true, true, symbolFlags, contents, 0, 0, 0, 0, contents ? contents->length() : 0);
 }
 
 

+ 1 - 2
ecl/hql/hqlutil.cpp

@@ -3844,8 +3844,7 @@ extern HQL_API IHqlExpression * createStoredModule(IHqlExpression * scopeExpr)
                 HqlExprArray meta;
                 value.setown(attachWorkflowOwn(meta, value.getClear(), failure, NULL));
                 newScope->defineSymbol(name, moduleName, value.getClear(), 
-                                       true, false, cur.getSymbolFlags(),
-                                       NULL, 0, 0, 0);
+                                       true, false, cur.getSymbolFlags());
             }
         }
     }