📄 labelstack.h
字号:
// LabelStack.h: interface for the LabelStack class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_LABELSTACK_H__8213DBEA_9C6C_4957_A9F3_2AEAE9A67D36__INCLUDED_)
#define AFX_LABELSTACK_H__8213DBEA_9C6C_4957_A9F3_2AEAE9A67D36__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "string.h"
#include "codegen.h"
#define MAX_LABEL_STACK_COUNT 512
#include "Assert.h"
#define Assert assert
#define MAX_NO_OF_FUNC 512
extern CodeGenerator * cg;
class FunNameList
{
private:
int size;
const char * fns[256];
public:
void Clear()
{
size=0;
}
FunNameList()
{
size=0;
}
~FunNameList()
{
}
void Insert(const char * fn)
{
if(!LookUp(fn))
{
fns[size]=strdup(fn);
size++;
}
}
bool LookUp(const char * fn)
{
int i;
for(i=0;i<size;i++)
if(!strcmp(fns[i],fn))
return true;
return false;
}
int GetCount(){return size;};
const char * GetAt(int i )
{
return fns[i];
}
};
class LabelStack
{
public:
LabelStack(){ top=-1;}
~LabelStack()
{
top=-1;
}
void Push(const char * name)
{
top++;
Assert(top<MAX_LABEL_STACK_COUNT);
stack[top]=strdup(name);
}
void Push(int n)
{
Assert(n>0);
int i;
for(i=0;i<n;i++)
{
Push(cg->NewLabel());
}
}
void Pop()
{
Assert(top>=0);
top--;
}
void Pop(int n)
{
Assert(n>0);
int i;
for(i=0;i<n;i++)
Pop();
}
const char * GetFromTop(int n=0)
{
Assert(top-n>=0);
return stack[top-n];
}
private:
const char * stack[MAX_LABEL_STACK_COUNT];
int top;
};
#endif // !defined(AFX_LABELSTACK_H__8213DBEA_9C6C_4957_A9F3_2AEAE9A67D36__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -