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))
195 paramsInsideExp = exp;
199 for(param = type.params.first, c = 0; c<arg && param; c++, param = (param.kind == ellipsisType ? param : param.next));
200 if(!param) paramsID = -1;
207 if(InsideIncl(&exp.member.exp.loc, line, charPos))
209 idResult = FindParamsExpression(exp.member.exp, line, charPos);
210 if(idResult) return idResult;
214 if(InsideIncl(&exp.member.exp.loc, line, charPos))
216 idResult = FindParamsExpression(exp.member.exp, line, charPos);
217 if(idResult) return idResult;
223 if(InsideIncl(&exp.cast.exp.loc, line, charPos))
225 idResult = FindParamsExpression(exp.cast.exp, line, charPos);
226 if(idResult) return idResult;
230 if(Inside(&exp.cond.cond.loc, line, charPos))
232 idResult = FindParamsExpression(exp.cond.cond, line, charPos);
233 if(idResult) return idResult;
237 Expression expression;
238 for(expression = exp.cond.exp->first; expression; expression = expression.next)
240 if(InsideIncl(&expression.loc, line, charPos))
242 idResult = FindParamsExpression(expression, line, charPos);
243 if(idResult) return idResult;
247 if(InsideIncl(&exp.cond.elseExp.loc, line, charPos))
249 idResult = FindParamsExpression(exp.cond.elseExp, line, charPos);
250 if(idResult) return idResult;
254 paramsInsideExp = oldExp;
258 static Identifier FindParamsStatement(Statement stmt, int line, int charPos)
265 if(InsideIncl(&stmt.labeled.stmt.loc, line, charPos))
266 return FindParamsStatement(stmt.labeled.stmt, line, charPos);
269 if(stmt.caseStmt.exp)
271 if(InsideIncl(&stmt.caseStmt.exp.loc, line, charPos))
272 return FindParamsExpression(stmt.caseStmt.exp, line, charPos);
275 if(stmt.caseStmt.stmt)
277 if(InsideIncl(&stmt.caseStmt.stmt.loc, line, charPos))
278 return FindParamsStatement(stmt.caseStmt.stmt, line, charPos);
281 case badDeclarationStmt:
283 Declaration decl = stmt.decl;
284 if(InsideIncl(&decl.loc, line, charPos))
286 idResult = FindParamsDeclaration(decl, line, charPos);
287 if(idResult) return idResult;
293 if(!stmt.compound.isSwitch)
294 SetCurrentContext(stmt.compound.context);
295 if(stmt.compound.declarations)
298 for(decl = stmt.compound.declarations->first; decl; decl = decl.next)
300 if(InsideIncl(&decl.loc, line, charPos))
302 idResult = FindParamsDeclaration(decl, line, charPos);
303 if(idResult) return idResult;
307 if(stmt.compound.statements)
310 for(statement = stmt.compound.statements->first; statement; statement = statement.next)
312 if(InsideIncl(&statement.loc, line, charPos))
314 idResult = FindParamsStatement(statement, line, charPos);
315 if(idResult) return idResult;
320 //curContext = stmt.compound.context.parent;
328 for(exp = stmt.expressions->first; exp; exp = exp.next)
330 if(InsideIncl(&exp.loc, line, charPos))
332 idResult = FindParamsExpression(exp, line, charPos);
333 if(idResult) return idResult;
342 for(exp = stmt.ifStmt.exp->first; exp; exp = exp.next)
344 if(InsideIncl(&exp.loc, line, charPos))
346 idResult = FindParamsExpression(exp, line, charPos);
347 if(idResult) return idResult;
352 if(InsideIncl(&stmt.ifStmt.stmt.loc, line, charPos))
354 idResult = FindParamsStatement(stmt.ifStmt.stmt, line, charPos);
355 if(idResult) return idResult;
358 if(stmt.ifStmt.elseStmt)
360 if(InsideIncl(&stmt.ifStmt.elseStmt.loc, line, charPos))
361 return FindParamsStatement(stmt.ifStmt.elseStmt, line, charPos);
368 for(exp = stmt.switchStmt.exp->first; exp; exp = exp.next)
370 if(InsideIncl(&exp.loc, line, charPos))
372 idResult = FindParamsExpression(exp, line, charPos);
373 if(idResult) return idResult;
376 if(stmt.switchStmt.stmt && InsideIncl(&stmt.switchStmt.stmt.loc, line, charPos))
377 return FindParamsStatement(stmt.switchStmt.stmt, line, charPos);
382 if(stmt.whileStmt.exp)
385 for(exp = stmt.whileStmt.exp->first; exp; exp = exp.next)
387 if(InsideIncl(&exp.loc, line, charPos))
389 idResult = FindParamsExpression(exp, line, charPos);
390 if(idResult) return idResult;
394 if(stmt.whileStmt.stmt && InsideIncl(&stmt.whileStmt.stmt.loc, line, charPos))
395 return FindParamsStatement(stmt.whileStmt.stmt, line, charPos);
402 if(stmt.doWhile.stmt && InsideIncl(&stmt.doWhile.stmt.loc, line, charPos))
404 idResult = FindParamsStatement(stmt.doWhile.stmt, line, charPos);
405 if(idResult) return idResult;
410 for(exp = stmt.doWhile.exp->first; exp; exp = exp.next)
412 if(InsideIncl(&exp.loc, line, charPos))
414 idResult = FindParamsExpression(exp, line, charPos);
415 if(idResult) return idResult;
425 if(stmt.forStmt.init && InsideIncl(&stmt.forStmt.init.loc, line, charPos))
427 idResult = FindParamsStatement(stmt.forStmt.init, line, charPos);
428 if(idResult) return idResult;
431 if(stmt.forStmt.check && InsideIncl(&stmt.forStmt.check.loc, line, charPos))
433 idResult = FindParamsStatement(stmt.forStmt.check, line, charPos);
434 if(idResult) return idResult;
437 if(stmt.forStmt.increment)
439 for(exp = stmt.forStmt.increment->first; exp; exp = exp.next)
441 if(InsideIncl(&exp.loc, line, charPos))
443 idResult = FindParamsExpression(exp, line, charPos);
444 if(idResult) return idResult;
449 if(stmt.forStmt.stmt)
450 return FindParamsStatement(stmt.forStmt.stmt, line, charPos);
464 for(exp = stmt.expressions->first; exp; exp = exp.next)
466 if(InsideIncl(&exp.loc, line, charPos))
468 idResult = FindParamsExpression(exp, line, charPos);
469 if(idResult) return idResult;
474 case fireWatchersStmt:
475 case stopWatchingStmt:
478 if(stmt._watch.watcher && InsideIncl(&stmt._watch.watcher.loc, line, charPos))
480 idResult = FindParamsExpression(stmt._watch.watcher, line, charPos);
481 if(idResult) return idResult;
483 if(stmt._watch.object && InsideIncl(&stmt._watch.object.loc, line, charPos))
485 idResult = FindParamsExpression(stmt._watch.object, line, charPos);
486 if(idResult) return idResult;
488 if(stmt._watch.watches)
490 for(_watch = stmt._watch.watches->first; _watch; _watch = _watch.next)
492 if(InsideIncl(&_watch.loc, line, charPos))
494 idResult = FindParamsIdentifier(_watch, line, charPos);
495 if(idResult) return idResult;
503 PropertyWatch _watch;
504 if(stmt._watch.watcher && InsideIncl(&stmt._watch.watcher.loc, line, charPos))
506 idResult = FindParamsExpression(stmt._watch.watcher, line, charPos);
507 if(idResult) return idResult;
509 if(stmt._watch.object && InsideIncl(&stmt._watch.object.loc, line, charPos))
511 idResult = FindParamsExpression(stmt._watch.object, line, charPos);
512 if(idResult) return idResult;
514 if(stmt._watch.watches)
516 for(_watch = stmt._watch.watches->first; _watch; _watch = _watch.next)
518 if(_watch.compound && InsideIncl(&_watch.compound.loc, line, charPos))
520 idResult = FindParamsStatement(_watch.compound, line, charPos);
521 if(idResult) return idResult;
531 static Identifier FindParamsInitializer(Initializer initializer, int line, int charPos)
533 switch(initializer.type)
535 case listInitializer:
540 for(init = initializer.list->first; init; init = init.next)
542 if(InsideIncl(&init.loc, line, charPos))
544 idResult = FindParamsInitializer(init, line, charPos);
545 if(idResult) return idResult;
551 if(InsideIncl(&initializer.exp.loc, line, charPos))
552 return FindParamsExpression(initializer.exp, line, charPos);
555 paramsInsideExp = initializer.exp;
563 static Identifier FindParamsInitDeclarator(InitDeclarator decl, int line, int charPos)
565 if(decl.initializer && InsideIncl(&decl.initializer.loc, line, charPos))
566 return FindParamsInitializer(decl.initializer, line, charPos);
570 static Identifier FindParamsSpecifier(Specifier spec, int line, int charPos)
576 case structSpecifier:
582 for(def = spec.definitions->first; def; def = def.next)
584 // TODO: Should use FindParamsClassDef here right?
586 //if(def.type == ClassDefDeclaration && def.decl && def.decl.type == DeclarationStruct)
587 // ProcessDeclaration(def.decl);
590 case declarationClassDef:
591 if(InsideIncl(&def.decl.loc, line, charPos))
593 idResult = FindParamsDeclaration(def.decl, line, charPos);
598 case defaultPropertiesClassDef:
601 for(init = def.defProperties->first; init; init = init.next)
603 if(InsideIncl(&init.realLoc, line, charPos))
605 Class oldThisClass = GetThisClass();
606 Context oldTopContext = GetTopContext();
607 SetThisClass(currentClass);
608 idResult = FindParamsMemberInit(init, line, charPos);
611 SetThisClass(oldThisClass);
616 case functionClassDef:
617 if(InsideIncl(&def.function.loc, line, charPos))
619 idResult = FindParamsClassFunction(def.function, line, charPos);
625 case propertyClassDef:
628 if(InsideIncl(&def.propertyDef.loc, line, charPos))
630 idResult = FindParamsProperty(def.propertyDef, line, charPos);
636 case propertyWatchClassDef:
637 if(def.propertyWatch && def.propertyWatch.compound && InsideIncl(&def.propertyWatch.compound.loc, line, charPos))
639 Class oldThisClass = GetThisClass();
640 Context oldTopContext = GetTopContext();
641 SetThisClass(currentClass);
642 idResult = FindParamsStatement(def.propertyWatch.compound, line, charPos);
643 if(idResult) return idResult;
644 SetThisClass(oldThisClass);
656 static Identifier FindParamsDeclaration(Declaration decl, int line, int charPos)
662 case structDeclaration:
667 for(spec = decl.specifiers->first; spec; spec = spec.next)
669 if(InsideIncl(&spec.loc, line, charPos))
671 idResult = FindParamsSpecifier(spec, line, charPos);
672 if(idResult) return idResult;
678 case initDeclaration:
681 // Need to loop through specifiers to look for :: completion
686 for(s = decl.specifiers->first; s; s = s.next)
688 if(InsideIncl(&s.loc, line, charPos))
690 idResult = FindParamsSpecifier(s, line, charPos);
691 if(idResult) return idResult;
696 if(decl.declarators && decl.declarators->first)
698 for(d = decl.declarators->first; d; d = d.next)
700 if(InsideIncl(&d.loc, line, charPos))
702 idResult = FindParamsInitDeclarator(d, line, charPos);
703 if(idResult) return idResult;
709 case instDeclaration:
710 if(InsideIncl(&decl.inst.loc, line, charPos))
711 return FindParamsInstance(decl.inst, line, charPos);
717 static Identifier FindParamsFunction(FunctionDefinition func, int line, int charPos)
719 if(func.body && Inside(&func.body.loc, line, charPos))
723 Identifier id = GetDeclId(func.declarator);
724 Symbol symbol = func.declarator.symbol;
725 Type type = symbol.type;
726 Class oldThisClass = GetThisClass();
727 Context oldTopContext = GetTopContext();
729 idResult = FindParamsStatement(func.body, line, charPos);
733 SetThisClass(oldThisClass);
734 SetTopContext(oldTopContext);
739 static Identifier FindParamsMemberInit(MemberInit init, int line, int charPos)
742 if(init.initializer && InsideIncl(&init.initializer.loc, line, charPos))
744 idResult = FindParamsInitializer(init.initializer, line, charPos);
747 if(init.identifiers && init.identifiers->first)
752 if(init.identifiers && init.identifiers->first && InsideIncl(&((Identifier)init.identifiers->first).loc, line, charPos))
754 idResult = FindParamsIdentifier(init.identifiers->first, line, charPos);
758 if(init.initializer && Inside(&init.initializer.loc, line, charPos))
760 if(init.identifiers && init.identifiers->first)
763 if(init.initializer.type == expInitializer)
765 paramsInsideExp = init.initializer.exp;
772 static Identifier FindParamsInstance(Instantiation inst, int line, int charPos)
774 Identifier idResult = null;
775 Class oldThisClass = GetThisClass();
776 Symbol sym = inst._class ? FindClass(inst._class.name) : null;
777 bool insideSomething = false;
779 Method method = null;
781 Class curClass = null;
782 DataMember curMember = null;
783 DataMember dataMember = null;
784 DataMember subMemberStack[256];
785 int subMemberStackPos = 0;
788 SetThisClass(sym.registered);
790 insideBrackets = !(inst.insideLoc.start.line > line || (line == inst.insideLoc.start.line && inst.insideLoc.start.charPos > charPos));
793 // Start with first member
794 eClass_FindNextMember(GetThisClass(), &curClass, &curMember, subMemberStack, &subMemberStackPos);
795 dataMember = curMember;
801 MemberInit memberInit;
802 for(init = inst.members->first; init; init = init.next)
804 if(init.loc.start.line > line || (line == init.loc.start.line && init.loc.start.charPos > charPos))
807 if(init.type == dataMembersInit && init.dataMembers && insideBrackets && sym)
809 for(memberInit = init.dataMembers->first; memberInit; memberInit = memberInit.next)
811 isAfterEqual = false;
813 if(memberInit.identifiers && memberInit.identifiers->first)
815 DataMember _subMemberStack[256];
816 int _subMemberStackPos = 0;
817 DataMember thisMember = eClass_FindDataMember(GetThisClass(), ((Identifier)memberInit.identifiers->first).string, GetPrivateModule(), _subMemberStack, &_subMemberStackPos);
820 // WARNING: Brackets needed until precomp fix
821 thisMember = (DataMember)eClass_FindProperty(GetThisClass(), ((Identifier)memberInit.identifiers->first).string, GetPrivateModule());
826 dataMember = thisMember;
827 if(thisMember.memberAccess == publicAccess)
829 curMember = thisMember;
830 curClass = thisMember._class;
831 memcpy(subMemberStack, _subMemberStack, sizeof(DataMember) * _subMemberStackPos);
832 subMemberStackPos = _subMemberStackPos;
836 method = eClass_FindMethod(GetThisClass(), ((Identifier)memberInit.identifiers->first).string, GetPrivateModule());
839 if(!idResult && InsideIncl(&memberInit.realLoc, line, charPos))
840 idResult = FindParamsMemberInit(memberInit, line, charPos);
842 if(InsideIncl(&memberInit.realLoc, line, charPos) || (memberInit.realLoc.end.line > line || (line == memberInit.realLoc.end.line && memberInit.realLoc.end.charPos > charPos)))
844 if(memberInit.identifiers && memberInit.identifiers->first && InsideIncl(&memberInit.loc, line, charPos) && !dataMember)
845 insideBrackets = false;
848 else if((!memberInit.identifiers || !memberInit.identifiers->first || curMember) && (memberInit.next || !Inside(&init.loc, line, charPos)))
851 eClass_FindNextMember(GetThisClass(), &curClass, &curMember, subMemberStack, &subMemberStackPos);
852 dataMember = curMember;
857 if(InsideIncl(&init.loc, line, charPos))
859 if(Inside(&init.loc, line, charPos))
860 if(init.type == methodMembersInit)
861 insideSomething = true;
863 if(init.type == methodMembersInit && Inside(&init.function.loc, line, charPos))
865 idResult = FindParamsClassFunction(init.function, line, charPos);
868 if(Inside(&init.loc, line, charPos))
872 if((init.loc.end.line > line || (line == init.loc.end.line && init.loc.end.charPos > charPos)))
876 if(!insideParams && sym && sym.registered && InsideIncl(&inst.insideLoc, line, charPos) && insideBrackets && !insideSomething)
878 if(dataMember && !method)
880 if(!dataMember.dataType)
881 dataMember.dataType = ProcessTypeString(dataMember.dataTypeString, false);
882 paramsInsideExp = MkExpDummy();
883 allocedDummyExp = true;
884 paramsInsideExp.destType = dataMember.dataType;
885 if(paramsInsideExp.destType) paramsInsideExp.destType.refCount++;
888 instanceType = paramsInsideExp.destType;
889 instanceName = dataMember.name;
894 if(!insideParams && sym && sym.registered && InsideIncl(&inst.insideLoc, line, charPos) && !insideSomething && insideBrackets)
898 paramsInsideExp = MkExpDummy();
899 allocedDummyExp = true;
900 paramsInsideExp.destType = method.dataType;
901 if(paramsInsideExp.destType) paramsInsideExp.destType.refCount++;
904 instanceType = paramsInsideExp.destType;
905 instanceName = method.name;
910 if(sym && !insideSomething && InsideIncl(&inst.insideLoc, line, charPos))
912 if(!isAfterEqual && !insideClass)
913 insideClass = sym.registered;
915 if(isAfterEqual && currentClass)
916 SetThisClass(currentClass);
918 return idResult ? idResult : (void *) -1;
924 SetThisClass(oldThisClass);
929 static Identifier FindParamsClassFunction(ClassFunction func, int line, int charPos)
931 if(func.body && Inside(&func.body.loc, line, charPos))
935 Identifier id = GetDeclId(func.declarator);
936 Symbol symbol = func.declarator ? func.declarator.symbol : null;
937 Type type = symbol ? symbol.type : null;
938 Class oldThisClass = GetThisClass();
939 Context oldTopContext = GetTopContext();
940 SetThisClass((type && type.thisClass) ? type.thisClass.registered : currentClass);
942 idResult = FindParamsStatement(func.body, line, charPos);
946 SetThisClass(oldThisClass);
947 SetTopContext(oldTopContext);
952 static Identifier FindParamsProperty(PropertyDef def, int line, int charPos)
955 if(def.getStmt && Inside(&def.getStmt.loc, line, charPos))
957 Class oldThisClass = GetThisClass();
958 Context oldTopContext = GetTopContext();
959 SetThisClass(currentClass);
960 result = FindParamsStatement(def.getStmt, line, charPos);
961 if(result) return result;
962 SetThisClass(oldThisClass);
964 if(def.setStmt && Inside(&def.setStmt.loc, line, charPos))
966 Class oldThisClass = GetThisClass();
967 Context oldTopContext = GetTopContext();
968 SetThisClass(currentClass);
969 result = FindParamsStatement(def.setStmt, line, charPos);
970 if(result) return result;
971 SetThisClass(oldThisClass);
976 static Identifier FindParamsClassDef(ClassDef def, int line, int charPos)
981 case declarationClassDef:
982 if(Inside(&def.decl.loc, line, charPos))
984 idResult = FindParamsDeclaration(def.decl, line, charPos);
989 case defaultPropertiesClassDef:
992 for(init = def.defProperties->first; init; init = init.next)
994 if(InsideIncl(&init.realLoc, line, charPos))
996 Class oldThisClass = GetThisClass();
997 Context oldTopContext = GetTopContext();
998 SetThisClass(currentClass);
999 idResult = FindParamsMemberInit(init, line, charPos);
1002 SetThisClass(oldThisClass);
1007 case functionClassDef:
1008 if(Inside(&def.function.loc, line, charPos))
1010 idResult = FindParamsClassFunction(def.function, line, charPos);
1015 case propertyClassDef:
1018 if(Inside(&def.propertyDef.loc, line, charPos))
1020 idResult = FindParamsProperty(def.propertyDef, line, charPos);
1026 case propertyWatchClassDef:
1027 if(def.propertyWatch && def.propertyWatch.compound && Inside(&def.propertyWatch.compound.loc, line, charPos))
1029 Class oldThisClass = GetThisClass();
1030 Context oldTopContext = GetTopContext();
1031 SetThisClass(currentClass);
1032 idResult = FindParamsStatement(def.propertyWatch.compound, line, charPos);
1033 if(idResult) return idResult;
1034 SetThisClass(oldThisClass);
1041 static Identifier FindParamsClass(ClassDefinition _class, int line, int charPos)
1043 Identifier idResult;
1044 bool insideSomething = false;
1045 if(_class.definitions)
1048 for(def = _class.definitions->first; def; def = def.next)
1050 if(def.type == defaultPropertiesClassDef ? InsideIncl(&def.loc, line, charPos) : Inside(&def.loc, line, charPos) )
1052 if(def.type != defaultPropertiesClassDef)
1053 insideSomething = true;
1055 idResult = FindParamsClassDef(def, line, charPos);
1061 if(!insideSomething)
1063 insideClass = _class.symbol.registered;
1069 Identifier FindParamsTree(OldList ast, int line, int charPos)
1071 Identifier idResult;
1076 FreeExpression(paramsInsideExp);
1077 allocedDummyExp = false;
1081 paramsInsideExp = null;
1084 functionType = null;
1085 instanceType = null;
1086 instanceName = null;
1087 insideParams = false;
1088 isAfterEqual = false;
1092 for(external = ast.first; external; external = external.next)
1094 switch(external.type)
1096 case functionExternal:
1097 if(Inside(&external.loc, line, charPos))
1099 idResult = FindParamsFunction(external.function, line, charPos);
1101 return (idResult == (void *)-1) ? null : idResult;
1104 case declarationExternal:
1105 if(InsideIncl(&external.loc, line, charPos))
1107 idResult = FindParamsDeclaration(external.declaration, line, charPos);
1109 return (idResult == (void *)-1) ? null : idResult;
1113 if(Inside(&external._class.loc, line, charPos))
1115 currentClass = external._class.symbol.registered;
1116 idResult = FindParamsClass(external._class, line, charPos);
1117 currentClass = null;
1119 return (idResult == (void *)-1) ? null : idResult;
1128 void FindParams_Terminate()
1132 FreeExpression(paramsInsideExp);
1133 allocedDummyExp = false;