1 /* see copyright notice in squirrel.h */
\r
2 #ifndef _SQFUNCSTATE_H_
\r
3 #define _SQFUNCSTATE_H_
\r
4 ///////////////////////////////////
\r
9 SQFuncState(SQSharedState *ss,SQFuncState *parent,CompilerErrorFunc efunc,void *ed);
\r
12 void Dump(SQFunctionProto *func);
\r
14 void Error(const SQChar *err);
\r
15 SQFuncState *PushChildState(SQSharedState *ss);
\r
16 void PopChildState();
\r
17 void AddInstruction(SQOpcode _op,SQInteger arg0=0,SQInteger arg1=0,SQInteger arg2=0,SQInteger arg3=0){SQInstruction i(_op,arg0,arg1,arg2,arg3);AddInstruction(i);}
\r
18 void AddInstruction(SQInstruction &i);
\r
19 void SetIntructionParams(SQInteger pos,SQInteger arg0,SQInteger arg1,SQInteger arg2=0,SQInteger arg3=0);
\r
20 void SetIntructionParam(SQInteger pos,SQInteger arg,SQInteger val);
\r
21 SQInstruction &GetInstruction(SQInteger pos){return _instructions[pos];}
\r
22 void PopInstructions(SQInteger size){for(SQInteger i=0;i<size;i++)_instructions.pop_back();}
\r
23 void SetStackSize(SQInteger n);
\r
24 SQInteger CountOuters(SQInteger stacksize);
\r
25 void SnoozeOpt(){_optimization=false;}
\r
26 void AddDefaultParam(SQInteger trg) { _defaultparams.push_back(trg); }
\r
27 SQInteger GetDefaultParamCount() { return _defaultparams.size(); }
\r
28 SQInteger GetCurrentPos(){return _instructions.size()-1;}
\r
29 SQInteger GetNumericConstant(const SQInteger cons);
\r
30 SQInteger GetNumericConstant(const SQFloat cons);
\r
31 SQInteger PushLocalVariable(const SQObject &name);
\r
32 void AddParameter(const SQObject &name);
\r
33 //void AddOuterValue(const SQObject &name);
\r
34 SQInteger GetLocalVariable(const SQObject &name);
\r
35 void MarkLocalAsOuter(SQInteger pos);
\r
36 SQInteger GetOuterVariable(const SQObject &name);
\r
37 SQInteger GenerateCode();
\r
38 SQInteger GetStackSize();
\r
39 SQInteger CalcStackFrameSize();
\r
40 void AddLineInfos(SQInteger line,bool lineop,bool force=false);
\r
41 SQFunctionProto *BuildProto();
\r
42 SQInteger AllocStackPos();
\r
43 SQInteger PushTarget(SQInteger n=-1);
\r
44 SQInteger PopTarget();
\r
45 SQInteger TopTarget();
\r
46 SQInteger GetUpTarget(SQInteger n);
\r
47 void DiscardTarget();
\r
48 bool IsLocal(SQUnsignedInteger stkpos);
\r
49 SQObject CreateString(const SQChar *s,SQInteger len = -1);
\r
50 SQObject CreateTable();
\r
51 bool IsConstant(const SQObject &name,SQObject &e);
\r
52 SQInteger _returnexp;
\r
53 SQLocalVarInfoVec _vlocals;
\r
54 SQIntVec _targetstack;
\r
55 SQInteger _stacksize;
\r
58 SQIntVec _unresolvedbreaks;
\r
59 SQIntVec _unresolvedcontinues;
\r
60 SQObjectPtrVec _functions;
\r
61 SQObjectPtrVec _parameters;
\r
62 SQOuterVarVec _outervalues;
\r
63 SQInstructionVec _instructions;
\r
64 SQLocalVarInfoVec _localvarinfos;
\r
65 SQObjectPtr _literals;
\r
66 SQObjectPtr _strings;
\r
68 SQObjectPtr _sourcename;
\r
69 SQInteger _nliterals;
\r
70 SQLineInfoVec _lineinfos;
\r
71 SQFuncState *_parent;
\r
72 SQIntVec _scope_blocks;
\r
73 SQIntVec _breaktargets;
\r
74 SQIntVec _continuetargets;
\r
75 SQIntVec _defaultparams;
\r
76 SQInteger _lastline;
\r
77 SQInteger _traps; //contains number of nested exception traps
\r
80 SQSharedState *_sharedstate;
\r
81 sqvector<SQFuncState*> _childstates;
\r
82 SQInteger GetConstant(const SQObject &cons);
\r
84 CompilerErrorFunc _errfunc;
\r
90 #endif //_SQFUNCSTATE_H_
\r