3 //extern Class thisClass;
4 extern Class insideClass;
5 extern Type instanceType;
6 extern char * instanceName;
7 extern Expression paramsInsideExp;
9 extern Type functionType;
11 static bool insideParams;
12 static Class currentClass;
13 static bool isAfterEqual;
14 static bool allocedDummyExp;
16 static bool InsideIncl(Location loc, int line, int charPos)
19 return (loc.start.line < line || (loc.start.line == line && loc.start.charPos <= charPos)) &&
20 (loc.end.line > line || (loc.end.line == line && loc.end.charPos >= charPos));
22 return !loc.start.included && (loc.start.line < line || (loc.start.line == line && loc.start.charPos <= charPos)) &&
23 (loc.end.line > line || (loc.end.line == line && loc.end.charPos >= charPos));
26 static bool Inside(Location loc, int line, int charPos)
28 return !loc.start.included && (loc.start.line < line || (loc.start.line == line && loc.start.charPos < charPos)) &&
29 (loc.end.line > line || (loc.end.line == line && loc.end.charPos > charPos));
32 static bool InsideEndIncl(Location loc, int line, int charPos)
34 return !loc.start.included && (loc.start.line < line || (loc.start.line == line && loc.start.charPos < charPos)) &&
35 (loc.end.line > line || (loc.end.line == line && loc.end.charPos >= charPos));
38 Identifier FindParamsIdentifier(Identifier id, int line, int charPos)
40 //if(id.loc.end.line == line && id.loc.end.charPos == charPos)
41 //if(InsideIncl(&id.loc.end.line == line && id.loc.end.charPos == charPos)
46 Identifier FindParamsExpression(Expression exp, int line, int charPos)
48 Identifier idResult = null;
49 Expression oldExp = paramsInsideExp;
51 paramsInsideExp = exp;
55 if(InsideIncl(&exp._new.size.loc, line, charPos))
57 idResult = FindParamsExpression(exp._new.size, line, charPos);
58 if(idResult) return idResult;
62 if(InsideIncl(&exp._renew.exp.loc, line, charPos))
64 idResult = FindParamsExpression(exp._renew.exp, line, charPos);
65 if(idResult) return idResult;
67 if(InsideIncl(&exp._renew.size.loc, line, charPos))
69 idResult = FindParamsExpression(exp._renew.size, line, charPos);
70 if(idResult) return idResult;
75 idResult = FindParamsIdentifier(exp.identifier, line, charPos);
76 if(idResult) return idResult;
80 if(InsideIncl(&exp.instance.loc, line, charPos))
82 idResult = FindParamsInstance(exp.instance, line, charPos);
83 if(idResult) return idResult;
91 if(InsideIncl(&exp.op.exp1.loc, line, charPos))
93 idResult = FindParamsExpression(exp.op.exp1, line, charPos);
94 if(idResult) return idResult;
99 // Changed this here, assuming this was changed first in findCtx and not needed here...
100 // Bug when "a = atoi()" parameters popup dissappear when on the a of atoi
101 if(InsideIncl(&exp.op.exp2.loc, line, charPos))
102 //if(InsideEndIncl(&exp.op.exp2.loc, line, charPos))
104 idResult = FindParamsExpression(exp.op.exp2, line, charPos);
105 if(idResult) return idResult;
107 paramsInsideExp = exp.op.exp2;
112 Expression expression;
114 for(expression = exp.list->first; expression; expression = expression.next)
116 if(InsideIncl(&expression.loc, line, charPos))
118 idResult = FindParamsExpression(expression, line, charPos);
119 if(idResult) return idResult;
126 Expression expression;
127 if(InsideIncl(&exp.index.exp.loc, line, charPos))
129 idResult = FindParamsExpression(exp.index.exp, line, charPos);
130 if(idResult) return idResult;
133 for(expression = exp.index.index->first; expression; expression = expression.next)
135 if(InsideIncl(&expression.loc, line, charPos))
137 idResult = FindParamsExpression(expression, line, charPos);
138 if(idResult) return idResult;
146 Type type = exp.call.exp.expType;
148 if(InsideIncl(&exp.call.exp.loc, line, charPos))
150 idResult = FindParamsExpression(exp.call.exp, line, charPos);
151 // Check for type here?
152 if(!functionType && !instanceType)
155 if(paramsInsideExp == exp.call.exp)
156 paramsInsideExp = exp;
158 if(idResult) return idResult;
161 if(exp.call.argLoc.start.line > line || (line == exp.call.argLoc.start.line && exp.call.argLoc.start.charPos >= charPos))
166 if(exp.call.arguments)
168 Expression expression;
170 for(expression = exp.call.arguments->first; expression; expression = expression.next)
172 if(InsideIncl(&expression.loc, line, charPos) || (expression.loc.end.line > line || (line == expression.loc.end.line && expression.loc.end.charPos > charPos)))
174 idResult = FindParamsExpression(expression, line, charPos);
176 // TOCHECK: Verify && vs || priority here
177 if((functionType && paramsID != -1) || instanceType)
185 if(exp.call.argLoc.end.line < line || (line == exp.call.argLoc.end.line && exp.call.argLoc.end.charPos <= charPos))
190 if(type && (type.kind == functionType || type.kind == methodType))
194 if(type.kind == methodType)
195 type = type.method.dataType;
197 paramsInsideExp = exp;
201 for(param = type.params.first, c = 0; c<arg && param; c++, param = (param.kind == ellipsisType ? param : param.next));
202 if(!param) paramsID = -1;
209 if(InsideIncl(&exp.member.exp.loc, line, charPos))
211 idResult = FindParamsExpression(exp.member.exp, line, charPos);
212 if(idResult) return idResult;
216 if(InsideIncl(&exp.member.exp.loc, line, charPos))
218 idResult = FindParamsExpression(exp.member.exp, line, charPos);
219 if(idResult) return idResult;
225 if(InsideIncl(&exp.cast.exp.loc, line, charPos))
227 idResult = FindParamsExpression(exp.cast.exp, line, charPos);
228 if(idResult) return idResult;
232 if(Inside(&exp.cond.cond.loc, line, charPos))
234 idResult = FindParamsExpression(exp.cond.cond, line, charPos);
235 if(idResult) return idResult;
239 Expression expression;
240 for(expression = exp.cond.exp->first; expression; expression = expression.next)
242 if(InsideIncl(&expression.loc, line, charPos))
244 idResult = FindParamsExpression(expression, line, charPos);
245 if(idResult) return idResult;
249 if(InsideIncl(&exp.cond.elseExp.loc, line, charPos))
251 idResult = FindParamsExpression(exp.cond.elseExp, line, charPos);
252 if(idResult) return idResult;
256 paramsInsideExp = oldExp;
260 static Identifier FindParamsStatement(Statement stmt, int line, int charPos)
267 if(InsideIncl(&stmt.labeled.stmt.loc, line, charPos))
268 return FindParamsStatement(stmt.labeled.stmt, line, charPos);
271 if(stmt.caseStmt.exp)
273 if(InsideIncl(&stmt.caseStmt.exp.loc, line, charPos))
274 return FindParamsExpression(stmt.caseStmt.exp, line, charPos);
277 if(stmt.caseStmt.stmt)
279 if(InsideIncl(&stmt.caseStmt.stmt.loc, line, charPos))
280 return FindParamsStatement(stmt.caseStmt.stmt, line, charPos);
283 case badDeclarationStmt:
285 Declaration decl = stmt.decl;
286 if(InsideIncl(&decl.loc, line, charPos))
288 idResult = FindParamsDeclaration(decl, line, charPos);
289 if(idResult) return idResult;
295 if(!stmt.compound.isSwitch)
296 SetCurrentContext(stmt.compound.context);
297 if(stmt.compound.declarations)
300 for(decl = stmt.compound.declarations->first; decl; decl = decl.next)
302 if(InsideIncl(&decl.loc, line, charPos))
304 idResult = FindParamsDeclaration(decl, line, charPos);
305 if(idResult) return idResult;
309 if(stmt.compound.statements)
312 for(statement = stmt.compound.statements->first; statement; statement = statement.next)
314 if(InsideIncl(&statement.loc, line, charPos))
316 idResult = FindParamsStatement(statement, line, charPos);
317 if(idResult) return idResult;
322 //curContext = stmt.compound.context.parent;
330 for(exp = stmt.expressions->first; exp; exp = exp.next)
332 if(InsideIncl(&exp.loc, line, charPos))
334 idResult = FindParamsExpression(exp, line, charPos);
335 if(idResult) return idResult;
344 for(exp = stmt.ifStmt.exp->first; exp; exp = exp.next)
346 if(InsideIncl(&exp.loc, line, charPos))
348 idResult = FindParamsExpression(exp, line, charPos);
349 if(idResult) return idResult;
354 if(InsideIncl(&stmt.ifStmt.stmt.loc, line, charPos))
356 idResult = FindParamsStatement(stmt.ifStmt.stmt, line, charPos);
357 if(idResult) return idResult;
360 if(stmt.ifStmt.elseStmt)
362 if(InsideIncl(&stmt.ifStmt.elseStmt.loc, line, charPos))
363 return FindParamsStatement(stmt.ifStmt.elseStmt, line, charPos);
370 for(exp = stmt.switchStmt.exp->first; exp; exp = exp.next)
372 if(InsideIncl(&exp.loc, line, charPos))
374 idResult = FindParamsExpression(exp, line, charPos);
375 if(idResult) return idResult;
378 if(stmt.switchStmt.stmt && InsideIncl(&stmt.switchStmt.stmt.loc, line, charPos))
379 return FindParamsStatement(stmt.switchStmt.stmt, line, charPos);
384 if(stmt.whileStmt.exp)
387 for(exp = stmt.whileStmt.exp->first; exp; exp = exp.next)
389 if(InsideIncl(&exp.loc, line, charPos))
391 idResult = FindParamsExpression(exp, line, charPos);
392 if(idResult) return idResult;
396 if(stmt.whileStmt.stmt && InsideIncl(&stmt.whileStmt.stmt.loc, line, charPos))
397 return FindParamsStatement(stmt.whileStmt.stmt, line, charPos);
404 if(stmt.doWhile.stmt && InsideIncl(&stmt.doWhile.stmt.loc, line, charPos))
406 idResult = FindParamsStatement(stmt.doWhile.stmt, line, charPos);
407 if(idResult) return idResult;
412 for(exp = stmt.doWhile.exp->first; exp; exp = exp.next)
414 if(InsideIncl(&exp.loc, line, charPos))
416 idResult = FindParamsExpression(exp, line, charPos);
417 if(idResult) return idResult;
427 if(stmt.forStmt.init && InsideIncl(&stmt.forStmt.init.loc, line, charPos))
429 idResult = FindParamsStatement(stmt.forStmt.init, line, charPos);
430 if(idResult) return idResult;
433 if(stmt.forStmt.check && InsideIncl(&stmt.forStmt.check.loc, line, charPos))
435 idResult = FindParamsStatement(stmt.forStmt.check, line, charPos);
436 if(idResult) return idResult;
439 if(stmt.forStmt.increment)
441 for(exp = stmt.forStmt.increment->first; exp; exp = exp.next)
443 if(InsideIncl(&exp.loc, line, charPos))
445 idResult = FindParamsExpression(exp, line, charPos);
446 if(idResult) return idResult;
451 if(stmt.forStmt.stmt)
452 return FindParamsStatement(stmt.forStmt.stmt, line, charPos);
466 for(exp = stmt.expressions->first; exp; exp = exp.next)
468 if(InsideIncl(&exp.loc, line, charPos))
470 idResult = FindParamsExpression(exp, line, charPos);
471 if(idResult) return idResult;
476 case fireWatchersStmt:
477 case stopWatchingStmt:
480 if(stmt._watch.watcher && InsideIncl(&stmt._watch.watcher.loc, line, charPos))
482 idResult = FindParamsExpression(stmt._watch.watcher, line, charPos);
483 if(idResult) return idResult;
485 if(stmt._watch.object && InsideIncl(&stmt._watch.object.loc, line, charPos))
487 idResult = FindParamsExpression(stmt._watch.object, line, charPos);
488 if(idResult) return idResult;
490 if(stmt._watch.watches)
492 for(_watch = stmt._watch.watches->first; _watch; _watch = _watch.next)
494 if(InsideIncl(&_watch.loc, line, charPos))
496 idResult = FindParamsIdentifier(_watch, line, charPos);
497 if(idResult) return idResult;
505 PropertyWatch _watch;
506 if(stmt._watch.watcher && InsideIncl(&stmt._watch.watcher.loc, line, charPos))
508 idResult = FindParamsExpression(stmt._watch.watcher, line, charPos);
509 if(idResult) return idResult;
511 if(stmt._watch.object && InsideIncl(&stmt._watch.object.loc, line, charPos))
513 idResult = FindParamsExpression(stmt._watch.object, line, charPos);
514 if(idResult) return idResult;
516 if(stmt._watch.watches)
518 for(_watch = stmt._watch.watches->first; _watch; _watch = _watch.next)
520 if(_watch.compound && InsideIncl(&_watch.compound.loc, line, charPos))
522 idResult = FindParamsStatement(_watch.compound, line, charPos);
523 if(idResult) return idResult;
533 static Identifier FindParamsInitializer(Initializer initializer, int line, int charPos)
535 switch(initializer.type)
537 case listInitializer:
542 for(init = initializer.list->first; init; init = init.next)
544 if(InsideIncl(&init.loc, line, charPos))
546 idResult = FindParamsInitializer(init, line, charPos);
547 if(idResult) return idResult;
553 if(InsideIncl(&initializer.exp.loc, line, charPos))
554 return FindParamsExpression(initializer.exp, line, charPos);
557 paramsInsideExp = initializer.exp;
565 static Identifier FindParamsInitDeclarator(InitDeclarator decl, int line, int charPos)
567 if(decl.initializer && InsideIncl(&decl.initializer.loc, line, charPos))
568 return FindParamsInitializer(decl.initializer, line, charPos);
572 static Identifier FindParamsSpecifier(Specifier spec, int line, int charPos)
578 case structSpecifier:
584 for(def = spec.definitions->first; def; def = def.next)
586 // TODO: Should use FindParamsClassDef here right?
588 //if(def.type == ClassDefDeclaration && def.decl && def.decl.type == DeclarationStruct)
589 // ProcessDeclaration(def.decl);
592 case declarationClassDef:
593 if(InsideIncl(&def.decl.loc, line, charPos))
595 idResult = FindParamsDeclaration(def.decl, line, charPos);
600 case defaultPropertiesClassDef:
603 for(init = def.defProperties->first; init; init = init.next)
605 if(InsideIncl(&init.realLoc, line, charPos))
607 Class oldThisClass = GetThisClass();
608 Context oldTopContext = GetTopContext();
609 SetThisClass(currentClass);
610 idResult = FindParamsMemberInit(init, line, charPos);
613 SetThisClass(oldThisClass);
618 case functionClassDef:
619 if(InsideIncl(&def.function.loc, line, charPos))
621 idResult = FindParamsClassFunction(def.function, line, charPos);
627 case propertyClassDef:
630 if(InsideIncl(&def.propertyDef.loc, line, charPos))
632 idResult = FindParamsProperty(def.propertyDef, line, charPos);
638 case propertyWatchClassDef:
639 if(def.propertyWatch && def.propertyWatch.compound && InsideIncl(&def.propertyWatch.compound.loc, line, charPos))
641 Class oldThisClass = GetThisClass();
642 Context oldTopContext = GetTopContext();
643 SetThisClass(currentClass);
644 idResult = FindParamsStatement(def.propertyWatch.compound, line, charPos);
645 if(idResult) return idResult;
646 SetThisClass(oldThisClass);
658 static Identifier FindParamsDeclaration(Declaration decl, int line, int charPos)
664 case structDeclaration:
669 for(spec = decl.specifiers->first; spec; spec = spec.next)
671 if(InsideIncl(&spec.loc, line, charPos))
673 idResult = FindParamsSpecifier(spec, line, charPos);
674 if(idResult) return idResult;
680 case initDeclaration:
683 // Need to loop through specifiers to look for :: completion
688 for(s = decl.specifiers->first; s; s = s.next)
690 if(InsideIncl(&s.loc, line, charPos))
692 idResult = FindParamsSpecifier(s, line, charPos);
693 if(idResult) return idResult;
698 if(decl.declarators && decl.declarators->first)
700 for(d = decl.declarators->first; d; d = d.next)
702 if(InsideIncl(&d.loc, line, charPos))
704 idResult = FindParamsInitDeclarator(d, line, charPos);
705 if(idResult) return idResult;
711 case instDeclaration:
712 if(InsideIncl(&decl.inst.loc, line, charPos))
713 return FindParamsInstance(decl.inst, line, charPos);
719 static Identifier FindParamsFunction(FunctionDefinition func, int line, int charPos)
721 if(func.body && Inside(&func.body.loc, line, charPos))
725 Identifier id = GetDeclId(func.declarator);
726 Symbol symbol = func.declarator.symbol;
727 Type type = symbol.type;
728 Class oldThisClass = GetThisClass();
729 Context oldTopContext = GetTopContext();
731 idResult = FindParamsStatement(func.body, line, charPos);
735 SetThisClass(oldThisClass);
736 SetTopContext(oldTopContext);
741 static Identifier FindParamsMemberInit(MemberInit init, int line, int charPos)
744 if(init.initializer && InsideIncl(&init.initializer.loc, line, charPos))
746 idResult = FindParamsInitializer(init.initializer, line, charPos);
749 if(init.identifiers && init.identifiers->first)
754 if(init.identifiers && init.identifiers->first && InsideIncl(&((Identifier)init.identifiers->first).loc, line, charPos))
756 idResult = FindParamsIdentifier(init.identifiers->first, line, charPos);
760 if(init.initializer && Inside(&init.initializer.loc, line, charPos))
762 if(init.identifiers && init.identifiers->first)
765 if(init.initializer.type == expInitializer)
767 paramsInsideExp = init.initializer.exp;
774 static Identifier FindParamsInstance(Instantiation inst, int line, int charPos)
776 Identifier idResult = null;
777 Class oldThisClass = GetThisClass();
778 Symbol sym = inst._class ? FindClass(inst._class.name) : null;
779 bool insideSomething = false;
781 Method method = null;
783 Class curClass = null;
784 DataMember curMember = null;
785 DataMember dataMember = null;
786 DataMember subMemberStack[256];
787 int subMemberStackPos = 0;
790 SetThisClass(sym.registered);
792 insideBrackets = !(inst.insideLoc.start.line > line || (line == inst.insideLoc.start.line && inst.insideLoc.start.charPos > charPos));
795 // Start with first member
796 eClass_FindNextMember(GetThisClass(), &curClass, &curMember, subMemberStack, &subMemberStackPos);
797 dataMember = curMember;
803 MemberInit memberInit;
804 for(init = inst.members->first; init; init = init.next)
806 if(init.loc.start.line > line || (line == init.loc.start.line && init.loc.start.charPos > charPos))
809 if(init.type == dataMembersInit && init.dataMembers && insideBrackets && sym)
811 for(memberInit = init.dataMembers->first; memberInit; memberInit = memberInit.next)
813 isAfterEqual = false;
815 if(memberInit.identifiers && memberInit.identifiers->first)
817 DataMember _subMemberStack[256];
818 int _subMemberStackPos = 0;
819 DataMember thisMember = eClass_FindDataMember(GetThisClass(), ((Identifier)memberInit.identifiers->first).string, GetPrivateModule(), _subMemberStack, &_subMemberStackPos);
822 // WARNING: Brackets needed until precomp fix
823 thisMember = (DataMember)eClass_FindProperty(GetThisClass(), ((Identifier)memberInit.identifiers->first).string, GetPrivateModule());
828 dataMember = thisMember;
829 if(thisMember.memberAccess == publicAccess)
831 curMember = thisMember;
832 curClass = thisMember._class;
833 memcpy(subMemberStack, _subMemberStack, sizeof(DataMember) * _subMemberStackPos);
834 subMemberStackPos = _subMemberStackPos;
838 method = eClass_FindMethod(GetThisClass(), ((Identifier)memberInit.identifiers->first).string, GetPrivateModule());
841 if(!idResult && InsideIncl(&memberInit.realLoc, line, charPos))
842 idResult = FindParamsMemberInit(memberInit, line, charPos);
844 if(InsideIncl(&memberInit.realLoc, line, charPos) || (memberInit.realLoc.end.line > line || (line == memberInit.realLoc.end.line && memberInit.realLoc.end.charPos > charPos)))
846 if(memberInit.identifiers && memberInit.identifiers->first && InsideIncl(&memberInit.loc, line, charPos) && !dataMember)
847 insideBrackets = false;
850 else if((!memberInit.identifiers || !memberInit.identifiers->first || curMember) && (memberInit.next || !Inside(&init.loc, line, charPos)))
853 eClass_FindNextMember(GetThisClass(), &curClass, &curMember, subMemberStack, &subMemberStackPos);
854 dataMember = curMember;
859 if(InsideIncl(&init.loc, line, charPos))
861 if(Inside(&init.loc, line, charPos))
862 if(init.type == methodMembersInit)
863 insideSomething = true;
865 if(init.type == methodMembersInit && Inside(&init.function.loc, line, charPos))
867 idResult = FindParamsClassFunction(init.function, line, charPos);
870 if(Inside(&init.loc, line, charPos))
874 if((init.loc.end.line > line || (line == init.loc.end.line && init.loc.end.charPos > charPos)))
878 if(!insideParams && sym && sym.registered && InsideIncl(&inst.insideLoc, line, charPos) && insideBrackets && !insideSomething)
880 if(dataMember && !method)
882 if(!dataMember.dataType)
883 dataMember.dataType = ProcessTypeString(dataMember.dataTypeString, false);
884 paramsInsideExp = MkExpDummy();
885 allocedDummyExp = true;
886 paramsInsideExp.destType = dataMember.dataType;
887 if(paramsInsideExp.destType) paramsInsideExp.destType.refCount++;
890 instanceType = paramsInsideExp.destType;
891 instanceName = dataMember.name;
896 if(!insideParams && sym && sym.registered && InsideIncl(&inst.insideLoc, line, charPos) && !insideSomething && insideBrackets)
900 paramsInsideExp = MkExpDummy();
901 allocedDummyExp = true;
902 paramsInsideExp.destType = method.dataType;
903 if(paramsInsideExp.destType) paramsInsideExp.destType.refCount++;
906 instanceType = paramsInsideExp.destType;
907 instanceName = method.name;
912 if(sym && !insideSomething && InsideIncl(&inst.insideLoc, line, charPos))
914 if(!isAfterEqual && !insideClass)
915 insideClass = sym.registered;
917 if(isAfterEqual && currentClass)
918 SetThisClass(currentClass);
920 return idResult ? idResult : (void *) -1;
926 SetThisClass(oldThisClass);
931 static Identifier FindParamsClassFunction(ClassFunction func, int line, int charPos)
933 if(func.body && Inside(&func.body.loc, line, charPos))
937 Identifier id = GetDeclId(func.declarator);
938 Symbol symbol = func.declarator ? func.declarator.symbol : null;
939 Type type = symbol ? symbol.type : null;
940 Class oldThisClass = GetThisClass();
941 Context oldTopContext = GetTopContext();
942 SetThisClass((type && type.thisClass) ? type.thisClass.registered : currentClass);
944 idResult = FindParamsStatement(func.body, line, charPos);
948 SetThisClass(oldThisClass);
949 SetTopContext(oldTopContext);
954 static Identifier FindParamsProperty(PropertyDef def, int line, int charPos)
957 if(def.getStmt && Inside(&def.getStmt.loc, line, charPos))
959 Class oldThisClass = GetThisClass();
960 Context oldTopContext = GetTopContext();
961 SetThisClass(currentClass);
962 result = FindParamsStatement(def.getStmt, line, charPos);
963 if(result) return result;
964 SetThisClass(oldThisClass);
966 if(def.setStmt && Inside(&def.setStmt.loc, line, charPos))
968 Class oldThisClass = GetThisClass();
969 Context oldTopContext = GetTopContext();
970 SetThisClass(currentClass);
971 result = FindParamsStatement(def.setStmt, line, charPos);
972 if(result) return result;
973 SetThisClass(oldThisClass);
978 static Identifier FindParamsClassDef(ClassDef def, int line, int charPos)
983 case declarationClassDef:
984 if(Inside(&def.decl.loc, line, charPos))
986 idResult = FindParamsDeclaration(def.decl, line, charPos);
991 case defaultPropertiesClassDef:
994 for(init = def.defProperties->first; init; init = init.next)
996 if(InsideIncl(&init.realLoc, line, charPos))
998 Class oldThisClass = GetThisClass();
999 Context oldTopContext = GetTopContext();
1000 SetThisClass(currentClass);
1001 idResult = FindParamsMemberInit(init, line, charPos);
1004 SetThisClass(oldThisClass);
1009 case functionClassDef:
1010 if(Inside(&def.function.loc, line, charPos))
1012 idResult = FindParamsClassFunction(def.function, line, charPos);
1017 case propertyClassDef:
1020 if(Inside(&def.propertyDef.loc, line, charPos))
1022 idResult = FindParamsProperty(def.propertyDef, line, charPos);
1028 case propertyWatchClassDef:
1029 if(def.propertyWatch && def.propertyWatch.compound && Inside(&def.propertyWatch.compound.loc, line, charPos))
1031 Class oldThisClass = GetThisClass();
1032 Context oldTopContext = GetTopContext();
1033 SetThisClass(currentClass);
1034 idResult = FindParamsStatement(def.propertyWatch.compound, line, charPos);
1035 if(idResult) return idResult;
1036 SetThisClass(oldThisClass);
1043 static Identifier FindParamsClass(ClassDefinition _class, int line, int charPos)
1045 Identifier idResult;
1046 bool insideSomething = false;
1047 if(_class.definitions)
1050 for(def = _class.definitions->first; def; def = def.next)
1052 if(def.type == defaultPropertiesClassDef ? InsideIncl(&def.loc, line, charPos) : Inside(&def.loc, line, charPos) )
1054 if(def.type != defaultPropertiesClassDef)
1055 insideSomething = true;
1057 idResult = FindParamsClassDef(def, line, charPos);
1063 if(!insideSomething)
1065 insideClass = _class.symbol.registered;
1071 Identifier FindParamsTree(OldList ast, int line, int charPos)
1073 Identifier idResult;
1078 FreeExpression(paramsInsideExp);
1079 allocedDummyExp = false;
1083 paramsInsideExp = null;
1086 functionType = null;
1087 instanceType = null;
1088 instanceName = null;
1089 insideParams = false;
1090 isAfterEqual = false;
1094 for(external = ast.first; external; external = external.next)
1096 switch(external.type)
1098 case functionExternal:
1099 if(Inside(&external.loc, line, charPos))
1101 idResult = FindParamsFunction(external.function, line, charPos);
1103 return (idResult == (void *)-1) ? null : idResult;
1106 case declarationExternal:
1107 if(InsideIncl(&external.loc, line, charPos))
1109 idResult = FindParamsDeclaration(external.declaration, line, charPos);
1111 return (idResult == (void *)-1) ? null : idResult;
1115 if(Inside(&external._class.loc, line, charPos))
1117 currentClass = external._class.symbol.registered;
1118 idResult = FindParamsClass(external._class, line, charPos);
1119 currentClass = null;
1121 return (idResult == (void *)-1) ? null : idResult;
1130 void FindParams_Terminate()
1134 FreeExpression(paramsInsideExp);
1135 allocedDummyExp = false;